魔板游戏课程设计Word下载.docx
- 文档编号:8547241
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:30
- 大小:124.15KB
魔板游戏课程设计Word下载.docx
《魔板游戏课程设计Word下载.docx》由会员分享,可在线阅读,更多相关《魔板游戏课程设计Word下载.docx(30页珍藏版)》请在冰点文库上搜索。
硬件环境:
处理器:
2.6GHzIntelPentiumIV或具有同等性能的处理器
软件环境:
JDK、Jcreator等软件
2.2详细设计
2.2.1程序流程图
根据对魔板游戏的分析,设计得到魔板游戏总体功能如图1所示
图1总体功能图
课程设计说明书NO.3
根据对魔板游戏的分析,设计得到魔板游戏总流程图如图2所示
图2总体流程图
课程设计说明书NO.4
2.2.2程序中自定义类说明
(1)PuzzlePad.java类模块
PuzzlePad类创建的对象是PuzzleGame类最重要的成员之一,代表“魔板”。
该类的成员变量中有5种重要类型的对象:
Point、Block、HandleMove、HandleImage和Image。
PuzzlePad类的主要成员的作用将在后面的详细设计中阐述。
(2)Block.java类模块
Block类是JTextField的一个子类,创建的对象是PuzzlePad类的重要成员之一,用来表示“魔板”中的“方块”。
(3)Point.java类模块
Point类负责创建确定位置的对象,使用Point对象可以确定Block对象在PuzzlePad对象中的位置,即确定“方块”在“魔板”中的位置。
(4)HandleImage.java类模块
HandImage类所创建的对象负责处理鼠标事件。
(5)HandleMove.java类模块
HandMove类所创建的对象负责处理鼠标事件。
(6)VerifySuccess.java类模块
VerifySuccess类所创建的对象负责验证用户是否按要求成功排列魔板中的方块。
综上可得程序中的各种类及其功能如表1所示
表1类名表
类名
作用
父类
PuzzleGame.java
负责创建魔板游戏的主窗口
JFrame
PuzzlePad.java
代表“魔板”
JPanel
Block.java
用来代表“魔板中的“方块”
JTxtField
课程设计说明书NO.5
Point.java
确定“方块”在“魔板”中的位置
HandleImage.java
负责将一幅图像分成若干个笑图像
JComponent
HandleMove.java
负责处理鼠标事件
VerfySuccess.java
负责验证用户是否按要求成功排列模板中的方块
2.2.3程序中主要方法说明
PuzzledGame()是够着方法,负责完成窗口的初始化操作
PuzzeldGame类创建的窗口是菜单中的菜单项、单选框以及按钮上的ActionEvent事件监视器。
Main方法是程序运行的入口方法
PuzzledPad对象调用setImage方法设置image对象。
PuzzlePad对象调用setGrade方法设置魔板的级别。
Block对象调用setAtPoint方法设置自己所在的“点”,即返回point对象的引用。
Block对象调用getObject返回自己所在的“点”,即返回point对象的引用。
Block对象调用setObject方法设置自己的成员object,当前设置object是Integer对象时,当前Block对象将显示Interger对象中的数字。
Point对象调用isHaveBlock()方法返回一个boolean型数据,如果当前point对象上有Block对象,isHaveBlock()方法返回true;
否则返回false.
HandleImage()是构造方法,负责完成HandleImage对象的初始化。
getImages方法将参数指定的Image图像分解成若干个更小饿图像,并将这些图像存放到一个Image数组中,然后返回数组。
程序中设计的各种主要方法及其功能如表2所示
课程设计说明书NO.6
表2方法名表
方法名
主要功能
PuzzleGame()
负责完成窗口的初始化操作
actionPerformed
是PuzzleGame类实现ActionListener接口中的方法
PuzzledPad()
负责创建Puzzled的对象
Point()
用来创建Point对象
3.设计结果与分析
3.1程序运行结果
本程序实现的游戏分为初级和高级模式,可以在单机选择级别之后进行选择级别模式。
初级的话共分为9格魔板一个为空,8个魔板上下左右自由移动,直至排列完成。
该游戏初始默认为数字玩法,不过在单击图像玩法之后可以进行图像的选择也可选择默认图像(dog.jpg)单击开始,如果图像不能立刻显示,那么再单击一次就会出现图像魔板了。
如图3所示:
图3初级的图像玩法图
课程设计说明书NO.7
如果想要选择了一幅新的图像,只要单击选择图像中的选择一幅新图像就可出现如下界面,如图4:
图4图像选择界面
在选择了新图像之后单击开始按钮,就会有一张新的图片替换了刚刚所使用的默认图像了。
此时如果再选择高级的模式图像就会被分成16快随即小魔板,如图5所示:
图5高级的图像玩法图
课程设计说明书NO.8
由上图的底部可以看出还有一个计时器功能,当你开始移动魔板是它就开始计时直至完成魔板的正确排列。
6.附录
附录1.1PuzzleGame模块源程序
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjava.io.*;
importjavax.swing.filechooser.*;
publicclassPuzzleGameextendsJFrameimplementsActionListener{
PuzzlePadpuzzlePad;
JMenuBarbar;
JMenugradeMenu,choiceImage;
JMenuItemoneGrade,twoGrade,newImage,defaultImage;
JRadioButtondigitPlay,imagePlay;
ButtonGroupgroup=null;
JButtonstartButton;
Imageimage;
Toolkittool;
/**CreatesnewformPuzzleGame*/
publicPuzzleGame(){
tool=getToolkit();
bar=newJMenuBar();
gradeMenu=newJMenu("
选择级别"
);
choiceImage=newJMenu("
选择图像"
oneGrade=newJMenuItem("
初级"
twoGrade=newJMenuItem("
高级"
newImage=newJMenuItem("
选择一幅新图像"
defaultImage=newJMenuItem("
使用默认图像"
gradeMenu.add(oneGrade);
gradeMenu.add(twoGrade);
choiceImage.add(newImage);
choiceImage.add(defaultImage);
bar.add(gradeMenu);
bar.add(choiceImage);
setJMenuBar(bar);
课程设计说明书NO.9
oneGrade.addActionListener(this);
twoGrade.addActionListener(this);
newImage.addActionListener(this);
defaultImage.addActionListener(this);
startButton=newJButton("
开始"
startButton.addActionListener(this);
group=newButtonGroup();
digitPlay=newJRadioButton("
数字玩法"
true);
imagePlay=newJRadioButton("
图像玩法"
false);
group.add(digitPlay);
group.add(imagePlay);
puzzlePad=newPuzzlePad();
puzzlePad.setGrade
(1);
puzzlePad.setIsDigitPlay();
add(puzzlePad,BorderLayout.CENTER);
JPanelpNorth=newJPanel();
pNorth.add(digitPlay);
pNorth.add(imagePlay);
pNorth.add(startButton);
pNorth.add(newJLabel("
如果图像不能立刻显示,请再单击一次按钮"
));
add(pNorth,BorderLayout.NORTH);
add(puzzlePad.getHandleMove(),BorderLayout.SOUTH);
validate();
setVisible(true);
setBounds(100,50,550,380);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
image=tool.createImage(newFile("
dog.jpg"
).toURI().toURL());
puzzlePad.setImage(image);
}
catch(Exceptionexp){}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==startButton){
if(digitPlay.isSelected()){
elseif(imagePlay.isSelected()){
课程设计说明书NO.10
elseif(e.getSource()==oneGrade){
elseif(e.getSource()==twoGrade){
puzzlePad.setGrade
(2);
elseif(e.getSource()==newImage){
FileNameExtensionFilterfilter=newFileNameExtensionFilter("
JPG&
GIFImage"
"
jpg"
gif"
JFileChooserchooser=newJFileChooser();
chooser.setFileFilter(filter);
intstate=chooser.showOpenDialog(null);
Filefile=chooser.getSelectedFile();
if(file!
=null&
&
state==JFileChooser.APPROVE_OPTION){
image=tool.createImage(file.toURI().toURL());
elseif(e.getSource()==defaultImage){
//<
editor-folddefaultstate="
collapsed"
desc="
GeneratedCode"
>
privatevoidinitComponents(){
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
javax.swing.GroupLayoutlayout=newjavax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
课程设计说明书NO.11
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0,400,Short.MAX_VALUE)
);
layout.setVerticalGroup(
.addGap(0,300,Short.MAX_VALUE)
pack();
}//<
/editor-fold>
publicstaticvoidmain(Stringargs[]){
newPuzzleGame();
}
附录1.2PuzzlePad模块源程序
importjava.util.*;
publicclassPuzzlePadextendsJPanel{
Point[][]point;
Block[][]block;
intdistance=56,grade,m=3,n=3;
HandleMovehandleMove;
HandleImagehandleImage;
VerifySuccessverifySuccess;
booleanisDigitPlay;
publicPuzzlePad(){
setBackground(Color.gray);
setLayout(null);
handleMove=newHandleMove();
handleMove.initSpendTime();
handleImage=newHandleImage();
verifySuccess=newVerifySuccess();
handleMove.setVerifySuccess(verifySuccess);
publicHandleMovegetHandleMove(){
returnhandleMove;
课程设计说明书NO.12
}
publicvoidsetImage(Imageimage){
this.image=image;
publicvoidsetGrade(intgrade){
this.grade=grade;
if(grade==1){
m=3;
n=3;
elseif(grade==2){
m=4;
n=4;
publicintgetGrade(){
returngrade;
privatevoidneedInit(){
removeAll();
point=newPoint[m][n];
block=newBlock[m][n];
intHspace=distance,Vspace=distance;
for(inti=0;
i<
m;
i++){
for(intj=0;
j<
n;
j++){
point[i][j]=newPoint(Hspace,Vspace);
Hspace=Hspace+distance;
Hspace=distance;
Vspace=Vspace+distance;
handleMove.setPoint(point);
verifySuccess.setPoint(point);
intk=0;
课程设计说明书NO.13
else
n-1;
block[i][j]=newBlock();
block[i][j].addMouseListener(handleMove);
k++;
publicvoidsetIsDigitPlay(){
needInit();
isDigitPlay=true;
ArrayList<
Integer>
numberList=newArrayList<
();
for(intk=0;
k<
m*n-1;
k++){
numberList.add(k+1);
Object[]object=numberList.toArray();
verifySuccess.setObject(object);
Collections.shuffle(numberList);
for(inti=0;
i<
if(i<
m-1)
for(intj=0;
block[i][j].setObject(numberList.get(k));
n-1;
repaint();
publicvoidsetIsImagePlay(){
isDigitPlay=false;
Image>
imageList=newArrayList<
Image[]blockImage=handleImage.getImages(image,m,n);
for(intk=0;
blockImage.length-1;
k++){
课程设计说明书NO.14
publicvoidpaintComponent(Graphicsg){
super.paintComponent(g);
if(isDigitPlay==false)
g.drawImage(image,20+distance*(m+1),point[0][0].getY(),distance*m,distance*n,this);
附录1.3Block类模块源程序
publicclassBlockextendsJTextField{
Pointpoint;
Objectobject;
Block(){
setEditable(false);
setHorizontalAlignment(JTextField.CENTER);
setForeground(Color.blue);
publicvoidsetAtPoint(Pointp){
point=p;
publicPointgetAtPoint(){
returnpoint;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 游戏 课程设计