java课程设计-拼图游戏代码

合集下载

java拼图小游戏课程设计

java拼图小游戏课程设计

java拼图小游戏课程设计一、课程目标知识目标:1. 学生能理解Java基本语法和面向对象编程的概念;2. 学生能掌握使用Java编写图形用户界面(GUI)的方法;3. 学生能了解数组的使用以及二维数组在拼图游戏中的应用;4. 学生能掌握基本的事件处理和逻辑判断方法。

技能目标:1. 学生能运用所学知识,设计并编写出一个简单的Java拼图小游戏;2. 学生能通过调试和优化代码,提高程序的稳定性和用户体验;3. 学生能在团队协作中发挥个人优势,共同完成项目任务。

情感态度价值观目标:1. 学生培养对编程的兴趣和热情,激发探究精神;2. 学生在项目实践中,树立自信心,勇于面对挑战;3. 学生通过团队协作,学会沟通、分享和承担责任;4. 学生在编程实践中,遵循道德规范,尊重他人成果。

本课程针对初中年级学生,结合Java编程语言的教学要求,注重培养学生的编程兴趣和实际动手能力。

课程以拼图小游戏为载体,让学生在实践过程中掌握Java编程基础和面向对象编程思想,提高解决问题的能力和团队协作精神。

通过本课程的学习,期望学生能够达到上述具体、可衡量的学习成果。

二、教学内容1. Java基本语法与面向对象编程:- 数据类型、变量、运算符- 控制结构:条件语句、循环语句- 面向对象:类、对象、构造方法、封装、继承、多态2. Java图形用户界面(GUI)设计:- Swing组件:窗口、标签、按钮、面板- 布局管理器:边界布局、流布局、网格布局- 事件处理:事件监听器、事件适配器3. 数组与二维数组:- 数组的声明、初始化、遍历- 二维数组的操作与应用4. 拼图游戏原理与实现:- 游戏逻辑设计- 图片切割与显示- 拼图移动与验证5. 程序调试与优化:- 代码调试技巧- 性能优化方法6. 团队协作与项目管理:- 项目任务分配- 团队沟通与协作- 项目进度管理本教学内容根据课程目标,结合教材相关章节,以科学性和系统性为原则进行组织。

拼图游戏java课程设计

拼图游戏java课程设计

拼图游戏java 课程设计一、教学目标本课程的目标是让学生了解和掌握Java编程语言的基本知识,通过拼图游戏的项目实践,培养学生的编程能力、逻辑思维能力和问题解决能力。

知识目标包括Java语言的基本语法、数据结构、控制流程、文件操作等;技能目标包括使用Java开发工具进行代码编写、调试和运行;情感态度价值观目标包括培养学生的团队合作意识、创新精神和对计算机科学的兴趣。

二、教学内容教学内容主要包括Java语言的基本语法、数据结构、控制流程、文件操作等。

具体安排如下:1.第一章:Java语言概述,介绍Java语言的发展历程、特点和应用领域;2.第二章:基本语法,学习Java语言的基本数据类型、运算符、表达式和语句;3.第三章:面向对象编程,学习类的定义、创建对象、继承、多态和封装;4.第四章:数据结构,学习数组、链表、栈和队列的基本概念和应用;5.第五章:控制流程,学习条件语句、循环语句和异常处理;6.第六章:文件操作,学习文件的读写、目录的操作和文件过滤器。

三、教学方法本课程采用讲授法、案例分析法和实验法相结合的教学方法。

在讲授基本语法和概念时,通过生动的案例进行讲解,让学生更好地理解和掌握;在实践环节,引导学生动手编写代码,通过实验法培养学生的实际操作能力。

同时,鼓励学生进行小组讨论,共同解决问题,培养团队合作意识。

四、教学资源教学资源包括教材、多媒体资料和实验设备。

教材选用《Java编程思想》作为主教材,辅助以《Java核心技术》等参考书;多媒体资料包括教学PPT、视频教程等,通过图文并茂的方式帮助学生理解;实验设备包括计算机、网络和编程工具,为学生提供实践操作的环境。

五、教学评估教学评估主要包括平时表现、作业和考试三个部分。

平时表现占30%,主要评估学生的课堂参与度、提问和回答问题的积极性等;作业占30%,主要评估学生的代码编写能力、问题解决能力和团队合作精神;考试占40%,主要评估学生对Java语言基本概念和编程技能的掌握程度。

Java语言实现拼图游戏源代码

Java语言实现拼图游戏源代码

Java语言实现拼图游戏源代码/** JA V A小游戏-拼图我做的第一个小游戏* Cell类是继承的按钮类,并加上相应图形,形成方格*MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心*/import java.awt.Rectangle;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JOptionPane;import javax.swing.JPanel;import java.awt.BorderLayout;import java.awt.Button;import java.awt.Choice;import java.awt.Color;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.Icon;import javax.swing.JButton;public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas;JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板Button start,preview,set;//定义开始,预览,设定按钮Container container;//容器,得到内容面板public MyMainFrame() {//初使化container=this.getContentPane();start=new Button("开始");start.addActionListener(this);preview=new Button("预览");preview.addActionListener(this);set = new Button("设置");set.addActionListener(this);panelPreview=new JPanel();panelPreview.setLayout(null);Icon icon=new ImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon);label.setBounds(0,0,300,300);panelPreview.add(label);panelNorth=new JPanel();panelNorth.setBackground(Color.red);panelNorth.add(start);panelNorth.add(preview);panelNorth.add(set);myCanvas=new MyCanvas();container.add(myCanvas,BorderLayout.CENTER);container.add(panelNorth,BorderLayout.NORTH);this.setTitle("拼图小游戏-明");this.setLocation(300,200);this.setSize(308,365);this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(3);}public static void main(String[] args) {// TODO 自动生成方法存根new MyMainFrame();}public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理// TODO 自动生成方法存根Button button=(Button)arg0.getSource();if(button==start){myCanvas.Start();}else if(button==preview){if(button.getLabel()=="预览"){container.remove(myCanvas);container.add(panelPreview);panelPreview.updateUI();container.repaint();button.setLabel("返回");}else{container.remove(panelPreview);container.add(myCanvas);container.repaint();button.setLabel("预览");}}else if(button==set){//修改所选图片Choice pic = new Choice();pic.add("小猫");pic.add("小猪");pic.add("云");pic.add("QQ");pic.add("卡通");pic.add("花");int i=JOptionPane.showConfirmDialog(this, pic, "选择图片", JOptionPane.OK_CANCEL_OPTION);if(i==JOptionPane.YES_OPTION){MyCanvas.pictureID=pic.getSelectedIndex()+1;myCanvas.reLoadPictrue();Icon icon=new ImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon);label.setBounds(0,0,300,300);panelPreview.removeAll();panelPreview.add(label);panelPreview.repaint();}}}}class MyCanvas extends JPanel implements MouseListener {boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件Cell cell[];//定义方格Rectangle cellNull;//定义空方格区域public static int pictureID=1;//当前选择的图片代号public MyCanvas() {this.setLayout(null);this.setSize(400,400);cellNull=new Rectangle(200,200,100,100);//空方格区域在第三行每三列cell=new Cell[9];Icon icon;for (int i = 0; i < 3; i++) {//为9个方格加载图片,并初使化坐标,形成三行三列for(int j=0;j<3;j++){icon=new ImageIcon("pic_"+pictureID+"_"+(i*3+j+1)+".jpg");cell[i*3+j]=new Cell(icon);cell[i*3+j].setLocation(j*100,i*100);this.add(cell[i*3+j]);}}this.remove(cell[8]);//移除最后一个多余的方格}文章转自上海青大实训:。

java拼图游戏的课程设计

java拼图游戏的课程设计

java拼图游戏的课程设计一、课程目标知识目标:1. 学生能理解Java编程语言中面向对象的基本概念,包括类、对象、继承和封装。

2. 学生能够掌握Java中事件处理、图形用户界面(GUI)设计和数组的使用,以实现拼图游戏功能。

3. 学生能够运用算法思维,实现拼图游戏的逻辑和图像的随机打乱、移动和复原。

技能目标:4. 学生能够运用Eclipse或其它IDE创建Java项目,编写、调试和运行拼图游戏的代码。

5. 学生通过实践,提高问题解决能力,能够独立完成类似规模的小型程序开发。

6. 学生能够进行基本的代码重构,提升代码的可读性和可维护性。

情感态度价值观目标:7. 学生通过团队合作开发拼图游戏,培养团队协作能力和沟通技巧。

8. 学生在游戏编程中体会编程的乐趣,增强对计算机编程和信息技术学科的兴趣和热情。

9. 学生通过编程实践,培养创新意识和动手能力,增强自信心和成就感。

本课程针对高中年级学生设计,他们已经具备了一定的编程基础和逻辑思维能力。

课程性质为实践性较强的信息技术课程,旨在通过拼图游戏的开发,使学生将理论知识与实践操作相结合,提升实际编程能力。

教学要求注重培养学生的自主学习和问题解决能力,鼓励学生在实践中创新,形成积极的情感态度和价值观。

通过具体学习成果的分解,后续教学设计和评估将更有针对性和有效性。

二、教学内容1. 面向对象基础:- 类的定义与使用- 对象的创建与操作- 继承与多态的概念及应用- 封装原则及实现方法2. Java图形用户界面(GUI)设计:- Swing库的简介与使用- JFrame、JPanel等容器组件的应用- 常用组件如按钮、标签、文本框等的添加与布局3. 事件处理机制:- 事件监听器与适配器的使用- 鼠标事件、键盘事件的处理- 事件响应与拼图游戏逻辑的结合4. 数组与算法:- 数组的声明、创建与操作- 图像数组的使用与拼图布局- 算法思维训练,实现拼图打乱、移动与复原5. 编程实践:- 使用Eclipse或其它IDE创建Java项目- 分步骤编写拼图游戏代码,实现游戏功能- 代码调试与优化,提高程序性能与可读性6. 团队合作与沟通:- 分组进行项目开发,明确分工与协作- 交流编程思路与问题解决方案- 提交项目报告,分享开发经验教学内容依据课程目标,结合课本知识体系进行组织,确保科学性和系统性。

java语言实现拼图游戏源代码

java语言实现拼图游戏源代码

java语言实现拼图游戏源代码Java语言实现拼图游戏源代码 /** JAVA小游戏,拼图我做的第一个小游戏* Cell类是继承的按钮类,并加上相应图形,形成方格*MyCanvas是一个面板,加载Cell类的对象(方格),是这三个类中的核心 */ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener;import javax.swing.Icon;import javax.swing.ImageIcon; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Button;import java.awt.Choice;import java.awt.Color;import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;import javax.swing.Icon;import javax.swing.ImageIcon; import javax.swing.JFrame; importjavax.swing.JLabel; import javax.swing.JOptionPane; importjavax.swing.JPanel; import javax.swing.Icon;import javax.swing.JButton;public class MyMainFrame extends JFrame implements ActionListener { MyCanvas myCanvas;JPanel panelNorth,panelPreview;//定义上方的面板,及预览所需的面板Button start,preview,set;//定义开始,预览,设定按钮Container container;//容器,得到内容面板public MyMainFrame() {//初使化container=this.getContentPane(); start=new Button("开始");start.addActionListener(this); preview=new Button("预览");preview.addActionListener(this); set = new Button("设置");set.addActionListener(this); panelPreview=new JPanel();panelPreview.setLayout(null); Icon icon=newImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon); label.setBounds(0,0,300,300); panelPreview.add(label);panelNorth=new JPanel();panelNorth.setBackground(Color.red); panelNorth.add(start);panelNorth.add(preview);panelNorth.add(set);myCanvas=new MyCanvas();container.add(myCanvas,BorderLayout.CENTER);container.add(panelNorth,BorderLayout.NORTH);this.setTitle("拼图小游戏-明");this.setLocation(300,200);this.setSize(308,365);this.setResizable(false);this.setVisible(true);this.setDefaultCloseOperation(3); }public static void main(String[] args) {// TODO 自动生成方法存根new MyMainFrame();}public void actionPerformed(ActionEvent arg0) {//对三个按钮事件的处理 // TODO 自动生成方法存根Button button=(Button)arg0.getSource(); if(button==start){myCanvas.Start();}else if(button==preview){if(button.getLabel()=="预览"){container.remove(myCanvas); container.add(panelPreview); panelPreview.updateUI();container.repaint();button.setLabel("返回");}else{container.remove(panelPreview); container.add(myCanvas); container.repaint();button.setLabel("预览");}}else if(button==set){//修改所选图片Choice pic = new Choice(); pic.add("小猫");pic.add("小猪");pic.add("云");pic.add("QQ");pic.add("卡通");pic.add("花");int i=JOptionPane.showConfirmDialog(this, pic, "选择图片",JOptionPane.OK_CANCEL_OPTION);if(i==JOptionPane.YES_OPTION){ MyCanvas.pictureID=pic.getSelectedIndex() +1;myCanvas.reLoadPictrue(); Icon icon=newImageIcon("pic_"+MyCanvas.pictureID+".jpg");JLabel label=new JLabel(icon); label.setBounds(0,0,300,300); panelPreview.removeAll(); panelPreview.add(label);panelPreview.repaint();}}}}class MyCanvas extends JPanel implements MouseListener {boolean hasAddActionListener=false;//设置方格的动作监听器的标志位,TRUE为已经添加上动作事件,FALSE是尚未添加动作事件Cell cell[];//定义方格Rectangle cellNull;//定义空方格区域public static int pictureID=1;//当前选择的图片代号public MyCanvas() {this.setLayout(null);this.setSize(400,400);cellNull=new Rectangle(200,200,100,100);//空方格区域在第三行每三列cell=new Cell[9];Icon icon;for (int i = 0; i < 3; i++) {//为9个方格加载图片,并初使化坐标,形成三行三列 for(int j=0;j<3;j++){icon=new ImageIcon("pic_"+pictureID+"_"+(i*3+j+1)+".jpg");cell[i*3+j]=new Cell(icon); cell[i*3+j].setLocation(j*100,i*100); this.add(cell[i*3+j]);}}this.remove(cell[8]);//移除最后一个多余的方格}文章转自上海青大实训:谣言:吃太咸了会得病,导语:“人体每日摄入食盐不应过多,否则易患多种疾病。

java课程设计拼图游戏

java课程设计拼图游戏

import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import javax.swing.*;public class Pintu extends JFrame implements KeyListener{PicPanel picPanel;JLabel statusText = new JLabel("");JLabel statusimg = new JLabel("yuantu");public static void main(String[] args){Image img = Toolkit.getDefaultToolkit().getImage("D:/tierui/jsp/Pintu/src/img/pintu.jpg");Pintu pintu1 = new Pintu(img);pintu1.setVisible(true);}public Pintu(Image img) throws HeadlessException{picPanel = new PicPanel(img, statusText,statusimg);this.setLayout(new BorderLayout());add(picPanel, BorderLayout.CENTER);add(statusText, BorderLayout.SOUTH);setTitle("拼图游戏");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setSize(600, 400);Dimension size = Toolkit.getDefaultToolkit().getScreenSize();//获得屏幕的标尺int screenWidth = size.width;int screenHeight = size.height;int x = (screenWidth - this.getWidth())/2;int y = (screenHeight - this.getHeight())/2;this.setLocation(x, y);addKeyListener(this);}public void keyPressed(KeyEvent e){int nDirection = picPanel.DIRECTION_NONE;switch (e.getKeyCode()){case KeyEvent.VK_DOWN:nDirection = picPanel.DIRECTION_DOWN;break;case KeyEvent.VK_UP:nDirection = picPanel.DIRECTION_UP;break;case KeyEvent.VK_LEFT:nDirection = picPanel.DIRECTION_LEFT;break;case KeyEvent.VK_RIGHT:nDirection = picPanel.DIRECTION_RIGHT;break;case KeyEvent.VK_F1: // F1键按下,重新开始游戏picPanel.initData();repaint();return;case KeyEvent.VK_Y: // 显示原图if (picPanel.bOnShowAll)picPanel.bOnShowAll = false;elsepicPanel.bOnShowAll = true;repaint();return;default:return;}boolean bCanMove = picPanel.move(nDirection);if (bCanMove){picPanel.nStep++;repaint();}}public void keyReleased(KeyEvent e){}public void keyTyped(KeyEvent e){}}class PicPanel extends JPanel implements MouseListener, Runnable{ BufferedImage[] m_Image = new BufferedImage[9]; // 9个用来装入拼图的图片对象Image m_ImgAll; // 总的大图片int m_nImageNo[][] = new int[3][3]; // 标志现在各个拼图的排列情况final int NO_IMAGE = -1; // 此位置没有拼图final int IMAGE_WIDTH = 120; // 每张拼图的宽final int IMAGE_HEIGHT = 120; // 每张拼图的高final int DIRECTION_UP = 1;final int DIRECTION_DOWN = 2;final int DIRECTION_LEFT = 3;final int DIRECTION_RIGHT = 4;final int DIRECTION_NONE = -1;final int DELTAX = 120; // 标志提示信息区的宽度Thread thTimer; // 计时器线程int nTime = 0; // 已经玩过的时间,以秒为单位boolean bWantStartNewGame = false; // 游戏是否结束,是否需要开始新游戏int nStep = 0; // 已经走的步数int nScore = 0; // 玩家所得的分数int m_nNumOfImg = 0; // 拼图底图所使用的图片的个数String m_sImgName = null; // 记录拼图底图的名字boolean bOnShowAll = false; // 预览的开关JLabel statusText;JPanel panel=new JPanel();public PicPanel(Image img, JLabel statusText,JLabel statusimg){this.statusText = statusText;setBackground(Color.white);m_sImgName = "pintu.jpg";MediaTracker mediaTracker = new MediaTracker(this); // 建立一个监视器.MediaTracker 类是一个跟踪多种媒体对象状态的实用工具类try{// 装载总的大图片m_ImgAll = Toolkit.getDefaultToolkit().getImage("D:/tierui/jsp/Pintu/src/img/" + m_sImgName);mediaTracker.addImage(m_ImgAll, 1);//addImage方法-向此媒体跟踪器正在跟踪的图像列表添加一个图像。

java课程设计-拼图小游戏

java课程设计-拼图小游戏

苏州市职业大学课程设计说明书名称《计算机语言java课程设计》____《拼图小游戏》________2011年月 6日 22 至 2011 年 6月25日共 1周院系____计算机工程系__________班级___10软件技术(服务外包)2姓名______徐华军 _____________系主任_______李金祥_____________ 教研室主任________叶良______________指导教师____孙赢李璐_____目录目录 (2)一、课程设计的目的与要求 (3)二、题目说明 (3)2.1开发工具介绍 (3)三、总体设计 (4)3.1.系统开发平台 (4)3.2.系统流程图 (4)3.3.功能结构图 (5)四、详细说明 (5)4.1图形界面 (5)4.2游戏开始界面和游戏进行界面 (7)4.3游戏完成界面 (8)4.4显示成绩界面 (9)五、遇到的问题和解决方法 (9)六、课程设计总结 (10)七、参考文献 (11)附录源代码 (11)一、课程设计的目的与要求(1)通过课程设计,加深对结构化设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

(2)通过课程设计,学会使用java系统,其中包括对程序的调试、运行、保存等知识的运用。

(3)通过课程设计,提高程序开发功能,能运用合理的方法简化java程序的操作。

(4)通过课程设计,开发一个小游戏,掌握研发全程。

(5)通过课程设计,培养分析问题、解决问题的能力。

二、题目说明拼图游戏一款非常经典的小游戏,因为它比较简单有趣,无论老少都比较适合。

拼图的设计对每一个Java语言设计者进行语言提高和进阶都是一个很好的锻炼机会。

拼图游戏的设计比较复杂,它涉及面广、牵涉方面多,如果不好好考虑和设计,将难以成功开发出这个游戏。

在这个游戏的设计中,牵涉到图形界面的显示与更新、数据的收集与更新,并且在这个游戏的开发中,还要应用类的继承机制以及一些设计模式。

JAVA拼图游戏完整代码

JAVA拼图游戏完整代码

cell[num].setText("");
}
}
}
//start 对小方格重新排序 public void start() {
//如果没有给小方格添加监听,则添加监听 if(!hasAddActionListener){
for(int i=0;i<11;i++){ cell[i].addMouseListener(this);
"); }
//判断若完成,则提示完成 if(isFinish()){
JOptionPane.showMessageDialog(this, "恭喜你完成了,共用"+stepNum+"步。
//撤销小方格的监听 for(int i=0;i<11;i++){
cell[i].removeMouseListener(this); } hasAddActionListener=false; }
private Cell[] cell; private boolean hasAddActionListener = false;//表示是否为小方格添加了点击监听, 有为 true private Rectangle nullCell;
//构造方法 public PictureCanvas() {
}
}
}
private void cellMove(int nullX, int nullY, String direction) { for(int i=0;i<11;i++){ if(cell[i].getBounds().x == nullX && cell[i].getBounds().y == nullY){ //当前方格移动 cell[i].move(direction); //空方格移动(nullX,nullY) nullCell.setLocation(nullX,nullY); break; } }

手机拼图源码(java)

手机拼图源码(java)
temp[k/Y][k%Y]=t;
}
return temp;
}
public void keyPressed(int keyCode){
switch(state){
case 1:
switch(screen){
for(int j=0;j<Y;j++){
TL.setCell(i,j,X*j+i+1);
Board.setCell(i,j,0);
Mess.setCell(i,j,temp[i][j]);
Main.instance.pause=false;
Main.instance.curState=3;
new Thread(Main.instance).start();
public void run() {load();}
}).start();
p.drawWait(Main.bg,Main.wait,Main.width,Main.height,"正在初始化,请稍等。",Main.g);
i1--;
if(i1<0)i1=X-1;
x1=Main.instance.width/2-pintu.getWidth()/2+i1*pintu.getWidth()/X;
y1=Main.instance.height/2-pintu.getHeight()/2+j1*pintu.getHeight()/Y;
dst[i][j]=0;
}
LM.append(TL);
LM.append(Board);
LM.append(Mess);
TL.setVisible(false);

java课程设计-拼图游戏代码

java课程设计-拼图游戏代码

package love;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.*;public class Games extends JFrame implements ActionListener {private JButton buttons[][];//存储按键的数组private Container container;//一个容器private GridLayout layout;//布局方式为GridLayoutprivate int count =0,is[]=new int[8];//count的作用是计算按键移动的次数,is[]储存一个随机产生的1到8数字数组public Games() {super("拼图游戏");//设置标题layout = new GridLayout(3, 3);// 3行3列container = getContentPane();//该容器的布局方式,及其重要,否则产生空引用异常container.setLayout(layout);//将该布局方式作用于容器buttons = new JButton[3][3];//给按键数组分配储存空间int locate1,locate2;//locate1用来指示当前产生的元素locate2用来指示locate1之前的元素for (locate1 = 0; locate1 < 8; locate1++) {//该方法作用是产生1到8这8个数,随机分配给数组,即无序排列int g = new Random().nextInt(8) + 1;//随机产生一个空白按键,即不显示的那个is[locate1] = g;for (locate2 = locate1 - 1; 0 <= locate2; locate2--) {if (is[locate1] == is[locate2])break;}if (locate2 != -1)locate1--;}int temp = 0;int r = new Random().nextInt(3);//随机产生一个0到3的数,代表空白按键的行int l = newRandom().nextInt(3);//随机产生一个0到3的数,代表空白按键的列for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (r == i && l == j) {//空白按键设置为9,不显示buttons[i][j] = new JButton("9");container.add(buttons[i][j]);buttons[i][j].setVisible(false);} else {buttons[i][j] = new JButton("" + is[temp++]);//将数组的值作为显示的8个按键的名字container.add(buttons[i][j]);}buttons[i][j].addActionListener(this);//注册监听事件}}setSize(300, 300);//设置显示容器区域大小setVisible(true);}public void actionPerformed(ActionEvent event) {//事件处理,由于计算量小该处将所有按键单独分析JButton b = (JButton) event.getSource();if (b == buttons[0][0]) {if (buttons[0][1].getText().equals("9")) {buttons[0][1].setText("" + buttons[0][0].getText());buttons[0][1].setVisible(true);buttons[0][0].setText("9");buttons[0][0].setVisible(false);count++;} else if (buttons[1][0].getText().equals("9")) {buttons[1][0].setText("" + buttons[0][0].getText());buttons[1][0].setVisible(true);buttons[0][0].setText("9");buttons[0][0].setVisible(false);count++;}}else if (b == buttons[0][1]) {if (buttons[0][0].getText().equals("9")) {buttons[0][0].setText("" + buttons[0][1].getText());buttons[0][0].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;} else if (buttons[0][2].getText().equals("9")) { buttons[0][2].setText("" + buttons[0][1].getText()); buttons[0][2].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[0][1].getText()); buttons[1][1].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;}} else if (b == buttons[0][2]) {if (buttons[0][1].getText().equals("9")) {buttons[0][1].setText("" + buttons[0][2].getText()); buttons[0][1].setVisible(true);buttons[0][2].setText("9");buttons[0][2].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) {buttons[1][2].setText("" + buttons[0][2].getText()); buttons[1][2].setVisible(true);buttons[0][2].setText("9");buttons[0][2].setVisible(false);count++;}} else if (b == buttons[1][0]) {if (buttons[0][0].getText().equals("9")) {buttons[0][0].setText("" + buttons[1][0].getText()); buttons[0][0].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[1][0].getText()); buttons[1][1].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;} else if (buttons[2][0].getText().equals("9")) { buttons[2][0].setText("" + buttons[1][0].getText()); buttons[2][0].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;}} else if (b == buttons[1][1]) {if (buttons[0][1].getText().equals("9")) {buttons[0][1].setText("" + buttons[1][1].getText()); buttons[0][1].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;} else if (buttons[1][0].getText().equals("9")) { buttons[1][0].setText("" + buttons[1][1].getText()); buttons[1][0].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) { buttons[1][2].setText("" + buttons[1][1].getText()); buttons[1][2].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;} else if (buttons[2][1].getText().equals("9")) {buttons[2][1].setText("" + buttons[1][1].getText()); buttons[2][1].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;}} else if (b == buttons[1][2]) {if (buttons[0][2].getText().equals("9")) {buttons[0][2].setText("" + buttons[1][2].getText()); buttons[0][2].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;} else if (buttons[2][2].getText().equals("9")) { buttons[2][2].setText("" + buttons[1][2].getText()); buttons[2][2].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[1][2].getText()); buttons[1][1].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;}} else if (b == buttons[2][0]) {if (buttons[1][0].getText().equals("9")) {buttons[1][0].setText("" + buttons[2][0].getText()); buttons[1][0].setVisible(true);buttons[2][0].setText("9");buttons[2][0].setVisible(false);count++;} else if (buttons[2][1].getText().equals("9")) { buttons[2][1].setText("" + buttons[2][0].getText()); buttons[2][1].setVisible(true);buttons[2][0].setText("9");buttons[2][0].setVisible(false);count++;}}else if (b == buttons[2][1]) {if (buttons[2][0].getText().equals("9")) {buttons[2][0].setText("" + buttons[2][1].getText()); buttons[2][0].setVisible(true);buttons[2][1].setText("9");buttons[2][1].setVisible(false);count++;} else if (buttons[2][2].getText().equals("9")) { buttons[2][2].setText("" + buttons[2][1].getText()); buttons[2][2].setVisible(true);buttons[2][1].setText("9");buttons[2][1].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[2][1].getText()); buttons[1][1].setVisible(true);buttons[2][1].setText("9");buttons[2][1].setVisible(false);count++;}} else if (b == buttons[2][2]) {if (buttons[2][1].getText().equals("9")) {buttons[2][1].setText("" + buttons[2][2].getText()); buttons[2][1].setVisible(true);buttons[2][2].setText("9");buttons[2][2].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) { buttons[1][2].setText("" + buttons[2][2].getText()); buttons[1][2].setVisible(true);buttons[2][2].setText("9");buttons[2][2].setVisible(false);count++;}}if (buttons[0][0].getText().equals("1")//假如1到8已经排列完成,则执行该语句&& buttons[0][1].getText().equals("2")&& buttons[0][2].getText().equals("3")&& buttons[1][0].getText().equals("4")&& buttons[1][1].getText().equals("5")&& buttons[1][2].getText().equals("6")&& buttons[2][0].getText().equals("7")&& buttons[2][1].getText().equals("8")) {JOptionPane.showMessageDialog(null, "您一共花费了" + count + "步完成了游戏!");//弹出对话框,显示共移动步数System.exit(0);//退出程序}}public static void main(String[] args) {Games game = new Games();game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}。

java实现简单的拼图游戏

java实现简单的拼图游戏

java实现简单的拼图游戏⽤Java来实现简单的拼图游戏,供⼤家参考,具体内容如下⾸先我们看⼀下这个拼图⼩游戏的效果图:创建⼀个名称为MedleyGame的类,该类继承了JFrame类;然后在该类中分别声明⼀个⾯板对象和⼀个按钮对象,⾯板对象⽤来添加拼图按钮,按钮对象为当前显⽰空⽩图⽚的按钮;最后为该类编写⼀个main()⽅法和⼀个构造⽅法MedleyGame(),并在构造⽅法中设置窗体的相关属性,如窗体的标题、显⽰位置、⼤⼩等。

java项⽬结构如下:具体java代码如下:package pac;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.border.TitledBorder;public class MedleyGame extends JFrame{private JPanel centerPanel;// 拼图按钮⾯板private JButton emptyButton;// 空⽩按钮对象public static void main(String[] args) {try {MedleyGame frame = new MedleyGame();//创建本类的对象frame.setVisible(true);//设置窗体为可见}catch(Exception e) {e.printStackTrace();}}public MedleyGame() {super();// 继承JFrame类的构造⽅法setResizable(false);// 设置窗体⼤⼩不可改变setTitle("拼图游戏");// 设置窗体的标题setBounds(100, 100, 354, 435);// 设置窗体的显⽰位置及⼤⼩setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置关闭窗体时退出程序final JPanel topPanel = new JPanel();// 创建⾯板对象topPanel.setBorder(new TitledBorder(null, "", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));// 为⾯板添加边框topPanel.setLayout(new BorderLayout());// 设置⾯板采⽤边界布局getContentPane().add(topPanel,BorderLayout.NORTH);// 将⾯板添加到窗体顶部final JLabel modelLabel = new JLabel();// 创建显⽰参考图⽚的标签对象modelLabel.setIcon(new ImageIcon("img/model.jpg"));// 设置标签显⽰的参考图⽚topPanel.add(modelLabel, BorderLayout.WEST);// 将标签添加到⾯板的左侧final JButton startButton = new JButton();// 创建“下⼀局”按钮对象startButton.setText("下⼀局");// 设置按钮的标签⽂本startButton.addActionListener(new StartButtonAction());// 为按钮添加监听器topPanel.add(startButton, BorderLayout.CENTER);// 将按钮添加到⾯板的中间centerPanel = new JPanel();// 创建拼图按钮⾯板对象centerPanel.setBorder(new TitledBorder(null, "",TitledBorder.DEFAULT_JUSTIFICATION,TitledBorder.DEFAULT_POSITION, null, null));// 为⾯板添加边框centerPanel.setLayout(new GridLayout(0, 3));// 设置拼图按钮⾯板采⽤3列的⽹格布局 getContentPane().add(centerPanel, BorderLayout.CENTER);// 将⾯板添加到窗体的中间 String[][] stochasticOrder = reorder();// 获得⽹格图⽚的随机摆放顺序for (int row = 0; row < 3; row++) {// 遍例⾏for (int col = 0; col < 3; col++) {// 遍例列final JButton button = new JButton();// 创建拼图按钮对象button.setName(row + "" + col);// 设置按钮的名称button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 为拼图按钮设置图⽚if (stochasticOrder[row][col].equals("img/22.jpg")) // 判断是否为空⽩按钮emptyButton = button;button.addActionListener(new ImgButtonAction()); // 为拼图按钮添加监听器centerPanel.add(button);// 将按钮添加到拼图按钮⾯板中}}//}private String[][] reorder(){// ⽤来获取⽹格图⽚的随机摆放顺序String[][] exactnessOrder = new String[3][3];// ⽹格图⽚的正确摆放顺序for (int row = 0; row < 3; row++) {// 遍例⾏for (int col = 0; col < 3; col++) {// 遍例列exactnessOrder[row][col] = "img/" + row + col + ".jpg";}}String[][] stochasticOrder = new String[3][3];// ⽹格图⽚的随机摆放顺序for (int row = 0; row < 3; row++) {// 遍例⾏for (int col = 0; col < 3; col++) {// 遍例列while (stochasticOrder[row][col] == null) { // 随机摆放顺序的指定⽹格为空int r = (int) (Math.random() * 3);// 取随机⾏int c = (int) (Math.random() * 3);// 取随机列if (exactnessOrder[r][c] != null) { // 正确摆放顺序的指定⽹格不为空// 将位于正确摆放顺序的指定⽹格的图⽚摆放到位于随机摆放顺序的指定⽹格中stochasticOrder[row][col] = exactnessOrder[r][c];// 将位于正确顺序的指定⽹格设置为空exactnessOrder[r][c] = null;}}}}return stochasticOrder;}class ImgButtonAction implements ActionListener {// 拼图按钮监听器public void actionPerformed(ActionEvent e) {String emptyName = emptyButton.getName();// 获得空⽩按钮的名称char emptyRow = emptyName.charAt(0);// 获得空⽩按钮所在的⾏char emptyCol = emptyName.charAt(1);// 获得空⽩按钮所在的列JButton clickButton = (JButton) e.getSource();// 获得被点击按钮对象String clickName = clickButton.getName();// 获得被点击按钮的名称char clickRow = clickName.charAt(0);// 获得被点击按钮所在的⾏char clickCol = clickName.charAt(1);// 获得被点击按钮所在的列// 判断被点击按钮与空⽩按钮是否相临if (Math.abs(clickRow - emptyRow) + Math.abs(clickCol - emptyCol) == 1) {// 将被点击按钮的图⽚移动到空⽩按钮上emptyButton.setIcon(clickButton.getIcon());// 设置被点击的按钮显⽰空⽩图⽚clickButton.setIcon(new ImageIcon("img/22.jpg"));emptyButton = clickButton;// 将被点击的按钮设置为空⽩按钮}}}class StartButtonAction implements ActionListener {// 下⼀局按钮监听器public void actionPerformed(ActionEvent e) {String[][] stochasticOrder = reorder();// 获得⽹格图⽚的随机摆放顺序int i = 0;// 拼图按钮在拼图按钮⾯板中的索引for (int row = 0; row < 3; row++) {// 遍例⾏for (int col = 0; col < 3; col++) {// 遍例列JButton button = (JButton) centerPanel.getComponent(i++); // 获得位于指定索引的拼图按钮 button.setIcon(new ImageIcon(stochasticOrder[row][col])); // 为拼图按钮设置图⽚if (stochasticOrder[row][col].equals("img/22.jpg")) // 判断是否为空⽩按钮emptyButton = button;}}}}}到这⾥代码程序就写完了,我们来运⾏⼀下:按步骤保存然后运⾏⼀下:结果没问题,单击“下⼀局”会重新刷新游戏,图⽚会进⾏随机排布:到此,⼀个简简单单的拼图⼩游戏就实现了。

拼图游戏_java课设_含可运行程序

拼图游戏_java课设_含可运行程序

沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
图3 游戏初始界面
单击start按钮开始游戏,界面自动加载并切割图片,玩家此时就可以通过鼠标来完成游戏了,单击空白区域旁边的图快就会移动,移动方向是向着空缺块移动,也就是说孔雀块四周都是可移动的块,而不是紧邻空缺块的图快则不能移动,结果如图4所示。

沈阳大学
图4 开始后的界面
当玩家想有提示信息时可单击数字提示,单击后会在图块上出现带有顺序的数字,玩家可以通过数字更加容易的完成拼图游戏,如图5所示。

沈阳大学
如果不想显示数字提示则可单击清除提示,结果则如同上图4所示。

图5 数字提示界面图
在游戏中,玩家每移动一块图快,状态栏中的步数就会自动加1,并在游戏状态中显示出来,游戏完成时会弹出一个对话框,提示玩家完成拼图游戏并显示所用步数,完成游戏结果图如图6所示。

图6 完成游戏对话框
玩家若想换一个图片进行游戏,则可通过image下拉框实现,玩家可以根据自己的
沈阳大学
兴趣爱好进行选择,如图7所示
图7 image下拉框
例如可以选择下拉框中的唯美,运行界面则如图8所示
图8 唯美拼图界面
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学
沈阳大学。

java拼图游戏代码(完整版)

java拼图游戏代码(完整版)

Pintu.java(class)import java.awt.Color;import java.awt.FileDialog;import java.awt.Graphics;import java.awt.Image;import java.awt.Rectangle;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JRadioButtonMenuItem;public class Pintu extends JFrame implements ActionListener{JMenuBar menubar=new JMenuBar(); //菜单条JMenu menu1=new JMenu("操作"); //菜单JMenu menu2=new JMenu("设置");JMenu menu3=new JMenu("帮助");//菜单选项JMenuItem jitem1=new JMenuItem("开始游戏");JMenuItem jitem2=new JMenuItem("退出游戏");JMenuItem jitem3=new JMenuItem("游戏图片");JMenu jitem4=new JMenu("难度设置");JMenuItem jitem5=new JMenuItem("关于我们");JRadioButtonMenuItem nandu1=new JRadioButtonMenuItem("3*3");//单选菜单JRadioButtonMenuItem nandu2=new JRadioButtonMenuItem("4*4");String filename="a.jpg"; //默认图片路径ImageIcon preimage=null; //预览图对象JButton prebtn=null; //预览图片放置控件int m=3,n=3; //默认设置为3*3的阵列int w=80,h=80; //默认小方格的高度与宽度int step=0; //拼图步数JLabel lstep=new JLabel("步数:0步");JLabel isover=new JLabel("状态:未开始");ImageIcon[] pic=null; //存放小方格图片JButton btn[][]=null; //小方格控件Rectangle p[][]=null; //小方格的位置与大小public void init(){this.setTitle("拼图游戏");this.setLayout(null);this.setBounds(400,100,300,480);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);isover.setBounds(100,50,100,30);lstep.setBounds(100,10,100,30);this.add(isover);this.add(lstep);//菜单显示this.setJMenuBar(menubar);menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);menu1.add(jitem1);menu1.add(jitem2);menu2.add(jitem3);menu2.add(jitem4);menu3.add(jitem5);jitem4.add(nandu1);jitem4.add(nandu2);nandu1.setSelected(true);//设置单选默认值为3*3jitem2.addActionListener(this); //注册监听事件jitem3.addActionListener(this); //注册监听事件nandu1.addActionListener(this); //注册监听事件nandu2.addActionListener(this); //注册监听事件jitem1.addActionListener(this); //注册监听事件jitem5.addActionListener(this); //注册监听事件this.setVisible(true);this.setResizable(false);//不能更改窗体大小setpic();//图片分割必须放置窗体显示以后}//判断我们的图片是否拼图完整如果完成返回true 未完成返回false public boolean check(){boolean b=true;for(int i=n;i<(m+1)*n;i++){int x1=i/n,y1=i%n;if(btn[x1][y1].getIcon()!=null&&btn[x1][y1].getIcon()==pic[i-n]){}else{b=false;}}return b;}//图片的放置public void setpic(){isover.setText("状态:未开始");step=0;lstep.setText("步数:"+step+"步");w=280/m;h=280/n;Image[] a=splitImage(filename,1,1,100,100); //缩放预览图preimage=new ImageIcon(a[0]); //图片转换image=》IMageIconif(prebtn==null) //*如果存在,就不需要重新分配控件只需要更新图标prebtn=new JButton(preimage);//把图片设置为JButton的图标elseprebtn.setIcon(preimage);prebtn.setBounds(200,5,100,100);this.add(prebtn);//图片分割pic=new ImageIcon[m*n];//分配空间大小if(btn==null) //*如果存在,就不需要重新分配控件只需要更新图标btn=new JButton[m+1][n]; //分配控件实例化p=new Rectangle[m+1][n]; //坐标Image[] t=splitImage(filename,m,n,w,h);//图片分割m*n个每个高度与宽度为w,hfor(int i=0;i<(m+1)*n;i++){int x1=i/n,y1=i%n;//下标转换if(btn[x1][y1]==null) //*如果存在,就不需要重新实例化控件btn[x1][y1]=new JButton();//实例化每个控件btn[x1][y1].setBounds(y1*w+5,x1*h+50,w,h);//控件坐标btn[x1][y1].addActionListener(this);//添加事件this.add(btn[x1][y1]);}for(int i=1;i<n;i++){btn[0][i].removeActionListener(this);//第一行除了第一个以外,其他都不注册事件btn[0][i].setVisible(false); //第一行除了第一个以外,其他都不显示}int temp[]=randarray(m*n);for(int i=0;i<m*n;i++) //把图片放到方格内{pic[i]=new ImageIcon(t[i]); //图片转换image=》ImageIcon }for(int i=0;i<m*n;i++) //把图片放到方格内{btn[(i+n)/n][(i+n)%n].setIcon(pic[temp[i]]);//设置图标}btn[0][0].setBackground(Color.BLUE); //设置背景btn[0][0].setIcon(null);this.repaint(); //图片及时刷新}//图片方格随机产生一组随机序列数组,不能重复public int[] randarray(int n){int re[]=new int[n];for(int i=0;i<n;i++)re[i]=i;for(int i=1;i<n;i++){int t;int a=(int)(Math.random()*(n-1)+1);//-1 +1是为了第一个数不使用随机数t=re[i];re[i]=re[a];re[a]=t;}return re;}@Overridepublic void actionPerformed(ActionEvent e) {if(e.getSource()==jitem5)//关于{JOptionPane.showMessageDialog(this,"四川师范大学成都学院开发实验室\n2010年12月12日");return;}if(e.getSource()==nandu1)//难度选择{nandu1.setSelected(true);//更改单选菜单nandu2.setSelected(false);for(int i=0;i<(m+1)*n;i++){int x1=i/n,y1=i%n;//下标转换this.remove(btn[x1][y1]);//清除所有button控件}m=n=3;//重新设置难度btn=null;//释放btn对象setpic();return;}if(e.getSource()==nandu2){nandu2.setSelected(true);nandu1.setSelected(false);for(int i=0;i<(m+1)*n;i++){int x1=i/n,y1=i%n;//下标转换this.remove(btn[x1][y1]);//实例化每个控件}m=n=4;btn=null;setpic();return;}if(e.getSource()==jitem1)//重新开始{for(int j=0;j<(m+1)*n;j++){int x2=j/n,y2=j%n;//下标转换btn[x2][y2].removeActionListener(this);//实例化每个控件}setpic();return;}if(e.getSource()==jitem2){System.exit(0);}if(e.getSource()==jitem3){FileDialog df=new FileDialog(this,"图片选择",FileDialog.LOAD);df.setVisible(true);if(df.getFile()==null)return;filename=df.getDirectory()+df.getFile();//文件路径+文件名for(int j=0;j<(m+1)*n;j++){int x2=j/n,y2=j%n;//下标转换btn[x2][y2].removeActionListener(this);//实例化每个控件}setpic();return;}for(int i=0;i<(m+1)*n;i++)//循环所有控件{int x1=i/n,y1=i%n;//下标转换if(e.getSource()==btn[x1][y1])//如果点击了小方格{step++;lstep.setText("步数:"+step+"步");isover.setText("状态:已开始");//向上移动if(x1>0&&btn[x1-1][y1].isVisible()&&btn[x1-1][y1].getIcon()==null){btn[x1-1][y1].setIcon(btn[x1][y1].getIcon());//获取当前图标给上一个控件为图标btn[x1][y1].setIcon(null);//当前图标设置为空}//向下移动if(x1<m&&btn[x1+1][y1].isVisible()&&btn[x1+1][y1].getIcon()==null){btn[x1+1][y1].setIcon(btn[x1][y1].getIcon());//获取当前图标给下一个控件为图标btn[x1][y1].setIcon(null);//当前图标设置为空}//向左移动if(y1>0&&btn[x1][y1-1].isVisible()&&btn[x1][y1-1].getIcon()==null){btn[x1][y1-1].setIcon(btn[x1][y1].getIcon());//获取当前图标给左一个控件为图标btn[x1][y1].setIcon(null);//当前图标设置为空}//向右移动if(y1<n-1&&btn[x1][y1+1].isVisible()&&btn[x1][y1+1].getIcon()==null){btn[x1][y1+1].setIcon(btn[x1][y1].getIcon());//获取当前图标给右一个控件为图标btn[x1][y1].setIcon(null);//当前图标设置为空}btn[x1][y1].setBackground(Color.BLUE);if(check()){isover.setText("状态:已完成");for(int j=0;j<(m+1)*n;j++){int x2=j/n,y2=j%n;//下标转换btn[x2][y2].removeActionListener(this);//完成以后清除所有的监听}}}}}// 图片分割方法public Image[] splitImage(String file, int rows, int cols) {Image t = new ImageIcon(file).getImage();int w = t.getWidth(this) / cols;int h = t.getHeight(this) / rows;return splitImage(t, rows, cols, w, h);}public Image[] splitImage(String file, int rows, int cols, int w, int h) {Image t = new ImageIcon(file).getImage();return splitImage(t, rows, cols, w, h);}public Image[] splitImage(Image t, int rows, int cols, int w, int h) {Image[] result = new Image[rows * cols];try {for (int i = 0; i < result.length; i++) {result[i] = createImage(w, h);Graphics g = result[i].getGraphics();g.translate((-i % cols) * w, (-i / cols) * h);g.drawImage(t, 0, 0, w * cols, rows * h, 0, 0,t.getWidth(this), t.getHeight(this), this);}} catch (Exception e) {}return result;}}Play.java(class)public class Play {/*** @param args*/public static void main(String[] args) {Pintu p= new Pintu();p.init();}}。

Java程序设计制作拼图游戏

Java程序设计制作拼图游戏

Java程序设计实例:制作拼图游戏本例知识点一句话讲解新学知识使用Image类导入图片使用MouseEvent类处理鼠标事件已学知识使用Point类转换坐标使用Graphics类管理屏幕显示一、练习具体要求本练习制作拼图游戏,运行效果如图99-1所示。

执行本实例后,用鼠标拖动选中的小图片进行拼接,可以拼成一幅完整的图片。

本实例的知识点有:鼠标事件的监听,Graphics 类和Image类的应用。

二、程序及注释(1)编程思路:本练习因为要制作拼图游戏,所以首先要实现图片的导入。

这是通过getImage()函数来实现的,该函数有两个参数,第一个参数指明图片的路径,第二个参数指明图片的名称。

然后,因为要实现图片摆放的随意性,所以要通过initgame()函数来实现。

Initgame()函数是自写函数,在函数体内,通过调用Math.random()函数产生随机数,用来达到图片位置摆放的随意性和随机性。

最后,因为要实现人机交互.,所以首先要通过一系列函数来实现对鼠标事件的监听和响应,这是通过函数addMouseListener(this) 和addMouseMotionListener(this)来完成的。

这样程序会区分用户对鼠标不同的操作,正确执行相应的功能。

(2) 程序实现及注释:import java.awt.*;import java.applet.*;import java.awt.event.* ;public class pintu extends Applet implementsMouseListener,MouseMotionListener{private Image picture;private Graphics buffer;private Image pic[];private Image off_pic[];private Graphics off_buf[]; private Image off_screen; private Graphics off_buffer; private Image off_drag;private Graphics off_drag_buf;private int map[][];private int ran[];private int width=0;private int height=0;private int lastx;private int lasty;private int last_downx;private int last_downy;private int stepx;private int stepy;private boolean choose;private boolean click[][]; private boolean m_down;private boolean m_drag;private boolean not_redraw; private boolean able;Font font1,font2;//程序的初始化public void init(){resize(640,480);pic = new Image [3];off_pic = new Image[16];off_buf = new Graphics [16];map = new int [4][4];ran = new int [15];for(int a=0;a<16;a++)map[a/4][a%4] = a;for(int a=0;a<15;a++)ran[a]=a;click=new boolean [4][4];MediaTracker tracker= new MediaTracker (this);//要载入的图片pic[0]=getImage(getCodeBase(),"PICTURE0.JPG"); pic[1]=getImage(getCodeBase(),"PICTURE1.JPG"); pic[2]=getImage(getCodeBase(),"PICTURE2.GIF"); tracker.addImage (pic[0],0);tracker.addImage (pic[1],0);tracker.addImage (pic[2],0);try{tracker.waitForID (0);}catch(InterruptedException e){}//设置字体font1= new Font ("TimesRoman", Font.BOLD, 48); font2= new Font ("TimesRoman", Font.BOLD, 32); width=640;height=480;//初始化主界面initForm();//添加鼠标监听事件addMouseListener(this);addMouseMotionListener(this);}//面板初始化void initForm(){this.setBackground (Color.orange);if(off_drag==null){off_drag = createImage(width/4,height/4);off_drag_buf = off_drag.getGraphics ();}}public void paint(Graphics g){if(off_screen==null){off_screen = createImage(width,height);off_buffer=off_screen.getGraphics ();}if(able){off_buffer.setColor (Color.black );for(int a=0;a<4;a++)for(int b=0;b<4;b++){if(map[a][b]!=15)off_buffer.drawImage(off_pic[map[a][b]],b*width/4,a*height/4,this);if(map[a][b]==15)off_buffer.fillRect(b*width/4,a*height/4,width/4,height/4);for(int c=0;c<2;c++)off_buffer.drawRect(b*width/4+c,a*height/4+c,width/4-c,height/4-c);if(click[a][b]){off_buffer.setColor(Color.red);for(int d=0;d<2;d++)off_buffer.drawOval(b*width/4-d,a*height/4-d,width/4+d,height/4+d);off_buffer.setColor (Color.black );}}}else{off_buffer.setColor (Color.orange );off_buffer.fillRect (0,0,640,480);off_buffer.setFont (font1);off_buffer.setColor(Color.red );off_buffer.drawImage (pic[2],30,50,250,180,this);off_buffer.drawImage (pic[0],370,160,250,180,this);off_buffer.drawImage (pic[1],60,270,250,180,this);off_buffer.drawString ("Choose One!",320,100);}g.drawImage (off_screen,0,0,this);}public void repaint(){paint(this.getGraphics ());}//单击鼠标时产生的事件public void mouseClicked(MouseEvent evt){}//鼠标进入某个区域时产生的事件public void mouseEntered(MouseEvent evt){}//鼠标退出某个区域时产生的事件public void mouseExited(MouseEvent evt){}//移动鼠标时产生的事件public void mouseMoved(MouseEvent evt){if(!able){Point point;point=evt.getPoint();if(point.x >30 && point.x<280 && point.y>50 && point.y<230){off_buffer.setColor (Color.orange );off_buffer.fillRect (0,0,640,480);off_buffer.setFont (font1);off_buffer.drawImage (pic[2],25,45,250,180,this);off_buffer.drawImage (pic[0],370,160,250,180,this);off_buffer.drawImage (pic[1],60,270,250,180,this);off_buffer.setColor(Color.black );off_buffer.fillRect (30,225,250,5);off_buffer.fillRect (275,50,5,176);off_buffer.setColor(Color.red );off_buffer.drawString ("picture 2!",320,100);this.getGraphics ().drawImage (off_screen,0,0,this);}else if(point.x >370 && point.x<620 && point.y>160 && point.y<340) {off_buffer.setColor (Color.orange );off_buffer.fillRect (0,0,640,480);off_buffer.setFont (font1);off_buffer.drawImage (pic[2],30,50,250,180,this);off_buffer.drawImage (pic[0],365,155,250,180,this);off_buffer.drawImage (pic[1],60,270,250,180,this);off_buffer.setColor(Color.black );off_buffer.fillRect (370,335,250,5);off_buffer.fillRect (615,160,5,175);off_buffer.setColor(Color.red );off_buffer.drawString ("picture 0!",320,100);this.getGraphics ().drawImage (off_screen,0,0,this);}else if(point.x >60 && point.x<310 && point.y>270 && point.y<450) {off_buffer.setColor (Color.orange );off_buffer.fillRect (0,0,640,480);off_buffer.setFont (font1);off_buffer.drawImage (pic[2],30,50,250,180,this);off_buffer.drawImage (pic[0],370,160,250,180,this);off_buffer.drawImage (pic[1],55,265,250,180,this);off_buffer.setColor(Color.black );off_buffer.fillRect (60,445,250,5);off_buffer.fillRect (305,270,5,175);off_buffer.setColor(Color.red );off_buffer.drawString ("picture 1!",320,100);this.getGraphics ().drawImage (off_screen,0,0,this);}else{repaint();}}}//拖动鼠标时产生的事件public void mouseDragged(MouseEvent evt){if(!able)return;if(m_down){Point point;Point temp;point=evt.getPoint();m_drag=true;repaint();Graphics david = this.getGraphics ();if(!not_redraw)off_drag_buf.drawImage(off_pic[map[last_downy][last_downx]],0,0,this);david.drawImage (off_drag,point.x+stepx,point.y+stepy,this);not_redraw=true;}}//按下鼠标时产生的事件public void mousePressed(MouseEvent evt){if(!able)return;Point point;Point temp;point=evt.getPoint();if(getarea(point) == point)return;else {temp=getarea(point);if(!m_down){if(map[temp.y][temp.x]==15)return;else{m_down=true;last_downx=temp.x;last_downy=temp.y;stepx=temp.x*160-point.x;stepy=temp.y*120-point.y;}}else if(m_down){m_down=false;}}}//放开鼠标时产生的事件public void mouseReleased(MouseEvent evt){if(able){if(m_drag){m_down=false;m_drag=false;not_redraw=false;Point point;Point temp;point=evt.getPoint();if(getarea(point) == point){ repaint();return;}else {temp=getarea(point);if(map[temp.y][temp.x]!=15){repaint();return;}else{if(Math.abs (last_downx-temp.x)==1 && last_downy-temp.y==0){int david;david=map[last_downy][last_downx];map[last_downy][last_downx] =15;map[temp.y][temp.x]=david;if(wingame())able=false;repaint();return;}else if(last_downx-temp.x==0 && Math.abs(last_downy-temp.y)==1){int david;david=map[last_downy][last_downx];map[last_downy][last_downx] =15;map[temp.y][temp.x]=david;if(wingame())able=false;repaint();return;}else{repaint(); return;}}}}}else{Point point;point=evt.getPoint();if(point.x >30 && point.x<280 && point.y>50 && point.y<230){able=true; initmap(2);}if(point.x >370 && point.x<620 && point.y>160 && point.y<340){able=true;initmap(0);}if(point.x >60 && point.x<310 && point.y>270 && point.y<450){able=true;initmap(1);}else return;}}//转换坐标public Point getarea(Point point){if(point.x>640 || point.y>480)return point;else return point = new Point (point.x/160,point.y/120);}//图片初始化void initmap(int stage){picture = createImage(width,height);buffer = picture.getGraphics ();buffer.drawImage (pic[stage],0,0,640,480,this);for(int a=0;a<15;a++){off_pic[a] = createImage(width/4,height/4);off_buf[a] = off_pic[a].getGraphics ();off_buf[a].drawImage (picture,0,0,width/4,height/4,(a%4)*width/4,(a/4)*height/4,(a%4+1)*width/4,(a/4+1)*height/4,this);}initgame();repaint();}//程序是否结束boolean wingame(){for(int a=0;a<4;a++)for(int b=0;b<4;b++){if(map[a][b]==a*4+b);else return false;}return true;}//游戏初始化void initgame(){for(int a=0;a<4;a++)for(int b=0;b<4;b++){if(!(a==3 && b==3)){map[a][b] = (int)(Math.random()*14);if(ran[map[a][b]]==-1){int temp=map[a][b];while(ran[temp]==-1){temp++;if(temp>14)temp=0;}map[a][b]=ran[temp];ran[temp]=-1;}else{ran[map[a][b]]=-1;}}else map[3][3] = 15;}}}三、练习效果(如图99-1所示)本实例代码编写完毕,存盘为:C: j2sdk1.4.0\javaprograms\ pintu.java。

java课程设计拼图游戏

java课程设计拼图游戏

java课程设计拼图游戏一、教学目标本节课的教学目标是让学生掌握Java编程的基本语法和逻辑思维能力,通过编写Java程序实现一个简单的拼图游戏。

具体目标如下:1.知识目标:–掌握Java的基本数据类型、运算符、控制结构。

–了解面向对象编程的基本概念,如类、对象、封装、继承。

–学习Java的图形用户界面编程,如Swing组件、事件处理等。

2.技能目标:–能够运用Java编程语言编写简单的程序。

–能够运用面向对象的思想设计程序。

–能够使用Java图形用户界面库编写用户友好的界面。

3.情感态度价值观目标:–培养学生的编程兴趣,提高学生解决问题的能力。

–培养学生团队合作的精神,学会分享和交流。

–培养学生对技术的热爱,提高学生对计算机科学的认知。

二、教学内容本节课的教学内容主要包括以下几个部分:1.Java基本语法和逻辑思维能力的培养。

2.面向对象编程的基本概念和应用。

3.Java图形用户界面编程,包括Swing组件的使用和事件处理。

具体的教学大纲如下:1.第一课时:Java基本语法和逻辑思维能力的培养。

–数据类型、运算符、控制结构。

–简单的数学计算程序编写。

2.第二课时:面向对象编程的基本概念和应用。

–类和对象的概念。

–封装、继承的应用。

–简单的图形界面程序编写。

3.第三课时:Java图形用户界面编程。

–Swing组件的使用。

–事件处理机制。

–拼图游戏的实现。

三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用多种教学方法,如讲授法、讨论法、案例分析法、实验法等。

1.讲授法:用于讲解Java基本语法、面向对象编程概念和图形用户界面编程的基础知识。

2.讨论法:通过小组讨论,让学生深入理解面向对象编程的优势和应用。

3.案例分析法:分析实际的拼图游戏案例,让学生了解图形用户界面编程的实现方法。

4.实验法:让学生动手编写拼图游戏程序,巩固所学知识。

四、教学资源本节课的教学资源包括教材、参考书、多媒体资料和实验设备。

JAVA拼图游戏的核心代码

JAVA拼图游戏的核心代码

public void paint(Graphics g){ g.drawImage(im,0,0,BW-3,BH-3,BW*(ncol-1),BH*(nrow-1),BW*ncol,BH*nrow,this); } public void reSet(){ this.setLocation(BW*(col-1),BH*(row-1)); } class Mouse extends MouseAdapter{ @Override public void mousePressed(MouseEvent e) { Block b=(Block)e.getSource(); // b.setLocation(BW*(col-1),BH*(row)); if( p.map[row+1][col]==0){ b.setLocation(BW*(col-1),BH*row); p.map[row+1][col]=1; p.map[row][col]=0; row=row+1; } else if( p.map[row-1][col]==0){ b.setLocation(BW*(col-1),BH*(row-2)); p.map[row-1][col]=1; p.map[row][col]=0; row=row-1; } else if( p.map[row][col+1]==0){ b.setLocation(BW*col,BH*(row-1)); p.map[row][col+1]=1; p.map[row][col]=0; col=col+1; } else
一、PTFrame 类 public class PFrame extends Frame { Image im; PFrame(){ //im=Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("11.jpg")); GamePanel panel=new GamePanel(); this.setLocation(400,100); this.setSize(540,750); //this.add(b); this.add(panel); this.setVisible(true); this.addWindowListener(new WindowAdapter(){ @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[] args) { new PFrame(); } } 二、GamePanel 类的实现 public class GamePanel extends Panel { Block block[]=new Block[9]; //public int s=0; boolean win=false; public static final int HEIGHT=750; public static final int WIDTH=540; Random r=new Random(); int map[][]=new int [][]{ {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1}, {1,1,1,1,1} }; GamePanel(){

基于Java的拼图游戏设计

基于Java的拼图游戏设计

Java课程设计——拼图游戏信101 孙杰2010314126Java课程设计——拼图游戏班级:信101学号:2010414126姓名:孙杰指导老师:李红强基于Java的拼图游戏设计游戏实现功能解析及界面游戏规则介绍1)本游戏是一个Java语言的拼图游戏,有一个格子是空的,其他格子内随机放置由要拿来拼图的图片切割成的若干个小图片,图片的切割按照一定的公式计算,因为,该通过单击任意一个与空格子相邻的方块可以把该方游戏中设有拼图游戏的等级,根据不同的等级,按照公式会切割成不同的小图片块数。

2)在开始游戏之前,可以选择游戏等级后再点击“开始”菜单里的“新游戏”,进行拼图游戏,通过将空格旁边的小图片移入空格子内(不断的移动方块),来实现拼图,直到方块一行一行的按图片的原始样子拼好即可完成该游戏。

3)游戏拼完后,会弹出一个“信息”框,显示你玩游戏所用的步数与时间,点击“确定”后,会弹出一个“输入”框,可以在里面输入游戏者的姓名,单击“确定”后会弹出游戏的记录框。

4)游戏的简单规则在游戏界面的“关于”菜单内的“帮助”信息框内已经简单介绍了。

游戏前可以先预览看看。

游戏实现功能主窗口界面1)游戏初始状态当游戏刚运行时,会出现如下界面,本游戏中已经存在了三张图片,如过游戏者想拼自己感兴趣的图片的话,可以将自己的图片放入到“background”(背景图片)文件夹中,再进行“选择”->“背景图片”中选择你自己的图片,然后选择“等级”->“困难”或“普通”或“简单”,进行等级选择,最后选择“开始”->“新游戏”就可以拼自己想拼的图了。

初始窗口如图1所示:图1 游戏初始窗口2)游戏进行状态当游戏者选择好图片与等级后,就可以进行拼图游戏了及进入游戏的进行状态。

3)游戏暂停状态当游戏者,在游戏过程中半途暂停游戏的话,将出现如图3所示的游戏暂停状态的界面。

当游戏者又想继续游戏时,直接单击界面上的“继续”字样,就可以继续游戏了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package love;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.Random;import javax.swing.*;public class Games extends JFrame implements ActionListener {private JButton buttons[][];// 存储按键的数组private Container container;// 一个容器private GridLayout layout;// 布局方式为GridLayoutprivate int count =0,is[]=new int[8];//count 的作用是计算按键移动的次数,is[]储存一个随机产生的 1 到8 数字数组public Games() {super("拼图游戏");// 设置标题layout = new GridLayout(3, 3);// 3 行 3 列container = getContentPane();// 该容器的布局方式,及其重要,否则产生空引用异常container.setLayout(layout);// 将该布局方式作用于容器buttons = new JButton[3][3];// 给按键数组分配储存空间int locate1,locate2;//locate1 用来指示当前产生的元素locate2 用来指示locate1 之前的元素for (locate1 = 0; locate1 < 8; locate1++) {//该方法作用是产生 1 到8 这8 个数,随机分配给数组,即无序排列int g = new Random().nextInt(8) + 1;//随机产生一个空白按键,即不显示的那个is[locate1] = g;for (locate2 = locate1 - 1; 0 <= locate2; locate2--) {if (is[locate1] == is[locate2])break;}if (locate2 != -1)locate1--;}int temp = 0;int r = new Random().nextInt(3);// 随机产生一个0 到 3 的数,代表空白按键的行int l = newRandom().nextInt(3);//随机产生一个0到3的数,代表空白按键的列for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {if (r == i && l == j) {// 空白按键设置为9,不显示buttons[i][j] = new JButton("9");container.add(buttons[i][j]); buttons[i][j].setVisible(false);} else {buttons[i][j] = new JButton("" + is[temp++]);// 将数组的值作为显示的8 个按键的名字container.add(buttons[i][j]);}buttons[i][j].addActionListener(this);// 注册监听事件}}setSize(300, 300);//设置显示容器区域大小setVisible(true);}public void actionPerformed(ActionEvent event) {// 事件处理,由于计算量小该处将所有按键单独分析JButton b = (JButton) event.getSource();if (b == buttons[0][0]) {if (buttons[0][1].getText().equals("9")) {buttons[0][1].setText("" + buttons[0][0].getText());buttons[0][1].setVisible(true);buttons[0][0].setText("9");buttons[0][0].setVisible(false);count++;} else if (buttons[1][0].getText().equals("9")) {buttons[1][0].setText("" + buttons[0][0].getText());buttons[1][0].setVisible(true);buttons[0][0].setText("9");buttons[0][0].setVisible(false);count++;}}else if (b == buttons[0][1]) {if (buttons[0][0].getText().equals("9")) {buttons[0][0].setText("" + buttons[0][1].getText());buttons[0][0].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;} else if (buttons[0][2].getText().equals("9")) { buttons[0][2].setText("" + buttons[0][1].getText()); buttons[0][2].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[0][1].getText()); buttons[1][1].setVisible(true);buttons[0][1].setText("9");buttons[0][1].setVisible(false);count++;}} else if (b == buttons[0][2]) {if (buttons[0][1].getText().equals("9")) {buttons[0][1].setText("" + buttons[0][2].getText()); buttons[0][1].setVisible(true);buttons[0][2].setText("9");buttons[0][2].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) {buttons[1][2].setText("" + buttons[0][2].getText()); buttons[1][2].setVisible(true);buttons[0][2].setText("9");buttons[0][2].setVisible(false);count++;}} else if (b == buttons[1][0]) {if (buttons[0][0].getText().equals("9")) {buttons[0][0].setText("" + buttons[1][0].getText()); buttons[0][0].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[1][0].getText()); buttons[1][1].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;} else if (buttons[2][0].getText().equals("9")) { buttons[2][0].setText("" + buttons[1][0].getText()); buttons[2][0].setVisible(true);buttons[1][0].setText("9");buttons[1][0].setVisible(false);count++;}} else if (b == buttons[1][1]) {if (buttons[0][1].getText().equals("9")) { buttons[0][1].setText("" + buttons[1][1].getText()); buttons[0][1].setVisible(true);buttons[1][1].setText("9"); buttons[1][1].setVisible(false);count++;} else if (buttons[1][0].getText().equals("9")) { buttons[1][0].setText("" + buttons[1][1].getText()); buttons[1][0].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) { buttons[1][2].setText("" + buttons[1][1].getText()); buttons[1][2].setVisible(true);buttons[1][1].setText("9"); buttons[1][1].setVisible(false);count++;} else if (buttons[2][1].getText().equals("9")) {buttons[2][1].setText("" + buttons[1][1].getText());buttons[2][1].setVisible(true);buttons[1][1].setText("9");buttons[1][1].setVisible(false);count++;}} else if (b == buttons[1][2]) {if (buttons[0][2].getText().equals("9")) {buttons[0][2].setText("" + buttons[1][2].getText());buttons[0][2].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;} else if (buttons[2][2].getText().equals("9")) {buttons[2][2].setText("" + buttons[1][2].getText());buttons[2][2].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) {buttons[1][1].setText("" + buttons[1][2].getText());buttons[1][1].setVisible(true);buttons[1][2].setText("9");buttons[1][2].setVisible(false);count++;}} else if (b == buttons[2][0]) {if (buttons[1][0].getText().equals("9")) { buttons[1][0].setText("" + buttons[2][0].getText()); buttons[1][0].setVisible(true);buttons[2][0].setText("9"); buttons[2][0].setVisible(false);count++;} else if (buttons[2][1].getText().equals("9")) { buttons[2][1].setText("" + buttons[2][0].getText()); buttons[2][1].setVisible(true);buttons[2][0].setText("9"); buttons[2][0].setVisible(false);else if (b == buttons[2][1]) {if (buttons[2][0].getText().equals("9")) { buttons[2][0].setText("" + buttons[2][1].getText()); buttons[2][0].setVisible(true);buttons[2][1].setText("9"); buttons[2][1].setVisible(false); count++;} else if (buttons[2][2].getText().equals("9")) { buttons[2][2].setText("" + buttons[2][1].getText()); buttons[2][2].setVisible(true);buttons[2][1].setText("9"); buttons[2][1].setVisible(false);count++;} else if (buttons[1][1].getText().equals("9")) { buttons[1][1].setText("" + buttons[2][1].getText()); buttons[1][1].setVisible(true);buttons[2][1].setText("9"); buttons[2][1].setVisible(false);count++;}} else if (b == buttons[2][2]) {if (buttons[2][1].getText().equals("9")) { buttons[2][1].setText("" + buttons[2][2].getText()); buttons[2][1].setVisible(true);buttons[2][2].setText("9"); buttons[2][2].setVisible(false);count++;} else if (buttons[1][2].getText().equals("9")) { buttons[1][2].setText("" + buttons[2][2].getText()); buttons[1][2].setVisible(true);buttons[2][2].setText("9");buttons[2][2].setVisible(false);if (buttons[0][0].getText().equals("1")// 假如 1 到8 已经排列完成,则执行该语句&& buttons[0][1].getText().equals("2")&& buttons[0][2].getText().equals("3")&& buttons[1][0].getText().equals("4")&& buttons[1][1].getText().equals("5")&& buttons[1][2].getText().equals("6")&& buttons[2][0].getText().equals("7")&& buttons[2][1].getText().equals("8")) {JOptionPane.showMessageDialog(null, 您" 一共花费了" + count + "步完成了游戏!");// 弹出对话框,显示共移动步数System.exit(0);//退出程序}}public static void main(String[] args) {Games game = new Games();game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}。

相关文档
最新文档