Java拼图游戏课程设计报告.docx

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

Java拼图游戏课程设计报告.docx

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

Java拼图游戏课程设计报告.docx

Java拼图游戏课程设计报告

 

《Java程序设计与应用开发》课程设计报告

 

设计题目

拼图大作战

学生姓名

学生班级

学生学号

指导教师

 

完成时间:

2016年06月21日

 

一、项目说明..................................................2

二、设计思路与关键数据结构.......................4

三、系统的类和结构......................................6

四、核心算法描述和相关技术说明..............8

五、总结和体会..............................................9

六、源代码清单............................................10

 

一.项目说明

1、项目介绍

该游戏是由以图片为主体的拼图小游戏,这个游戏是一个益智休闲的小游戏。

该类似的小游戏在我们成长的过程中,曾经疯狂的流行着,这是一个老少皆宜的小游戏,它开发人们的智力,加强我们的动手能力和我们的眼睛的洞察力。

该游戏简单方便易操作是一个很好的小游戏,也是一个经久不衰的游戏,在我们这代人中,可谓每个人都玩过这种类似的小游戏,简单易操作是其一直存在的原因之一。

游戏由简单的界面组成的,操作简单,该图像块是由12块小的小图像块构成的,其中有一个空白的小图像块,该图像块是来与别的图像块交换的,以此来实现大图像的拼凑。

在java标准环境下运行,实现通过小的图像块的移动实现大的图像的拼凑。

通过鼠标点击选取小的图像块,通过移动鼠标实现小图像的移动,使小图像块能够上下左右的移动从而完成大图像的拼凑的完成。

2、游戏展示与使用

1.主体功能

可以从多张图片中选择来进行拼图游戏

通过移动鼠标实现小图像的移动,使小图像块能够上下左右的移动从而完成大图像的拼凑的完成。

播放游戏音乐的功能

统计游戏中走的步数

游戏中体现友好性,加了数字提示的功能和一个原图预览的区域

完成后,有设置提示弹框显示,所用的步数和恭喜

2.如何使用

如下图:

可以先选择喜欢的图片来进行游戏,点击喜欢的图片后,再点击Start按钮便可以开始游戏

在游戏过程冲,可以使用数字提示的功能,数字提示会按照1,2,···9的顺序给予提示,借此降低游戏难度,增加可玩性

也可以控制游戏音乐的播放与否

在完成拼图后,会提恭喜完成的信息。

若再想继续游戏,则继续选择喜欢的图片,再点击Start按钮继续游戏

若不想玩游戏,则点击右上角叉叉,即可退出游戏。

 

3.基于Java技术,在Ecilpse下进行编译使用,作者使用环境SUMSUNG电脑,WIN1064位操作系统

二、设计的思路与关键数据结构

1、设计思路

主要是利用了Java中的Swing和Awt来实现界面上的静态显示和动态交互操作,播放音乐的技术使用到了Applet,在算法的实现上,利用了布局上的坐标方式,来计算每个小方格的坐标位置,进行小图片交换和判断是否复原拼图等操作。

2、实现思路

主要分为

五个类来实现总体的功能

在构思布局的过程中,想了3*4的布局,借此可以直接在面板上放置比较多的按钮来实现功能。

在显示界面的思路上,分为四个方面,主界面,图片预览区,拼图区,小平图单元格。

然后要有实现游戏总的一个类,启动类。

所以总共五个类,利用UML时序图表示如下:

 

 

3、关键算法

在决定做这个小游戏的时候,翻阅了书本,书本利用了坐标来计算每个小方块的关系,进行计算。

但是不完善,在这个基础上,上网查阅了博客和一些IT网站,最后完成了算法方面的问题。

第一个,打乱小拼图,利用第一个左上角的小方块与周围的小方块进行比较,若原理左上角的四块小方格,则表示打乱成功。

第二个,如何将点击的小方块和空方块来进行交换,将两个方块坐标进行互换即刻,在判断四个方向即刻。

利用UML时序图表示如下:

三、系统的类和结构

类结构与关系:

启动起类,负责调用空的构造方法,来启动整个游戏。

主界面类,进行界面的初始化操作,和添加组件。

预览图片类,负责绘制预览区,将图片载入预览区。

拼图图片类,关键类,实现了方格移动的算法。

拼图单元格类,关键类,实现了方格移动的算法

 

利用UML时序图,陈勋结构和练习,显示如下:

 

2、最初完成游戏界面效果如图:

此时无功能,无监听事件

 

3、完成监听和播放音乐功能后

完成一句游戏后效果如图所示

四、核心算法描述和相关技术说明

主要算法:

 

//当前方格的移动的算法

publicvoidmove(Stringdirection){//上,下,左,右

switch(direction){

case"UP":

this.setLocation(this.getBounds().x,this.getBounds().y-150);

break;

case"DOWN":

this.setLocation(this.getBounds().x,this.getBounds().y+150);

break;

case"LEFT":

this.setLocation(this.getBounds().x-150,this.getBounds().y);

break;

case"RIGHT":

this.setLocation(this.getBounds().x+150,this.getBounds().y);

break;

default:

//其他情况,不做移动处理

break;

}

}

//随机产生一个方向,进行空方格与小方法的互换

//产生0-3之间的随机数,对应空方格的上下左右移动

intdirection=(int)(Math.random()*4);//0,1,2,3

switch(direction){

case0:

//空方格向左移动,与左边的方格进行互换位置,左侧方格要向右移动

//nullX=nullX-150;

nullX-=150;

cellMove(nullX,nullY,"RIGHT");

break;

case1:

//空方格向右移动,与右边的方格进行互换位置,右侧方格要向左移动

nullX+=150;

cellMove(nullX,nullY,"LEFT");

break;

case2:

//空方格向上移动,与上边的方格进行互换位置,上侧方格要向下移动

nullY-=150;

cellMove(nullX,nullY,"DOWN");

break;

case3:

//空方格向下移动,与下边的方格进行互换位置,下侧方格要向上移动

nullY+=150;

cellMove(nullX,nullY,"UP");

break;

}

五、总结和体会

1、优缺点与自我评价

(一)、这个游戏真的太过简单,游戏功能单一,日后要完善,学新的知识

(二)、没和他人进行问题和知识上的学习交流

(三)、自己没有充分利用好时间,课程设计匆匆完成

(四)、图形交互界面不扎实,做的时候要看书,试来试去。

算法方面,这次写的两个算法相对简单,但也耗费了大量脑力,以后要多思考,学习算法。

(五)、这几天的精力都在做这个游戏中,破天荒给每行代码写好注释,以后要继续保持

2、课设与课程总结

在没上java这门课之前,我就知道java的强大,在我们生活中的重要性。

在学期开始的时候,那时我已经接触了Java,后来因为对前端方向感兴趣,所以就没怎么关心过Java,后台用的PHP多。

有空的时候放开书本,发现这本书讲了好多“复古”的内容,在日常中,我并不多见到这些知识。

在一次次地上网查询,了解相关的知识,从这些经历中,我打心底里对java有了新的了解,新的认识,从而对java产生了浓厚的兴趣以及好奇心,发现我之前太轻视这门课了。

此时Java课堂教学虽已经停止,但是我私下,今后会继续学期这门语言,认真对待,尝试自己在这个暑假就利用Java做后台。

这个小游戏挺简单的,三天的时间,没有请教别人,自己慢慢的就捣鼓出来了。

我知道团结的重要性,团队的力量。

以后做这方面的东西,开发,还是要多和他人讨论学习。

对于XX老师,很感谢您的教学付出,您在我心中是一个很负责任的老师,认真严肃的同时还能这么关心学生,贴近学生,真的打心底里佩服。

六、源代码清单

packagegamestart;

importgameui.PictureMainFrame;

/*

*启动器类

*/

publicclassMainApp{

publicstaticvoidmain(String[]args){

//创建主界面

PictureMainFrameframe=newPictureMainFrame();

//显示界面

frame.setVisible(true);

}

}

/*

*图片小方格类

*/

packagegameui;

importjavax.swing.Icon;

importjavax.swing.JButton;

/*

*图片小方格类

*/

publicclassCellextendsJButton{

//带有图片的小方格

publicCell(Iconicon){

super(icon);

//设置小方格大小

this.setSize(150,150);

}

//带有图片并且带有文字的小方格

publicCell(Stringtext,Iconicon){

super(text,icon);

//设置小方格大小

this.setSize(150,150);

this.setHorizontalTextPosition(CENTER);//文字水平居中显示

this.setVerticalTextPosition(CENTER);//文字垂直居中显示

}

//当前方格的移动

publicvoidmove(Stringdirection){//上,下,左,右

switch(direction){

case"UP":

this.setLocation(this.getBounds().x,this.getBounds().y-150);

break;

case"DOWN":

this.setLocation(this.getBounds().x,this.getBounds().y+150);

break;

case"LEFT":

this.setLocation(this.getBounds().x-150,this.getBounds().y);

break;

case"RIGHT":

this.setLocation(this.getBounds().x+150,this.getBounds().y);

break;

default:

//其他情况,不做移动处理

break;

}

}

}

/*

*拼图类

*/

packagegameui;

importjava.awt.Rectangle;

importjava.awt.event.MouseEvent;

importjava.awt.event.MouseListener;

importjavax.swing.ImageIcon;

importjavax.swing.JOptionPane;

importjavax.swing.JPanel;

/*

*拼图类

*/

publicclassPictureCanvasextendsJPanelimplementsMouseListener{

//静态变量

publicstaticintpictureID=1;//图片ID

publicstaticintstepNum=0;//步数

//成员变量

privateCell[]cell;//小方格

privatebooleanhasAddActionListener=false;//用来表示是否为方格添加了点击监听,添加了值为true,未添加值为false

privateRectanglenullCell;//指定一个空的小方格

//构造方法

publicPictureCanvas(){

//设置拼图区的布局

this.setLayout(null);//帧布局

//创建12个图片小方格,添加到拼图区

cell=newCell[12];

for(inti=0;i<4;i++){//代表的是行数

for(intj=0;j<3;j++){//代表的是列数

//加载图片

//ImageIconicon=newImageIcon("picture\\1_1.gif");

//i=0,1

//j=0,1,2

//0*3+0+1=1

//0*3+1+1=2

//0*3+2+1=3

//1*3+0+1=4

//1*3+1+1=5

ImageIconicon=newImageIcon("picture\\1_"+(i*3+j+1)+".gif");

//创建图片小方格

cell[i*3+j]=newCell(icon);

//指定图片小方格显示的位置

cell[i*3+j].setLocation(j*150+20,i*150+20);

//把图片小方格添加到拼图区显示

this.add(cell[i*3+j]);

}

}

//删除第12个图片小方格

this.remove(cell[11]);

//指定一个空的小方格

nullCell=newRectangle(300+20,450+20,150,150);

}

//重新加载图片,并添加数字提示

publicvoidreLoadPictureAddNumber(){

//获取到每一个图片小方格

for(inti=0;i<4;i++){//行数

for(intj=0;j<3;j++){//列数

//获取小方格cell[i*3+j]

//设置小方格显示的图片

ImageIconicon=newImageIcon("picture\\"+pictureID+"_"+(i*3+j+1)+".gif");

cell[i*3+j].setIcon(icon);

//设置小方格显示的数字提示

cell[i*3+j].setText(""+(i*3+j+1));

//设置小方格数字显示的位置

cell[i*3+j].setVerticalTextPosition(this.getY()/2);//设置文字垂直显示位置[居中显示]

cell[i*3+j].setHorizontalTextPosition(this.getX()/2);//设置文字水平显示位置[居中显示]

}

}

}

//重新加载图片,并去除数字提示

publicvoidreLoadPictureClearNumber(){

//获取到每一个图片小方格

for(inti=0;i<4;i++){//行数

for(intj=0;j<3;j++){//列数

//获取小方格cell[i*3+j]

//设置小方格显示的图片

ImageIconicon=newImageIcon("picture\\"+pictureID+"_"+(i*3+j+1)+".gif");

cell[i*3+j].setIcon(icon);

//设置小方格显示的数字提示

cell[i*3+j].setText("");

}

}

}

//对小方格进行重新位置排序,打乱顺序

publicvoidstart(){

//如果没有给小方格添加鼠标点击监听的话,则添加监听

if(!

hasAddActionListener){

//添加监听

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

cell[i].addMouseListener(this);

}

//更新鼠标点击监听的状态

hasAddActionListener=true;

}

//判断当前第一个小方格距离左上交的较近时,进行方格与空方格互换

//如果第一个小方格在左上角的四个方格位置内,就不断的循环,进行方法与空方格位置的互换

while(cell[0].getBounds().x<=170&&cell[0].getBounds().y<=170){

//获取到空方格的位置

intnullX=nullCell.getBounds().x;

intnullY=nullCell.getBounds().y;

//随机产生一个方向,进行空方格与小方法的互换

//产生0-3之间的随机数,对应空方格的上下左右移动

intdirection=(int)(Math.random()*4);//0,1,2,3

switch(direction){

case0:

//空方格向左移动,与左边的方格进行互换位置,左侧方格要向右移动

//nullX=nullX-150;

nullX-=150;

cellMove(nullX,nullY,"RIGHT");

break;

case1:

//空方格向右移动,与右边的方格进行互换位置,右侧方格要向左移动

nullX+=150;

cellMove(nullX,nullY,"LEFT");

break;

case2:

//空方格向上移动,与上边的方格进行互换位置,上侧方格要向下移动

nullY-=150;

cellMove(nullX,nullY,"DOWN");

break;

case3:

//空方格向下移动,与下边的方格进行互换位置,下侧方格要向上移动

nullY+=150;

cellMove(nullX,nullY,"UP");

break;

}

}

}

/**

*方格与空方格位置互换

*@paramnullX空方格的x轴坐标

*@paramnullY空方格的y轴坐标

*@paramdirection方格要移动的方向

*/

privatevoidcellMove(intnullX,intnullY,Stringdirection){

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

//获取到与空方格位置相同的小方格

if(cell[i].getBounds().x==nullX&&cell[i].getBounds().y==nullY){

//当前方格的移动

cell[i].move(direction);

//空方格的移动

nullCell.setLocation(nullX,nullY);

//交换位置后,结束循环

break;

}

}

}

@Override

publicvoidmouseClicked(MouseEvente){

}

@Override

publicvoidmousePressed(MouseEvente){//鼠标按下去

//获取到当前所点击的小方格

Cellbutton=(Cell)e.getSource();

//获取所点击方格的x,y坐标

intclickX=button.getBounds().x;

intclickY=button.getBounds().y;

//获取当前空方格的x,y坐标

intnullX=nullCell.getBounds().x;

intnullY=nullCell.getBounds().y;

//进行比较,如果满足条件进行位置的交换

if(clickX==nullX&&clickY-nullY==150){//点击的为空方格下面的方格

button.move("UP");//所点击的方格向上移动

}elseif(clickX==nullX&&clickY-nullY==-150){//点击的为空方格上面的方格

button.move("DOWN");//所点击的方格向下移动

}elseif(clickX-nullX==150&&clickY==nullY){//点击的为空方格右面的方格

button.move("LEFT");//所点击的方格向左移动

}elseif(clickX-nullX==-150&&clickY==nullY){//点击的为空方格左面的方格

button.move("RIGHT");//所点击的方格向右移动

}else{

return;//不满足移动条件,就不进行任何的处理

}

//更新空方格的位置

nullCell.setLocation(clickX,clickY);

//拼图区界面重新绘制

this.repaint();

//更新步数,将游戏状态区的步数更新

stepNum++;

PictureMainFrame.step.setText("步数:

"+stepNum);

//判断当前游戏是否完成,若完成,给玩家一个友好提示

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

当前位置:首页 > 解决方案 > 学习计划

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

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