java小游戏设计电子版本.docx

上传人:b****5 文档编号:29205900 上传时间:2023-07-21 格式:DOCX 页数:14 大小:70.49KB
下载 相关 举报
java小游戏设计电子版本.docx_第1页
第1页 / 共14页
java小游戏设计电子版本.docx_第2页
第2页 / 共14页
java小游戏设计电子版本.docx_第3页
第3页 / 共14页
java小游戏设计电子版本.docx_第4页
第4页 / 共14页
java小游戏设计电子版本.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

java小游戏设计电子版本.docx

《java小游戏设计电子版本.docx》由会员分享,可在线阅读,更多相关《java小游戏设计电子版本.docx(14页珍藏版)》请在冰豆网上搜索。

java小游戏设计电子版本.docx

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;//指示位置上有没蛇体或食物

LinkedListnodeArray=newLinkedList();//蛇体

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服务器上,并提交打印稿。

打印报告时删除此红色提示

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

当前位置:首页 > 人文社科 > 法律资料

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

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