java拼图游戏代码
拼图游戏源代码

//*关卡开始前 booleanfirstStart=true;//是否首次运行标志 musicNum=1;//音乐不够,以此变量做两首歌更换标志 privatevoiddoStartPa ...{ //*关卡化 lm=LayerManager; puzzlePic=creatPuzzlePic; //*测试用 //puzzlePic=creatTestPuzzlePic;//测试用 lm.append(puzzlePic);
//播放声音 //西门子模拟器不支持下面这段代码,但实体机子完美支持 try ...{ InputStreamin; //in=getClass.getResourceAsStream(\"/res/music\"+stageNum+\".mid\");这是有5首音乐时候使用 //只有两首歌时候使用 (musicNum1) ...{ in=getClass.getResourceAsStream(\"/res/music1.mid\"); [Page] musicNum=2; } ...{ in=getClass.getResourceAsStream(\"/res/music2.mid\"); musicNum=1; } player=Manager.createPlayer(in,\"audio/midi\"); player.LoopCount(10); player.start; } catch(IOExceptione)...{}
/***//**储存损耗时间,普通模式用到*/ privatelongusedTime; [Page] /***//**储存单关通过最短时间*/ privatelongquicklyPassOneStageTime; /***//**游戏过程暂停状态所用标志*/ privatebooleanisGamePaused; /***//**储存显示对象*/ privateDisplaydisplay;
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]);//移除最后一个多余的方格}文章转自上海青大实训:谣言:吃太咸了会得病,导语:“人体每日摄入食盐不应过多,否则易患多种疾病。
拼图游戏源代码

Option ExplicitDim imageid(8) As Integer '记录图片排列的顺序的数组Dim position As Integer '被点击的图片位置Dim xposition As Integer '空图片的位置Dim movetimes As Integer '记录移动次数Dim calposition As Integer '用于计算位置Dim started As Boolean '是否开始Dim win As Boolean '是否胜利Dim pic(9) As Picture '存储图像的数组对象Dim pic1 As PicturePrivate Sub Command1_Click()Dim i As IntegerDim temp(8) As IntegerDim chosennumber As IntegerFor i = 0 To 7temp(i) = iNextRandomizeFor i = 7 To 0 Step -1chosennumber = Int(i * Rnd)imageid(7 - i) = temp(chosennumber)temp(chosennumber) = temp(i)NextFor i = 0 To 7Picture1(i).Picture = pic(imageid(i))NextPicture1(9).Picture = pic(8)Picture1(8).Picture = pic(9)xposition = 8started = Truemovetimes = 0End SubPrivate Sub Form_Load()Dim i As IntegerFor i = 0 To 8Set pic(i) = Picture1(i).PictureNextEnd SubPrivate Sub Picture1_Click(Index As Integer)Dim i As IntegerDim response As Integerposition = IndexIf started = False ThenExit SubEnd IfIf (position <> 0) And (position <> 3) And (position <> 6) Thencalposition = position - 1If calposition = xposition ThencvaleEnd IfEnd IfIf (position <> 2) And (position <> 5) And (position <> 9) Thencalposition = position + 1If calposition = xposition ThencvaleEnd IfEnd IfText1.Text = Str(position)If position <= 5 Thencalposition = position + 3Text2.Text = Str(calposition)If calposition = xposition ThencvaleEnd IfEnd IfIf position >= 3 And position <> 9 Thencalposition = position - 3If calposition = xposition ThencvaleEnd IfEnd Ifwin = TrueFor i = 0 To 7If imageid(i) <> i Thenwin = FalseExit ForEnd IfNextIf win = True ThenMsgBox "恭喜恭喜!您很聪明" & "共移动" & vbCrLf & movetimes & "次", vbOKOnly started = FalseEnd IfEnd SubPrivate Sub cvale()Set pic1 = Picture1(position).PicturePicture1(position).Picture = Picture1(calposition).Picture Picture1(calposition).Picture = pic1xposition = positionEnd Sub。
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]);//移除最后一个多余的方格}文章转自上海青大实训:。
拼图游戏代码

拼图游戏代码# include# include# include# include# include# include/* 七种拼块的形状数据 */char fk[7][4][2]={1,1,1,2,1,3,1,4,1,1,1,2,1,3,2,3,2,1,2,2,1,3,2,3,1,1,1,2,2,2,2,3,2,1,2,2,1,3,2,3,1,1,2,1,1,2,2,2,1,1,1,2,1,3,2,2};/* 存放组成拼块的四个小方块X和Y坐标 */ int kx[4],ky[4];/* 桶 */int tong[13][25];/* 等待按键并延时的函数 */char key(int s){clock_t t1,t2;char c;t1=clock();dot2=clock();while (((t2-t1)if (kbhit())c=getch();elsec=0;return c;}/* 显示或清除方块的函数 */ void kuai(int x,int y,int c) {char cc[3];if(c==1)strcpy(cc,"[]");elsestrcpy(cc," ");gotoxy(x*2,y);puts(cc);gotoxy(79,24);}/* 画出拼块 */void hua(){int i;for(i=0;i<4;i++)kuai(kx[i],ky[i],1);}/* 清除拼块的函数 */void ca(){int i;for(i=0;i<4;i++)kuai(kx[i],ky[i],0);}/* 拼块下落一行 */int xialuo(){int t,i;ca();t=1;for(i=0;i<4;i++){if(ky[i]==24) {t=0; break;};if(tong[kx[i]][ky[i]+1]==1) {t=0; break;}; }if(t==1)for(i=0;i<4;i++)ky[i]=ky[i]+1;elsefor(i=0;i<4;i++)tong[kx[i]][ky[i]]=1;hua();return t;}/* 拼块左右移动函数 */void yidong(int p){int t,i;ca();t=1;i=0;do{if((kx[i]==1)&&(p==-1)) {t=0; break;}; if((kx[i]==12)&&(p==1)) {t=0; break;}; if (tong[kx[i]+p][ky[i]]==1) {t=0; break;}; i++;} while (i<4);if(t==1)for(i=0;i<4;i++)kx[i]=kx[i]+p;hua();}/* 旋转拼块的函数 */void zhuan(){int i,t,x,y;int kx1[4],ky1[4];ca();x=kx[1]; y=ky[1];for(i=0;i<4;i++) {kx1[i]=x+y-ky[i]; ky1[i]=y-x+kx[i];}t=1;for(i=0;i<4;i++){if((kx1[i]<1)||(kx1[i]>12)||(ky1[i]<1)||(ky1[i]>24)) {t=0; break;}; if (tong[kx1[i]][ky1[i]]==1) {t=0; break;};}if(t==1)for(i=0;i<4;i++){kx[i]=kx1[i]; ky[i]=ky1[i];};hua();}/* 计算一行中的方块数 */int fangkuaishu(int h){int i,p=0;for(i=1;i<=12;i++)p=p+tong[i][h];if(p==12)for(i=1000;i<=4000;i+=80){sound(i);delay(10);}nosound();return p;}/* 桶中方块除去一行,在此行上面的方块下移一行 */void yihang(int h){int k,j,q;for(k=h;k>0;k--){q=0;for(j=1;j<=12;j++){if(tong[j][k]!=tong[j][k-1]){ kuai(j,k,tong[j][k-1]);tong[j][k]=tong[j][k-1];}q=q+tong[j][k];}if(q==0) break;}}/* 检查有无完成的行,并处理之 */ void jiancha(){int i,n;i=24;do{n=fangkuaishu(i);if(n==12) yihang(i); else i--;} while((i>0)&&(n>0));}/* 开始函数,初始化,画出空桶*/ void kaishi(){int i,j;for(i=1;i<=24;i++)for(j=1;j<=12;j++)tong[j][i]=0;for(i=0;i<24;i++)puts("||");printf("`------------------------'");randomize();}/**********************************************//* 主程序 */main(){int i,j,k,s;int m,t;char kk;kaishi(); /* 屏幕初始化,显示空桶 */for(;;){ /* 开始一个循环,在此循环中不断检测按键并处理之 */m=rand()%7; /* 随机产生一种拼块 */for(i=0;i<4;i++){ /* 计算拼块在桶中的坐标 */kx[i]=fk[m][i][0]+5;ky[i]=fk[m][i][1];}t=1;for(i=0;i<4;i++) /* 检查拼块是否能放入桶中,不能放则退出游戏*/if (tong[kx[i]][ky[i]]==1)hua(); /* 画出拼块 */s=0; /* S是一个标志,指示是否按了空格键 */for(;;){ /* 此循环中处理一个拼块的下落过程 */if(s==0) kk=key(9); else kk=key(0); /* 按过了空格键则不延时 */ if((kk>='a')&&(kk<='z')) kk=kk-32; /* 将小写字母转换为大写*/switch (kk){ /* 根据按键作相应处理 */case ' ' : s=1; break; /* 按空格, 快速下落 */case 'K': zhuan(); break; /* 按K,旋转拼块 */case 'J': yidong(-1); break; /* 按J,左移拼块 */case 'L': yidong(1); break; /* 按L,右移拼块 */case 'S': while(kbhit()==0);break; /* 按S,暂停游戏 */case 'E': exit(0); break; /* 按E,结束游戏 */default : t=xialuo(); /* 没按上面的键,或未按任何键,拼块下落一格*/}if(t==0) break; /* 拼块落到桶底或不能再下落退出循环 */}jiancha(); /* 检查是否有完成的行,并处理之 */}}。
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的拼图游戏基于JAVA的拼图游戏摘要JAVA语言是由美国sun公司开发的一种完全面向对象的程序设计语言,它由c++语言发展而来,但比c++语言简单。
JAVA语言具有简单、与平台无关、高效、健壮、安全、多线程等特点,是当前网络编程中的首选语言。
本文主要通过JAVA语言来开发一个小游戏,以实现其相关功能。
随着社会的发展,计算机已经成为人么日常生活,学习办公中不可缺少的一部分,并在各个领域发挥着重要的作用。
在计算机迅猛发展的影响下,计算机游戏也随之兴盛起来。
拼图游戏就是其中一中,它适用范围广,老少皆宜。
该游戏不仅可锻炼动手能力,观察能力,而且还能培养人与人之间的协作能力。
它是一个应用程序,它的游戏规则和win7的拼图游戏是一样的。
将一张图片分割成16张小图,将除去左上角的其余15张图片放入一个4*4的网格内,通过鼠标的点击图片来切换空白处对换位置,让其复原成原来的顺序,游戏就完成了。
可以选择下一张来切换另一张图片,或者按开局重新开始游戏。
关键词:JAVA 2平台标准版,JAVA语言,小应用程序Jigsaw puzzle based on JavaabstractJA V A language is developed by the sun a fully object-oriented programming language, it is developed by c + + language, but simpler than c + + language.The JA V A language has a simple, platform-independent, efficient, robust and security, multithreading, is the preferred language in the current network programming.This paper mainly through the JA V A language to develop a small game, in order to realize its related functions.With the development of the society, the computer has become the people daily life, an indispensable part of learning in the office, and play an important role in all fields.Under the influence of the rapid development of computer, computer games has been thriving.Jigsaw puzzle is among them one, its applicability is wide and for young and old.The game is not only can exercise ability, observation ability, but also can cultivate interpersonal cooperation ability.This puzzle game is based on the J2SE platform development, it is an application, it is the rules of the game and win7 puzzle game is the same.Picture will be divided into 16 images, will remove the upper left corner of the rest of the 15 images in a 4 * 4 mesh, the blank space with the mouse click on the image to switch switch position, make its recovery as the original sequence, the game is finished.Can choose the next to switch the other picture, or press start to start the game.Keywords: Java 2 Platform, Standard Edition, JAVA language, application.目录摘要 (Ⅰ)ABSTRACT (Ⅱ)第一章概述 (1)1.1项目开发的背景与国内外研究现状 (1)1.2项目开发的目的与意义 (1)1.3系统开发方法介绍 (2)第二章项目开发语言及开发环境 (5)2.1JAVA语言 (5)2.2ECLIPSE简介 (6)第三章可行性分析及总体设计原则 (8)3.1可行性分析所采用的方法和步骤 (8)3.2评价尺度 (8)3.3可行性分析 (8)3.3.1 技术可行性 (8)3.3.2 经济可行性 (8)3.3.3 社会可行性 (8)3.4总体设计原则 (9)第四章需求分析 (10)4.1OOA方法介绍 (10)4.2功能需求 (10)4.3环境需求 (10)4.4可靠性需求 (11)4.5用户界面需求 (11)4.6软件成本消耗与开发进度需求 (11)4.7条件假定和限制 (11)第五章系统分析 (12)5.1业务流程分析 (12)5.2总体设计方案 (12)5.3游戏功能分析 (13)第六章系统设计 (14)6.1系统功能设计 (14)6.2系统重点设计 (14)6.2.1 开局载入图片 (15)6.2.4 随机排列图片 (16)6.2.3 游戏时排列图片 (18)6.2.4 换下一张图片 (18)6.2.5 判断拼图是否成功 (19)6.3拼图游戏界面的设计与实现 (20)第七章设计小结 (21)参考文献 (24)致谢 (25)附录 (26)太原科技大学华科学院毕业设计(论文)第一章概述1.1项目开发的背景与国内外研究现状随着信息技术的飞速发展、蓬勃进步,同时随着国际互连网与相关系统的迅速普及,不同国家、行业被Internet连接在一起,互相通信,共享全世界的计算机资源和信息。
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);}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Puzzle类:package com.eavan;public class Puzzle {public static void main(String[] args) { // TODO Auto-generated method stubnew PuzzleWin();}}PuzzleWin类:/*** 可以为游戏添加一个计时的功能,让时间成为一个判定标准* 可以分析一下为什么图片不清楚* 可以向怎么能够让选择图片和选择难度没有顺序性(较容易)**/package com.eavan;import java.awt.Color;import java.awt.FileDialog;import java.awt.Graphics;import java.awt.GraphicsConfiguration;import java.awt.GraphicsDevice;import java.awt.GraphicsEnvironment;import java.awt.GridLayout;import java.awt.HeadlessException;import java.awt.Image;import java.awt.Transparency;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.image.BufferedImage;import java.util.ArrayList;import java.util.Random;import javax.swing.BorderFactory;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.JPanel;import javax.swing.JTextArea;public class PuzzleWin extends JFrame implements ActionListener{int dif = 0; //设置难度级数int k = 0; //标记是随机数list中的第几个随机数(从而用于标记图像list 中的第几个图片)String filename="a.jpg"; //设置的图片打开路径。
默认路径其实是没用的int step = 0; //用于记录总共用了多少步完成拼图JMenuBar mBar = new JMenuBar();JMenu jmSysten = new JMenu("系统");JMenu jmGame = new JMenu("游戏");JMenuItem restart = new JMenuItem("重新开始");JMenuItem quit = new JMenuItem("退出");JMenuItem choosepic = new JMenuItem("选择图片");JMenu choosedif = new JMenu("选择难度");JMenuItem easy = new JMenuItem("3*3");JMenuItem hard = new JMenuItem("4*4");JPanel mainPanel = new JPanel();JButton[][] btn = null; //用于显示被分割的图片ImageIcon checkIcon[][] = null; //用于存放一个正确顺序放置被分割后的图片的数组,最后与btn[][]的icon对比检测是否完成拼图JLabel piclab = new JLabel(); //用于显示对照图片JLabel namelab = new JLabel("对照图片:"); //用于在对照图片上面给出提醒JLabel steplab = new JLabel(); //用于记录步数信息JTextArea helpArea = new JTextArea(); //用于显示操作提示信息JLabel designLabel = new JLabel(); //用于显示者设计信息public PuzzleWin(){this.setTitle("拼图游戏");this.setSize(600, 500);this.setLayout(null);this.setLocation(200,120);this.setResizable(false); //因使用的大多是绝对布局,还是不要更改窗体大小吧this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//添加menu,用于显示各种菜单mBar.add(jmSysten);mBar.add(jmGame);setJMenuBar(mBar);jmSysten.add(restart);jmSysten.add(quit);jmGame.add(choosedif);jmGame.add(choosepic);choosedif.add(easy);choosedif.add(hard);//设置分割图片显现的位置,使用的都是绝对布局mainPanel.setBounds(30,30,360,360);mainPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));this.add(mainPanel);//设置对照图片的大小坐标(用一个label作为盛放pic的容器)//显示对照图片namelab.setBounds(450, 10, 80, 15);steplab.setBounds(450, 160, 80, 15);piclab.setBorder(BorderFactory.createLineBorder(Color.BLACK));steplab.setText("步数:"+step);piclab.setBounds(450, 30, 110, 110);helpArea.setBounds(420, 220, 150, 120);helpArea.setBackground(new Color(192, 192, 192));helpArea.setText("由于本人水平有限,请按照\r\n先在游戏菜单中选择游戏难\r\n 度,再选择图片的顺序进行\r\n游戏。
\r\n\r\n祝玩得开心-.-");helpArea.setEditable(false);designLabel.setBounds(30, 370, 200, 100);designLabel.setText("Design By Eavan In Haust");this.add(namelab);this.add(piclab);this.add(steplab);this.add(helpArea);this.add(designLabel);//对menu里的各种按钮注册监听restart.addActionListener(this);quit.addActionListener(this);choosepic.addActionListener(this);easy.addActionListener(this);hard.addActionListener(this);}//实现从Image对象转化为BufferedImage对象的方法public static BufferedImage toBufferedImage(Image image) {if (image instanceof BufferedImage) {return (BufferedImage)image;}image = new ImageIcon(image).getImage();BufferedImage bimage = null;GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();try {int transparency = Transparency.OPAQUE;GraphicsDevice gs = ge.getDefaultScreenDevice();GraphicsConfiguration gc = gs.getDefaultConfiguration();bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency);} catch (HeadlessException e) {}if (bimage == null) {int type = BufferedImage.TYPE_INT_RGB;bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);}Graphics g = bimage.createGraphics();g.drawImage(image, 0, 0, null);g.dispose();return bimage;}//实现将图片分割的方法,返回的对象是一个存放Image对象的数组。
public ArrayList<Image> splitImage(ImageIcon i,int n){Image im = i.getImage();BufferedImage bi = toBufferedImage(im);int baseHeight = bi.getHeight();int basewidth = bi.getWidth();int x = 0;int y = 0;ArrayList<Image> image = new ArrayList<Image>();if (n == 3) {int a = basewidth/n;int b = baseHeight/n;for (int j = 0; j < n*n; j++) {Image tempImage = bi.getSubimage(x, y, a, b);image.add(tempImage);x = x+a;if(x == 3*a){x = 0;y = y+b;}}// int j = 0;// while (j<n*n) {// image.add(bi.getSubimage(x, y, a, b));// x = x+a;// if(x == 3*a){// x = 0;// y = y+b;// }// }}if (n == 4) {int a = basewidth/n;int b = baseHeight/n;for (int j = 0; j < n*n; j++) {Image tempImage = bi.getSubimage(x, y, a, b);image.add(tempImage);x = x+a;if(x == n*a){x = 0;y = y+b;}}}return image;}//产生一个长度为n的不重复随机数arraylist public ArrayList<Integer> randomNum(int n){ArrayList<Integer> list = new ArrayList<Integer>();Random rand = new Random();boolean[] bool = new boolean[n];int num =0;for (int i = 0; i<n; i++){do{//如果产生的数相同继续循环num = rand.nextInt(n);}while(bool[num]);bool[num] =true;list.add(num);}return list;}public boolean isOver(){int mark = 0;boolean b = false;for (int i = 0; i < dif; i++)for (int j = 0; j < dif; j++) {if (i == dif-1&&j == dif-1) break;if (btn[i][j].getIcon() == checkIcon[i][j]) {mark++;}if (mark == dif*dif-1) {b = true;}}return b;}public void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif (e.getSource()==restart){dif = 0;k = 0;step = 0;filename="a.jpg";for (int i = 0; i < 3; i++) {for (int j = 0; j < 3; j++) {btn[i][j] = null;}}mainPanel.removeAll();piclab.setIcon(null);steplab.setText("步数:"+step);repaint();}else if (e.getSource()==quit) {System.exit(0);}else if (e.getSource()==choosepic) {//实现图片选择功能FileDialog df=new FileDialog(this,"图片选择",FileDialog.LOAD);df.setVisible(true);if(df.getFile()==null)return;//获取文件的路径filename=df.getDirectory()+df.getFile();//文件路径+文件名//System.out.println(filename); //测试路径是否正确ImageIcon image = new ImageIcon(filename);ImageIcon labImage = image;labImage.setImage(image.getImage().getScaledInstance(110, 110, Image.SCALE_DEFAULT));piclab.setIcon(labImage);if (dif == 3) {ArrayList<Image> iList = splitImage(image, 3);//实际上只会用到list中的前8张图片,故只需产生0~7这八个数就行ArrayList<Integer> numList = randomNum(8);ImageIcon tempIcon[] = new ImageIcon[8];checkIcon = new ImageIcon[3][3];for (int j = 0; j < 3; j++){for (int i = 0; i < 3; i++) {//用于消除数组越界异常:这里的btn会有9个,而image只有8个,故最后一个btn是没有对象可以给它赋图片的。