魔板游戏课程设计.docx

上传人:b****2 文档编号:1579605 上传时间:2023-05-01 格式:DOCX 页数:22 大小:134.33KB
下载 相关 举报
魔板游戏课程设计.docx_第1页
第1页 / 共22页
魔板游戏课程设计.docx_第2页
第2页 / 共22页
魔板游戏课程设计.docx_第3页
第3页 / 共22页
魔板游戏课程设计.docx_第4页
第4页 / 共22页
魔板游戏课程设计.docx_第5页
第5页 / 共22页
魔板游戏课程设计.docx_第6页
第6页 / 共22页
魔板游戏课程设计.docx_第7页
第7页 / 共22页
魔板游戏课程设计.docx_第8页
第8页 / 共22页
魔板游戏课程设计.docx_第9页
第9页 / 共22页
魔板游戏课程设计.docx_第10页
第10页 / 共22页
魔板游戏课程设计.docx_第11页
第11页 / 共22页
魔板游戏课程设计.docx_第12页
第12页 / 共22页
魔板游戏课程设计.docx_第13页
第13页 / 共22页
魔板游戏课程设计.docx_第14页
第14页 / 共22页
魔板游戏课程设计.docx_第15页
第15页 / 共22页
魔板游戏课程设计.docx_第16页
第16页 / 共22页
魔板游戏课程设计.docx_第17页
第17页 / 共22页
魔板游戏课程设计.docx_第18页
第18页 / 共22页
魔板游戏课程设计.docx_第19页
第19页 / 共22页
魔板游戏课程设计.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

魔板游戏课程设计.docx

《魔板游戏课程设计.docx》由会员分享,可在线阅读,更多相关《魔板游戏课程设计.docx(22页珍藏版)》请在冰点文库上搜索。

魔板游戏课程设计.docx

魔板游戏课程设计

 

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];

//数组链表存放按钮上的图像

ArrayListimageList=newArrayList();

//存放最初时按顺序排列的图像,并用之判断游戏是否结束

ArrayListcopyOfImageList=newArrayList();

//空按钮,按钮上没有图像

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2