魔板游戏课程设计.docx
- 文档编号:1579605
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:22
- 大小:134.33KB
魔板游戏课程设计.docx
《魔板游戏课程设计.docx》由会员分享,可在线阅读,更多相关《魔板游戏课程设计.docx(22页珍藏版)》请在冰点文库上搜索。
魔板游戏课程设计
2010—2011学年度
JAVAGUI课程设计
班级:
___
学号:
______
姓名:
________
2010年12月16日
魔板游戏
一、设计内容
设计GUI界面的魔板游戏程序。
二、设计要求
1、魔板由4*4或3*3个方格组成,其中一个格子是空的。
对于4*4的魔板,其他格子里随机放置15个编号为1~15的方块;对于3*3的魔板,其他格子里随机放置8个编号为1~8的方块。
2、用鼠标单击任何与空格子相邻的方块可以把该方块移入空格子。
通过不断的移动方块,可以将方块一行一行按数字顺序依次排列。
3、魔板游戏也可以使用图像来替代数字,对于4*4的魔板,将图像分成4*4个方块,打乱顺序后,放入魔板,并将其中一个方格置为空。
最终目标是通过移动方块恢复为原始图像。
三、总体设计(10分)
1.魔板游戏的主界面
图3.1主界面
2.源文件及其功能
魔板游戏程序设计通过MainFrame.java、PlayPanel.java、CalPanel.java、ImageButton.java4个类来实现魔板游戏的整体功能。
源程序
功能
MainFrame.java
构造程序主界面并布局,侦听主界面按钮,完成计时功能。
包含mian()方法,是程序入口。
PlayPanel.java
构造3*3魔板,侦听魔板上的每个按钮,并有此游戏的开始和结束的方法。
CalPanel.java
构造计时、计算已经移动步数的子面板。
ImageButton.java
构造按钮,给按钮以规范的设置。
表格3.2源程序功能
3.关系说明
源文件
相关的源文件
关系说明
MainFrame.java
PlayPanel.java
调用,根据不同的要求在住界面上构造魔板。
如:
选择卡通图片时加载相应的开通图片。
CalPanel.java
调用,根据不同的要求在住界面上构造子面板。
如:
数字玩法时不需要加载示例图片。
PlayPanel.java
ImageButton.java
调用,加载魔板上的按钮。
CalPanel.java
调用,在计算移动魔板时执行相应操作使之步数加一。
表格3.3源文件关系说明
四、主类说明(15分)
1.主类成员变量
名称
类型
描述
playPanel
PlayPanel
魔板类,继承于JPanel
calPanel
CalPanel
子面板,继承于JPanel
mb
JMenuBar
菜单栏
mHelp
JMenu
帮助菜单
mSelectPicture
JMenu
选择图片菜单
mSelectLevel
JMenu
选择难度级别菜单
mBear
JMenuItem
卡通图片菜单项
mPeople
JMenuItem
风景图片菜单项
oneGrade
JMenuItem
初级菜单项
twoGrade
JMenuItem
高级菜单项
表格4.1主类成员变量
digitPlay
JRadioButton
数字玩法选择按钮
picturePlay
JRadioButton
图片玩法选择按钮
butGroup
ButtonGroup
按钮多斥作用域
startBut
JButton
开始游戏按钮
whichPlay
String
判断那种玩法,有数字,图像
whichOver
String
判断结束时,判断加载的是哪一张图片来匹配原图
countTime
int
记录游戏所用时间
timer
Timer
计时器类
2.主类方法
表格4.2主类方法
名称
功能
备注
MianFrame()
初始化所有组件。
构造方法。
voidLaunchFrame()
布局组件。
--
voidLaunchPlayPanel()
根据选择类型加载想一个的图像面板。
带参数which,判断图片类型,String类型。
voidactionPerformed()
给按钮的侦听器增加相应的操作。
--
classCloseHandlerextendsWindowAdapter
监听窗口的关闭。
内部类。
voidmain()
程序入口。
主方法。
classMyTimerTaskextendsTimerTask
创建一个TimerTask的子类,来完成计时的任务。
--
四、其他各类的描述和说明。
(15分)
1.PlayPanel类
表格5.1.1PlayPanel类成员变量
成员变量
类型
描述
imageButton[][]
ImageButton
面板上的按钮,为3*3的二维数组
imageList
ArrayList<>
数组链表存放按钮上的图像
copyOfImageList
ArrayList<>
存放最初时按顺序排列的图像
emptyButton
ImageButton
空按钮
gameOver
boolean
判断该游戏是否结束
whichPlay
String
判断那种玩法,有图像,数字
countStep
int
记录移动步数
表格5.1.2PlayPanel类成员方法
成员方法
功能
备注
PlayPanel()
初始化魔板。
不带参数,默认。
PlayPanel()
初始化魔板。
带参数which,判断图片类型,String类型。
voidstartGame()
随机排列图像集合中的图片,创建游戏开始时的界面。
——
voidactionPerformed()
给移动的按钮的侦听器增加相应的操作
——
booleanisFinished
判断游戏结束的条件
带参数whichOver,String类型
2.CalPanel类
表格5.2.1CalPanel类成员变量
成员变量
类型
描述
lblTime
JLabel
时间标签
txtTime
JTextField
记录时间文本框
lblStep
JLabel
移动步数标签
txtStep
JTextField
记录移动步数文本框
lblPicture
JLabel
加载示例图片标签
表格5.2.1CalPanel类成员变量
成员方法
功能
备注
CalPanel()
初始化子面板。
——
3.ImageButtton类
表格5.3.1ImageButton类成员变量
成员变量
类型
描述
row
int
按钮的行标记
col
int
按钮的列标记
表格5.3.1ImageButton类成员方法
成员方法
功能
备注
ImageButton()
初始化魔板按钮。
——
ImageButton()
初始化魔板按钮。
带参数icon,ImageIcon类型。
voidsetRow(introw)
设置按钮行值
带参数row,int类型
voidsetCol(intcol)
设置按钮列值
带参数col,int类型
intgetRow()
获取按钮行值
返回类型为int
intgetCol()
获取按钮列值
返回类型为int
五、附主要源代码(60分)
1.MainFrame模块源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.JOptionPane;
importjava.util.*;
importjava.util.Timer;
publicclassMainFrameextendsJFrameimplementsActionListener{
/*-------------------声明所有需要的组件----------------*/
PlayPanelplayPanel;
CalPanelcalPanel;
JMenuBarmb;
JMenumHelp;
JMenumSelectPicture,mSelectLevel;
JMenuItemmBear,mPeople,oneGrade,towGrade;
JRadioButtondigitPlay,picturePlay;
//为一组按钮创建一个多斥作用域。
意味着“开启”其中一个
//按钮时,将关闭组中的其他所有按钮。
ButtonGroupbutGroup;
JButtonstartBut;
/*---------------------组件声明完毕----------------------*/
StringwhichPlay="";//判断那种玩法,有数字,图像,图像中有小熊和人物
staticStringwhichOver="";//判断结束时,判断加载的是哪一张图片来匹配原图
//记录游戏所用时间
intcountTime;
Timertimer;
publicMainFrame(){
//--------初始化所有组件-------------
newJFrame();
this.setTitle("魔板游戏");
mb=newJMenuBar();
mHelp=newJMenu("帮助");
mSelectPicture=newJMenu("选择图片");
mSelectLevel=newJMenu("选择级别");
mBear=newJMenuItem("卡通");
mPeople=newJMenuItem("风景");
oneGrade=newJMenuItem("初级");
towGrade=newJMenuItem("高级");
digitPlay=newJRadioButton("数字玩法",true);
picturePlay=newJRadioButton("图像玩法",false);
butGroup=newButtonGroup();
startBut=newJButton("开始游戏");
//---------初始化组件结束-----------
}
publicvoidLanuchFrame(){
//----------布局组件---------------
this.setJMenuBar(mb);
mb.add(mSelectPicture);
mb.add(mSelectLevel);
mb.add(mHelp);
mSelectPicture.add(mBear);
mSelectPicture.add(mPeople);
mSelectLevel.add(oneGrade);
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);
picturePlay.addActionListener(this);
startBut.addActionListener(this);
//添加菜单下方的面板,用来装数字,图像玩法的RadioButton,及开始游戏按钮
JPanelpNorth=newJPanel();
pNorth.add(digitPlay);
pNorth.add(picturePlay);
pNorth.add(startBut);
this.add(pNorth,BorderLayout.NORTH);
//---初始化时,默认加载数字图片,进行游戏
playPanel=newPlayPanel();
calPanel=newCalPanel();
this.add(playPanel,BorderLayout.CENTER);
this.add(calPanel,BorderLayout.EAST);
this.setBounds(100,100,600,400);//为窗口设定大小
this.setResizable(false);//固定窗口大小
this.setVisible(true);//是主窗口可见
}
/*--------根据选择类型加载想一个的图像面板--------------*/
publicvoidLaunchPLayPanel(Stringwhich){
whichPlay=which;
//---根据传进的参数判断要加载那个图片-------
if(whichPlay.equals("bear")){
playPanel=newPlayPanel("bear");
calPanel=newCalPanel();
calPanel.lblPicture.setIcon(newImageIcon("bear.jpg"));
this.add(playPanel,BorderLayout.CENTER);
this.add(calPanel,BorderLayout.EAST);
whichOver="bear";
}else
if(whichPlay.equals("people")){
playPanel=newPlayPanel("people");
calPanel=newCalPanel();
calPanel.lblPicture.setIcon(newImageIcon("people.jpg"));
this.add(playPanel,BorderLayout.CENTER);
this.add(calPanel,BorderLayout.EAST);
whichOver="people";
}else
if(whichPlay.equals("number")){
playPanel=newPlayPanel("number");
calPanel=newCalPanel();
calPanel.lblPicture.setIcon(null);
this.add(playPanel,BorderLayout.CENTER);
this.add(calPanel,BorderLayout.EAST);
whichOver="number";
}
}
/*-----------给按钮的侦听器增加相应的操作-------------------*/
publicvoidactionPerformed(ActionEvente){
//显示帮助
if(e.getSource()==mHelp){
StringhelpMessage="此游戏是通过单击图片来实现图片的移动,
游戏的最终任务是要\n"+
"游戏面板上的图片排列的跟预览图中的图片一样,
为游戏结束";
JOptionPane.showMessageDialog(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()){
this.remove(playPanel);
this.LaunchPLayPanel("number");
}
//开始游戏
if(e.getSource()==startBut){
playPanel.startGame();
calPanel.txtTime.setText("0");
calPanel.txtStep.setText("0");
//跟踪计时
countTime=0;
timer=newTimer();
timer.schedule(newMyTimerTask(),0,1000);
}
}
/*---------监听窗口的关闭--------------------*/
privateclassCloseHandlerextendsWindowAdapter{
@Override
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
}
/*------------主方法,程序入口----------*/
publicstaticvoidmain(String[]args){
MainFramem=newMainFrame();
m.LanuchFrame();
JOptionPane.showMessageDialog(m,"选择开始玩游戏");
}
/*-------创建一个TimerTask的子类,来完成计时的任务------*/
classMyTimerTaskextendsTimerTask{
publicvoidrun(){
calPanel.txtTime.setText(String.valueOf(countTime++));
}
}
}
2.PlayPanel模块源代码
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.util.*;
publicclassPlayPanelextendsJPanelimplementsActionListener{
//面板上的按钮,为3*3的二维数组
ImageButton[][]imageButtons=newImageButton[3][3];
//数组链表存放按钮上的图像
ArrayList
//存放最初时按顺序排列的图像,并用之判断游戏是否结束
ArrayList
//空按钮,按钮上没有图像
mageButtonemptyButton=newImageButton();
//定义一个布尔变量,判断该游戏是否结束
booleangameOver=true;
StringwhichPlay="";//判断那种玩法,有图像,数字
intcountStep=0;//记录移动步数
/*-------构造器,默认加载数字图片------------------*/
publicPlayPanel(){
this.setLayout(newGridLayout(3,3));
for(inti=0;i<9;i++){//将数字图片载入图像按钮
imageList.add(newImageIcon("number"+(i+1)+".jpg"));
}
for(inti=0;i<3;i++){
for(intj=0;j<3;j++){
//返回imageList列表上第i*3+j位置上的元素
imageButtons[i][j]=newImageButton(imageList.get(i*3+j));
//设置组件的首选大小,尺寸为100,100
imageButtons[i][j].setPreferredSize(newDimension(100,100));
imageButtons[i][j].setRow(i);
imageButtons[i][j].setCol(j);
this.add(imageButtons[i][j]);
//为每个按钮添加监听器
imageButtons[i][j].addActionListener(this);
}
}
}
/*-----构造器,初始化面板,显示一幅完整的图像,并按顺序存放图像块-----*/
publicPlayPanel(Stringwhich){
whichPlay=which;
this.setLayout(newGridLayout(3,3));
if(whichPlay.equals("bear")){
for(inti=0;i<9;i++){//将图片载入图像按钮
imageList.add(newImageIcon("bear"+(i+1)+".jpg"));
}
}
if(whichPlay.equals("people")){
for(inti=0;i<9;i++){//将图片载入图像按钮
imageList.add(newImageIcon("people"+(i+1)+".jpg"));
}
}
if(whichPlay.equals("number")){
for(inti=0;i<9;i++){//将数字图片载入图像按钮
imageList.add(newImageIcon("number"+(i+1)+".jpg"));
}
}
//------将相应图片给相应按钮标签------------
for(inti=0;i<3;i++){
for(intj=0;j<3;j++){
//返回imageList列表上第i*3+j位置上的元素
imageButtons[i][j]=newImageButton(imageList.get(i*3+j));
//设置组件的首选大小,尺寸为100,100
imageButtons[i][j].setPreferredSize
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 课程设计