java拼图游戏代码
- 格式:docx
- 大小:25.54 KB
- 文档页数:11
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语言实现拼图游戏源代码/** 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的拼图游戏基于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连接在一起,互相通信,共享全世界的计算机资源和信息。
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来实现简单的拼图游戏,供⼤家参考,具体内容如下⾸先我们看⼀下这个拼图⼩游戏的效果图:创建⼀个名称为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;}}}}}到这⾥代码程序就写完了,我们来运⾏⼀下:按步骤保存然后运⾏⼀下:结果没问题,单击“下⼀局”会重新刷新游戏,图⽚会进⾏随机排布:到此,⼀个简简单单的拼图⼩游戏就实现了。
Electronic Technology & Software Engineering 电子技术与软件工程• 237Program Design •程序设计【关键词】拼图游戏 Java 程序 Java 开发1 引言目前,影响学生注意力的各种外界因素很多,采用传统的单纯讲授知识点的授课模式进行教学,这一方式已无法满足当下课堂需求,这种方式下知识点的讲解以及授课采用的案例之间相互孤立,无联系,致使学生在学习时感觉知识点零碎、杂乱,从而无法吸引学生的兴趣,同时现实中的工作流程通常都是相互联系的,项目开发同样也相互联系,采用零碎,孤立的方式既无法吸引学生,也不符合现实中的工作流程。
为了能够提升学生兴趣,对接现实工作过程,在实施Java 课程授课时,采用项目化教学,以一个或几个项目为依据,通过讲解引导学生独立完成具体项目,这样课堂之间相互联系,同时以项目为中心讲解知识点,可以使学生感受到学有所用,使学生在实践过程中提升理论知识水平,还能够更好的培养学生运用知识解决问题的能力。
拼图游戏是一款简单有趣的小游戏,课堂上学习Java 语言时选择拼图游戏为导入,既能够吸引学生,提升学生兴趣,又能够充分将Java 知识点融合与游戏,在进行Java 课堂教学时需要通过以简单有趣的游戏项目贯穿课堂,教师讲解引导,学生作为主体完善提升,教师在教学实施时将游戏项目分解,学生在完成项目模块的同时掌握Java 知识点,通过按照任务要求,分步骤分模块实施,使学生可以在参与项目实施的过程,感受近于真实的开发环境,以此来激发学生的学习兴趣,最终实现学生分析问题、解决问题的能力的提升。
本文主要介绍课堂实施之简单拼图游戏的项目实现,以简单项目为媒介,在教学过程基于Java 的拼图游戏实现文/秦鹏珍中逐步带领学生掌握Java 编程基础语法知识,使学生建立Java 编程思想,在关注学生知识增长的同时,也关注学生相关能力目标的达成。
2 游戏设计要实现简单拼图游戏主要要完成以下三部分设计,包括游戏界面设计,游戏规则设计,游戏按钮功能实现设计,因此课堂实施时也主要按照三大模块实施,通过游戏界面的设计与完成要使学生掌握Java 中类的定义,树立面向对象思想,通过游戏规则设计,游戏按钮功能实现设计可以使学生掌握Java 基础语法知识,包括变量命名规则,数据类型,流程控制语句等,同时要掌握接口的定义、继承和实现,事件的处理机制。
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是没有对象可以给它赋图片的。