1、魔板游戏课程设计20102011学年度JAVA GUI课程设计班级:_ _学号:_ _ 姓名:_ _2010 年 12月 16 日魔板游戏一、 设计内容设计GUI界面的魔板游戏程序。二、 设计要求1、 魔板由4*4或3*3个方格组成,其中一个格子是空的。对于4*4的魔板,其他格子里随机放置15个编号为115的方块;对于3*3的魔板,其他格子里随机放置8个编号为18的方块。2、 用鼠标单击任何与空格子相邻的方块可以把该方块移入空格子。通过不断的移动方块,可以将方块一行一行按数字顺序依次排列。3、 魔板游戏也可以使用图像来替代数字,对于4*4的魔板,将图像分成4*4个方块,打乱顺序后,放入魔板,并
2、将其中一个方格置为空。最终目标是通过移动方块恢复为原始图像。三、 总体设计(10分)1. 魔板游戏的主界面 图3.1 主界面2. 源文件及其功能魔板游戏程序设计通过MainFrame.java、PlayPanel.java、CalPanel.java、ImageButton.java4个类来实现魔板游戏的整体功能。源程序功能MainFrame.java构造程序主界面并布局,侦听主界面按钮,完成计时功能。包含mian()方法,是程序入口。PlayPanel.java构造3*3魔板,侦听魔板上的每个按钮,并有此游戏的开始和结束的方法。CalPanel.java构造计时、计算已经移动步数的子面板。I
3、mageButton.java构造按钮,给按钮以规范的设置。 表格3.2源程序功能 3. 关系说明源文件相关的源文件关系说明MainFrame.javaPlayPanel.java调用,根据不同的要求在住界面上构造魔板。如:选择卡通图片时加载相应的开通图片。CalPanel.java调用,根据不同的要求在住界面上构造子面板。如:数字玩法时不需要加载示例图片。PlayPanel.javaImageButton.java调用,加载魔板上的按钮。CalPanel.java调用,在计算移动魔板时执行相应操作使之步数加一。 表格3.3源文件关系说明四、主类说明(1分)1. 主类成员变量名称类型描述pla
4、yPanelPlayPanel魔板类,继承于JPanelcalPanelCalPanel子面板,继承于JPanelmbJMenuBar菜单栏mHelpJMenu帮助菜单mSelectPictureJMenu选择图片菜单mSelectLevelJMenu选择难度级别菜单mBearJMenuItem卡通图片菜单项mPeopleJMenuItem风景图片菜单项oneGradeJMenuItem初级菜单项twoGradeJMenuItem高级菜单项 表格4.1主类成员变量digitPlayJRadioButton数字玩法选择按钮picturePlayJRadioButton图片玩法选择按钮butGro
5、upButtonGroup按钮多斥作用域startButJButton开始游戏按钮whichPlayString判断那种玩法,有数字,图像whichOverString判断结束时,判断加载的是哪一张图片来匹配原图countTimeint记录游戏所用时间timerTimer计时器类2. 主类方法表格4.2主类方法名称功能备注MianFrame()初始化所有组件。构造方法。void LaunchFrame()布局组件。-void LaunchPlayPanel()根据选择类型加载想一个的图像面板。带参数which,判断图片类型,String类型。void actionPerformed()给按钮的
6、侦听器增加相应的操作。-class CloseHandler extends WindowAdapter监听窗口的关闭。内部类。void main()程序入口。主方法。class MyTimerTask extends TimerTask创建一个TimerTask的子类,来完成计时的任务。-四、 其他各类的描述和说明。(1分)1. PlayPanel类表格5.1.1 PlayPanel类成员变量成员变量类型描述imageButtonImageButton面板上的按钮,为3*3的二维数组imageListArrayList数组链表存放按钮上的图像copyOfImageListArrayList存
7、放最初时按顺序排列的图像emptyButtonImageButton空按钮gameOverboolean判断该游戏是否结束whichPlayString判断那种玩法,有图像,数字countStepint记录移动步数表格5.1.2 PlayPanel类成员方法成员方法功能备注PlayPanel() 初始化魔板。不带参数,默认。PlayPanel()初始化魔板。带参数which,判断图片类型,String类型。void startGame()随机排列图像集合中的图片,创建游戏开始时的界面。void actionPerformed()给移动的按钮的侦听器增加相应的操作boolean isFinish
8、ed判断游戏结束的条件带参数whichOver,String类型2. CalPanel类表格5.2.1 CalPanel类成员变量成员变量类型描述lblTimeJLabel时间标签txtTimeJTextField记录时间文本框lblStepJLabel移动步数标签txtStepJTextField记录移动步数文本框lblPictureJLabel加载示例图片标签表格5.2.1 CalPanel类成员变量成员方法功能备注CalPanel() 初始化子面板。3. ImageButtton类表格5.3.1 ImageButton类成员变量成员变量类型描述rowint按钮的行标记colint按钮的列
9、标记表格5.3.1 ImageButton类成员方法成员方法功能备注ImageButton()初始化魔板按钮。ImageButton()初始化魔板按钮。带参数icon,ImageIcon类型。void setRow(int row)设置按钮行值带参数row,int类型void setCol(int col)设置按钮列值带参数col,int类型int getRow()获取按钮行值返回类型为intint getCol()获取按钮列值返回类型为int五、 附主要源代码(分)1. MainFrame模块源代码import java.awt.*;import java.awt.event.*;impor
10、t javax.swing.*;import javax.swing.JOptionPane;import java.util.*;import java.util.Timer;public class MainFrame extends JFrame implements ActionListener /*-声明所有需要的组件-*/ PlayPanel playPanel; CalPanel calPanel; JMenuBar mb; JMenu mHelp; JMenu mSelectPicture, mSelectLevel; JMenuItem mBear,mPeople,oneGr
11、ade,towGrade; JRadioButton digitPlay,picturePlay; /为一组按钮创建一个多斥作用域。意味着“开启”其中一个 /按钮时,将关闭组中的其他所有按钮。 ButtonGroup butGroup; JButton startBut;/*-组件声明完毕-*/ String whichPlay=;/判断那种玩法,有数字,图像,图像中有小熊和人物 static String whichOver=;/判断结束时,判断加载的是哪一张图片来匹配原图 /记录游戏所用时间 int countTime; Timer timer; public MainFrame() /-
12、初始化所有组件- new JFrame(); this.setTitle(魔板游戏); mb=new JMenuBar(); mHelp=new JMenu(帮助); mSelectPicture=new JMenu(选择图片); mSelectLevel=new JMenu(选择级别); mBear=new JMenuItem(卡通); mPeople=new JMenuItem(风景); oneGrade=new JMenuItem(初级); towGrade=new JMenuItem(高级); digitPlay=new JRadioButton(数字玩法,true); picture
13、Play=new JRadioButton(图像玩法,false); butGroup=new ButtonGroup(); startBut=new JButton(开始游戏); /-初始化组件结束- public void LanuchFrame() /-布局组件- this.setJMenuBar(mb); mb.add(mSelectPicture); mb.add(mSelectLevel); mb.add(mHelp); mSelectPicture.add(mBear); mSelectPicture.add(mPeople); mSelectLevel.add(oneGrade
14、); mSelectLevel.add(towGrade); butGroup.add(digitPlay); butGroup.add(picturePlay); /为每个按钮添加侦听器 mBear.addActionListener(this); mPeople.addActionListener(this); mHelp.addActionListener(this); oneGrade.addActionListener(this); towGrade.addActionListener(this); digitPlay.addActionListener(this); picture
15、Play.addActionListener(this); startBut.addActionListener(this); /添加菜单下方的面板,用来装数字,图像玩法的RadioButton,及开始游戏按钮 JPanel pNorth=new JPanel(); pNorth.add(digitPlay); pNorth.add(picturePlay); pNorth.add(startBut); this.add(pNorth,BorderLayout.NORTH); /-初始化时,默认加载数字图片,进行游戏 playPanel=new PlayPanel(); calPanel=ne
16、w CalPanel(); this.add(playPanel,BorderLayout.CENTER); this.add(calPanel,BorderLayout.EAST); this.setBounds(100, 100, 600, 400);/为窗口设定大小 this.setResizable(false);/固定窗口大小 this.setVisible(true);/是主窗口可见 /*-根据选择类型加载想一个的图像面板-*/ public void LaunchPLayPanel(String which ) whichPlay=which; /-根据传进的参数判断要加载那个图
17、片- if(whichPlay.equals(bear) playPanel=new PlayPanel(bear); calPanel=new CalPanel(); calPanel.lblPicture.setIcon(new ImageIcon(bear.jpg); this.add(playPanel,BorderLayout.CENTER); this.add(calPanel,BorderLayout.EAST); whichOver=bear; else if(whichPlay.equals(people) playPanel=new PlayPanel(people); c
18、alPanel=new CalPanel(); calPanel.lblPicture.setIcon(new ImageIcon(people.jpg); this.add(playPanel,BorderLayout.CENTER); this.add(calPanel,BorderLayout.EAST); whichOver=people; else if(whichPlay.equals(number) playPanel=new PlayPanel(number); calPanel=new CalPanel(); calPanel.lblPicture.setIcon(null)
19、; this.add(playPanel,BorderLayout.CENTER); this.add(calPanel,BorderLayout.EAST); whichOver=number; /*-给按钮的侦听器增加相应的操作-*/ public void actionPerformed(ActionEvent e) /显示帮助 if(e.getSource()=mHelp) String helpMessage = 此游戏是通过单击图片来实现图片的移动, 游戏的最终任务是要n+ 游戏面板上的图片排列的跟预览图中的图片一样, 为游戏结束; JOptionPane.showMessageD
20、ialog(this,helpMessage); /选择小熊菜单项,把先前的面板移除,重新加载小熊面板 if(e.getSource()=mBear) picturePlay.isSelected(); this.remove(playPanel); this.LaunchPLayPanel(bear); /加载人物图片吗 if(e.getSource()=mPeople) picturePlay.isSelected(); this.remove(playPanel); this.LaunchPLayPanel(people); /加载数字图片 if(digitPlay.isSelected
21、() this.remove(playPanel); this.LaunchPLayPanel(number); /开始游戏 if(e.getSource()=startBut) playPanel.startGame(); calPanel.txtTime.setText(0); calPanel.txtStep.setText(0); /跟踪计时 countTime=0; timer=new Timer(); timer.schedule(new MyTimerTask(),0,1000); /*-监听窗口的关闭-*/ private class CloseHandler extends
22、WindowAdapter Override public void windowClosing(WindowEvent e) System.exit(0); /*-主方法,程序入口-*/ public static void main(String args) MainFrame m=new MainFrame(); m.LanuchFrame(); JOptionPane.showMessageDialog(m, 选择开始玩游戏); /*-创建一个TimerTask的子类,来完成计时的任务-*/ class MyTimerTask extends TimerTask public void
23、 run() calPanel.txtTime.setText(String.valueOf(countTime+); 2. PlayPanel模块源代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class PlayPanel extends JPanel implements ActionListener /面板上的按钮,为3*3 的二维数组ImageButton imageButtons = new ImageButton33; /数组链表存放按钮上的图像
24、 ArrayList imageList = new ArrayList(); /存放最初时按顺序排列的图像,并用之判断游戏是否结束ArrayList copyOfImageList = new ArrayList(); /空按钮,按钮上没有图像mageButton emptyButton=new ImageButton(); /定义一个布尔变量,判断该游戏是否结束boolean gameOver=true; String whichPlay=;/判断那种玩法,有图像,数字 int countStep=0;/记录移动步数 /*-构造器,默认加载数字图片-*/ public PlayPanel(
25、) this.setLayout(new GridLayout(3,3); for(int i=0;i9;i+)/将数字图片载入图像按钮 imageList.add(new ImageIcon(number+(i+1)+.jpg); for(int i=0;i3;i+) for(int j=0;j3;j+) /返回imageList列表上第i*3+j位置上的元素 imageButtonsij=new ImageButton(imageList.get(i*3+j); /设置组件的首选大小,尺寸为100,100 imageButtonsij.setPreferredSize(new Dimens
26、ion(100,100); imageButtonsij.setRow(i); imageButtonsij.setCol(j); this.add(imageButtonsij); /为每个按钮添加监听器 imageButtonsij.addActionListener(this); /*-构造器,初始化面板,显示一幅完整的图像,并按顺序存放图像块-*/ public PlayPanel(String which) whichPlay=which; this.setLayout(new GridLayout(3,3); if(whichPlay.equals(bear) for(int i=
27、0;i9;i+)/将图片载入图像按钮 imageList.add(new ImageIcon(bear+(i+1)+.jpg); if(whichPlay.equals(people) for(int i=0;i9;i+)/将图片载入图像按钮 imageList.add(new ImageIcon(people+(i+1)+.jpg); if(whichPlay.equals(number) for(int i=0;i9;i+)/将数字图片载入图像按钮 imageList.add(new ImageIcon(number+(i+1)+.jpg); /-将相应图片给相应按钮标签- for(int i=0;i3;i+) for(int j=0;j3;j+) /返回imageList列表上第i*3+j位置上的元素 imageButtonsij=new ImageButton(imageList.get(i*3+j); /设置组件的首选大小,尺寸为100,100 imageButtonsij.setPreferredSize
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1