魔板游戏开发说明.docx

上传人:b****6 文档编号:5998914 上传时间:2023-01-02 格式:DOCX 页数:11 大小:191.02KB
下载 相关 举报
魔板游戏开发说明.docx_第1页
第1页 / 共11页
魔板游戏开发说明.docx_第2页
第2页 / 共11页
魔板游戏开发说明.docx_第3页
第3页 / 共11页
魔板游戏开发说明.docx_第4页
第4页 / 共11页
魔板游戏开发说明.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

魔板游戏开发说明.docx

《魔板游戏开发说明.docx》由会员分享,可在线阅读,更多相关《魔板游戏开发说明.docx(11页珍藏版)》请在冰豆网上搜索。

魔板游戏开发说明.docx

魔板游戏开发说明

 

2010—2011学年度

JAVAGUI课程设计

 

班级:

____08软件1班___

学号:

____180108122_____

姓名:

____赵林_________

 

2010年12月20日

文档基本格式要求及分值:

魔板游戏

一、设计内容

设计GUI界面的魔板游戏程序。

二、设计要求

1、魔板由4*4或3*3个方格组成,其中一个格子是空的。

对于4*4的魔板,其他格子里随机放置15个编号为1~15的方块;对于3*3的魔板,其他格子里随机放置8个编号为1~8的方块。

2、用鼠标单击任何与空格子相邻的方块可以把该方块移入空格子。

通过不断的移动方块,可以将方块一行一行按数字顺序依次排列。

3、魔板游戏也可以使用图像来替代数字,对于4*4的魔板,将图像分成4*4个方块,打乱顺序后,放入魔板,并将其中一个方格置为空。

最终目标是通过移动方块恢复为原始图像。

 

三、总体设计(10分)

该魔板游戏开发中共有几个源文件,各源文件之间的关系说明。

可包括框架图示。

该程序共包含着几个类源文件:

CreayImage.java,ActionEvent.java,ImageIcon.java,CountTime.java,Resize.java,CutImage.java包含接口:

IDealImage.java,Direction.java.。

其中CreayImage为主类,主要布局整个游戏界面的GUI,以及各类事件,ActionEvent类为一个侦听器用来处理鼠标点击事件,实现了MouseListener接口,ImageIcon类继承了javax.swing.ImageIcon类,里面定义了id属性,用于最后判断游戏是否胜利完成。

CountTime类为一个线程类,实现java.lang.Runnable接口,用于游戏开始时计时用。

Resize类是一个工具类,用于处理加载进来的图片,将其处理成制定大小weidth*height像素的图像,便于将处理后的图片加载相应的空间之上。

CutImage类也是一个工具类,用于将Resize类处理后的图片进行切割成制定的大小图片组,并将切割好的图片存放于容器之中。

接口IDealImage中定义了getImageList方法,由CutImage来实现,调用接口可以减低程序的耦合度,加强程序的灵活性。

Direction接口中指定义了几个方向属性UP,DOWN,LEFT,RIGHT分别用于指定鼠标点击label时,图片移动的方向。

另外:

源文件中还包含一个img.ini二进制文件,里面存放一个预先写进去的图片二进制数。

用于程序一开始运行时,从中读取图片。

结构图如下:

 

四、主类说明(15分)

用表格的形式说明主类中各成员变量(成员变量的名称、变量类型、变量的描述)、方法(名称、功能、备注)。

1、CreayImage类

成员变量

成员变量的名称

变量类型

变量的描述

rows

Int

模板游戏矩阵行数

cols

Int

模板游戏矩阵列数

width

Int

游戏矩阵列每个小图像的宽度

height

Int

游戏矩阵列每个小图像的高度

steps

Int

图像移动的步数

path

String

加载图像图像的路径

imagelist

ArrayList

存放被切割的小图像的容器

所用方法

方法名称

功能

备注

Init()

初始化魔方游戏的界面部分

initLabelImage()

用于处理图像,把图像切割后并加载到panel容器的label上

initLabelScan()

把加载的原图像加载到魔方游戏的右下角的区域中

actionPerformed()

监听界面发出的操作指令,实现各种操作(比如点击开始,选择图片等)

五、其他各类的描述和说明。

(15分)

1、ActionEvent

变量

成员变量的名称

变量类型

变量的描述

cutRow

Int

鼠标点击的图像所在列

cutCol

Int

鼠标点击的图像所在行

rows

Int

图像的列数

Cols

Int

图像的列数

steps

Int

图像移动的步数

direction

Int

移动的方向

方法

方法名称

功能

备注

ActionEvent(introws,intcols…)

带参数的构造方法,用于传递参数

initStep()

设置移动图像的标签

mouseClicked()

鼠标点击事件

checkSuccess()

检查图像是否与原图匹配的方法

checkImageCanMove()

检查图像是否可以移动

moveLabelImage()

设置图像移动方向

moveUp()

图像上移的方法

moveDown()

图像下移的方法

moveLeft()

图像左移的方法

moveRight()

图像右移的方法

2、CutImage

方法

方法名称

功能

备注

getImageList()

返回加载的图片切割后的图像列表

2、Resize

方法

方法名称

功能

备注

Resize()

带参数的构造方法,用于传递参数

Rize()

重置图像大小的方法,把图像的大小更改为400*300

3.CountTime

成员变量:

成员变量的名称

变量类型

变量的描述

IsSuccess

Boolean

定义游戏是否胜利

Time

Int

定义游戏所进行的时间

方法

方法名称

功能

备注

Run

游戏点击开始时开始计时

4.Direction接口变量

成员变量:

成员变量的名称

变量类型

变量的描述

UP

Int

方向向上

DOWN

Int

方向向下

LEFT

Int

方向向左

RIGHT

Int

方向向右

 

六、附主要源代码(60分)

CreayImage类中主要代码:

 

1.初始化,游戏主面板代码:

publicvoidinitLabelImage(){

this.imagePane.removeAll();//先除去面板上的控件

this.imagePane.setLayout(newGridLayout(this.getRows(),this.getCols(),1,1));//对面板进行重新布局

 

//定义标签移动步数num

this.total=this.getRows()*this.getCols();

this.imageLabel=newJLabel[this.total];

try{

IDealImagedealImage=newCutImage();

//定义接口,实例化CutImage类

this.imageList=dealImage.getImageList(this.getPaht(),this.rows,

this.cols,this.weight,this.height);

}catch(Exceptione){

e.printStackTrace();

}

//调用方法,获得对图片进行分割后的小图片容器

for(inti=0;i

for(intj=0;j

//用双重循环,将图片加载到面板的Label上

ImageIconimgIcon=newImageIcon(this.imageList.get(i*cols

+j));

imgIcon.setId(i*cols+j);

this.imageLabel[i*this.cols+j]=newJLabel(imgIcon);

this.imageLabel[i*this.cols+j].setSize(imgIcon

.getIconWidth(),imgIcon.getIconHeight());

this.imagePane.add(this.imageLabel[i*this.cols+j]);

//给没个label添加一个鼠标单击事件侦听

this.imageLabel[i*this.cols+j]

.addMouseListener(newActionEvent(this.imageLabel,this

.getRows(),this.getCols(),i,j,this.steps,

this.labelStep,this.btnStart,this.ct));

}

}

this.imageLabel[this.total-1].setIcon(null);

}

2单击“选择图片”按钮响应代码:

JFileChooserfileChoser=newJFileChooser();

//弹出选择文件对话框

fileChoser.setFileSelectionMode(JFileChooser.FILES_ONLY);

intresult=fileChoser.showOpenDialog(null);

if(result==JFileChooser.OPEN_DIALOG){

this.paht=fileChoser.getSelectedFile().getAbsolutePath();

//获取选择文件的路径

this.initLabelScan();//重新布局面板,更爱图片

this.initLabelImage();//重新布局小图片浏览面板

 

3.单击开始按钮代码:

Randomr=newRandom();//定义随机类变量

intranNum1;

intranNum2;

//循环打乱面板上的图片

for(inti=0;i<30;i++){

ranNum1=r.nextInt(rows*cols-1);

ranNum2=r.nextInt(rows*cols-1);

if(ranNum1==ranNum2){

i--;

continue;

}

ImageIconii=(ImageIcon)this.imageLabel[ranNum1]

.getIcon();

this.imageLabel[ranNum1]

.setIcon((ImageIcon)imageLabel[ranNum2].getIcon());

this.imageLabel[ranNum2].setIcon(ii);

}

this.btnStart.setText("重来");

this.btnChooseImage.setEnabled(false);

this.labelStep.setVisible(true);

this.labelStep.setText("0");

System.out.println();

//this.ct=newCountTime(this.labelTime);

//ct=newCountTime(this.labelTime);

ct.setTime(0);

ct.setSuccess(false);

Threadt=newThread(ct);

t.start();

 

4.Resize.java调整图像像素大小的代码:

BufferedImagebufTarget=null;

doublesx=(double)width/srcBufImage.getWidth();

doublesy=(double)height/srcBufImage.getHeight();

inttype=srcBufImage.getType();

if(type==BufferedImage.TYPE_CUSTOM){

ColorModelcm=srcBufImage.getColorModel();

WritableRasterraster=cm.createCompatibleWritableRaster(width,

height);

booleanalphaPremultiplied=cm.isAlphaPremultiplied();

bufTarget=newBufferedImage(cm,raster,alphaPremultiplied,null);

}else

bufTarget=newBufferedImage(width,height,type);

Graphics2Dg=bufTarget.createGraphics();

g.setRenderingHint(RenderingHints.KEY_RENDERING,

RenderingHints.VALUE_RENDER_QUALITY);

g.drawRenderedImage(srcBufImage,AffineTransform.getScaleInstance(sx,sy));

g.dispose();

5.切割图片部分代码:

BufferedImagebufferedImg2=ImageIO

.read(newFileInputStream(path));//加载图片

BufferedImagebufferedImg=Resize.rize(bufferedImg2,400,300);

width=bufferedImg.getWidth()/cols;

height=bufferedImg.getHeight()/rows;

for(inti=0;i

for(intj=0;j

//将切割的图片存放到容器中

imageList.add(bufferedImg.getSubimage(width*j,

height*i,width,height));

}

}

 

七、小结

差不多做完了这个实验,才感觉到这个游戏其实还挺有意思的,以前一直在网上玩游戏,从没想过自己来把这个游戏给做出来,现在回过头来,真的感觉很不一样,从中学到不少东西。

玩游戏时感觉很简单,只要鼠标点点,开始,移动即可,在做的时候却遇到了不少的问题,比如把一个很大的图片加载到面板上,又如何将它的大小进行转化,以及后面如何将转化后图片进行切割,再到后面,如何点击图片时发生移动,怎么移动,最终判断游戏胜利,一路走来,感觉经历了一番,现在回过头来想想其实挺简单的,也感觉到一点成就感。

这学期也快结束了,java的基础学习也意味着将暂告一段落,但我知道java的博大之处,还有很多比如j2ee,所以还有很多知识等着我们去学。

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

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1