魔板游戏课程设计Word下载.docx

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

魔板游戏课程设计Word下载.docx

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

魔板游戏课程设计Word下载.docx

硬件环境:

处理器:

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;

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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