java小游戏设计电子版本.docx
- 文档编号:29205900
- 上传时间:2023-07-21
- 格式:DOCX
- 页数:14
- 大小:70.49KB
java小游戏设计电子版本.docx
《java小游戏设计电子版本.docx》由会员分享,可在线阅读,更多相关《java小游戏设计电子版本.docx(14页珍藏版)》请在冰豆网上搜索。
java小游戏设计电子版本
java小游戏设计
华北科技学院计算机学院综合性实验
实验报告
课程名称JAVA程序设计
实验学期2014至2015学年第1学期
学生所在院部计算机学院
年级专业班级
学生姓名学号
任课教师
实验成绩
计算机学院制
《Java程序设计》课程综合性实验报告
开课实验室:
基础四2016年11月28日
实验题目
基于java的拼图游戏
一、实验目的
程序使用Eclipse集成开发环境完成,熟悉并掌握在Eclipse开发环境下编写Java程序。
二、设备与环境
硬件:
多媒体计算机
软件:
Windows系列操作系统、JDK开发包、Eclipse开发环境
三、实验内容及要求
1.实验要求
使用Javaswing编程实现拼图游戏。
游戏功能是将一幅图片分割成5*5的规则小图片,游戏开始时将25个小图片随机摆放,玩家能够参考原图拼接出正确的图片。
游戏规则:
在25个小图片中有一个为空白图片,玩家可以单击和空白小图片相邻的任一个小图片(上、下、左、右均可),即可将单击的小图片与空白小图片交换位置。
通过有限次的移动,即可将随机分布的小图片恢复成原图的样式。
2.实验内容
(1)各类及主要成员函数的功能:
java源代码及其功能
序号
类名
主要功能
1
GreedSnake
该类为程序入口,含有main方法。
2
SnakeControl
实现控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏暂停或继续,还有分数等。
3
SnakeModel
该类实现蛇的结构和具体运动,如判断食物是否和怎样被吃掉及判断后的动作。
4
Node
该类实现组成蛇身的单位-食物。
5
SnakeView
该类实现画板功能,用黑色画蛇身,红色画食物。
(2)具体代码及实现如下:
程序入口主方法:
//第一部分
publicclassGreedSnake{//建立主类GreeSnake
publicstaticvoidmain(String[]args){
SnakeModelmodel=newSnakeModel(20,30);//初始化蛇出现的位置
SnakeControlcontrol=newSnakeControl(model);
SnakeViewview=newSnakeView(model,control);
//添加一个观察者,让view成为model的观察者
model.addObserver(view);
(newThread(model)).start();
}
}
实现对蛇身的控制要求:
//第二部分
//游戏的Model类,负责所有游戏相关数据及运行
classSnakeControlimplementsKeyListener{//SnakeControl实现接口KeyListener,键盘监听
SnakeModelmodel;
publicSnakeControl(SnakeModelmodel){
this.model=model;
}
publicvoidkeyPressed(KeyEvente){
intkeyCode=e.getKeyCode();
if(model.running){//运行状态下,处理的按键
switch(keyCode){
caseKeyEvent.VK_UP:
model.changeDirection(SnakeModel.UP);
break;
caseKeyEvent.VK_DOWN:
model.changeDirection(SnakeModel.DOWN);
break;
caseKeyEvent.VK_LEFT:
model.changeDirection(SnakeModel.LEFT);
break;
caseKeyEvent.VK_RIGHT:
model.changeDirection(SnakeModel.RIGHT);
break;
caseKeyEvent.VK_ADD:
caseKeyEvent.VK_PAGE_UP:
//向上翻加速
model.speedUp();
break;
caseKeyEvent.VK_SUBTRACT:
caseKeyEvent.VK_PAGE_DOWN:
//减速
model.speedDown();
break;
caseKeyEvent.VK_SPACE:
caseKeyEvent.VK_P:
model.changePauseState();//暂停进入睡眠状态
break;
default:
}
}
//任何情况下处理的按键,按键导致重新启动游戏
if(keyCode==KeyEvent.VK_R||
keyCode==KeyEvent.VK_S||
keyCode==KeyEvent.VK_ENTER){
model.reset();
}
}
publicvoidkeyReleased(KeyEvente){
}
publicvoidkeyTyped(KeyEvente){
}
}
实现蛇的结构和具体运动:
//第三部分
@SuppressWarnings(“unchecked”)
classSnakeModelextendsObservableimplementsRunnable{//SnakeModel继承Observable类并且实现接口Runnable
ainfra[][]matrix;//指示位置上有没蛇体或食物
LinkedList
Nodefood;
intmaxX;
intmaxY;
intdirection=2;//蛇运行的方向
ainfrarunning=false;//运行状态
inttimeInterval=200;//时间间隔,毫秒
doublespeedChangeRate=0.75;//每次得速度变化率
ainfrapaused=false;//暂停标志
intscore=0;//得分
intcountMove=0;//吃到食物前移动的次数
//UPandDOWNshouldbeeven
//RIGHTandLEFTshouldbeodd
publicstaticfinalintUP=2;
publicstaticfinalintDOWN=4;
publicstaticfinalintLEFT=1;
publicstaticfinalintRIGHT=3;
publicSnakeModel(intmaxX,intmaxY){
this.maxX=maxX;
this.maxY=maxY;
reset();
}
publicvoidreset(){
direction=SnakeModel.UP;//蛇运行的方向
timeInterval=500;//时间间隔,毫秒
paused=false;//暂停标志
score=0;//得分
countMove=0;//吃到食物前移动的次数
//initialainfr,全部清0
matrix=newainfra[maxX][];
for(intI=0;I matrix[i]=newainfra[maxY]; Arrays.fill(matrix[i],false); } //initialthesnake //初始化蛇体,如果横向位置超过20个,长度为10,否则为横向位置的一半 intinitArrayLength=maxX>20? 10: maxX/2; nodeArray.clear(); for(intI=0;I intx=maxX/2+I;//maxX被初始化为20 inty=maxY/2;//maxY被初始化为30 //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15] //默认的运行方向向上,所以游戏一开始nodeArray就变为: //[10,14]-[10,15]-[11,15]-[12,15]~~[19,15] nodeArray.addLast(newNode(x,y)); matrix[x][y]=true; } //创建食物 food=createFood(); matrix[food.x][food.y]=true; } publicvoidchangeDirection(intnewDirection){//改变的方向不能与原来方向同向或反向 if(direction%2! =newDirection%2){ direction=newDirection; } } publicainframoveOn(){ Noden=nodeArray.getFirst(); intx=n.x; inty=n.y; //根据方向增减坐标值 switch(direction){ caseUP: y--; break; caseDOWN: y++; break; caseLEFT: x--; break; caseRIGHT: x++; break; } //如果新坐标落在有效范围内,则进行处理 if((0<=x&&x if(matrix[x][y]){//如果新坐标的点上有东西(蛇体或者食物) if(x==food.x&&y==food.y){//吃到食物,成功 nodeArray.addFirst(food);//从蛇头赠长 //分数规则,与移动改变方向的次数和速度两个元素有关 intscoreGet=(10000–200*countMove)/timeInterval; score+=scoreGet>0? scoreGet: 10; countMove=0; food=createFood();//创建新的食物 matrix[food.x][food.y]=true;//设置食物所在位置 returntrue; } else//吃到蛇体自身,失败 returnfalse; } else{//如果新坐标的点上没有东西(蛇体),移动蛇体 nodeArray.addFirst(newNode(x,y)); matrix[x][y]=true; n=nodeArray.removeLast(); matrix[n.x][n.y]=false; countMove++; returntrue; } } returnfalse;//触到边线,失败 } publicvoidrun(){//运行方法 running=true; while(running){ try{ Thread.sleep(timeInterval); } catch(Exceptione){ break; } if(! paused){ if(moveOn()){ setChanged();//Model通知View数据已经更新 notifyObservers(); } else{ JoptionPane.showMessageDialog(null, “你输了”, “GameOver”, JoptionPane.INFORMATION_MESSAGE); break; } } } running=false; } privateNodecreateFood(){ intx=0; inty=0; //随机获取一个有效区域内的与蛇体和食物不重叠的位置 do{ Randomr=newRandom(); x=r.nextInt(maxX); y=r.nextInt(maxY); } while(matrix[x][y]); returnnewNode(x,y); } publicvoidainfra(){ timeInterval*=speedChangeRate; } publicvoidspeedDown(){ timeInterval/=speedChangeRate; } publicvoidchangePauseState(){ paused=! paused; } publicStringtoString(){ Stringresult=“”; for(intI=0;I Noden=nodeArray.get(i); result+=“[“+n.x+“,”+n.y+“]”; } returnresult; } } 实现组成蛇身的单位-食物: //第四部分 classNode{//Node子类 intx; inty; Node(intx,inty){ this.x=x; this.y=y; } } 实现画板功能,黑色为蛇身,红色为食物: //第五部分 classSnakeViewimplementsObserver{//SnakeView实现接口Observer SnakeControlcontrol=null; SnakeModelmodel=null; Jframeainframe;//窗口 CanvaspaintCanvas;//图像背景 JlabellabelScore;//分数 publicstaticfinalintcanvasWidth=300;//窗口宽度 publicstaticfinalintcanvasHeight=300;//窗口高度 } (3)游戏运行结果如图: 初始游戏界面及蛇出现的位置,最后三行英文字母为帮助菜单: 第一次吃到食物加10分,增长1个食物的长度: 第二次吃到食物加14分,蛇身增加1个食物的长度,两次加分说明游戏分数不仅和食物有关还和所走路径有关: 游戏失败两种情况: 咬到蛇尾或者自身: 四、实验结果及分析 此处写自己通过学习本课程所得到的收获、感想以及对课程教学的看法等内容,要写自己的真实想法,不要写套话。 至少200字。 教师评价 评定项目 A B C D 评定项目 A B C D 算法正确 界面美观,布局合理 程序结构合理 操作熟练 语法、语义正确 解析完整 实验结果正确 文字流畅 报告规范 题解正确 其他: 评价教师签名: 年月日 考查报告内容必须自己独立完成,如果发现雷同现象,双方成绩都将认定为不及格! 最后要把课程考查报告电子文档及程序压缩文件上传到FTP服务器上,并提交打印稿。 打印报告时删除此红色提示
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 小游戏 设计 电子 版本