C集中上机.docx
《C集中上机.docx》由会员分享,可在线阅读,更多相关《C集中上机.docx(8页珍藏版)》请在冰豆网上搜索。
C集中上机
重庆邮电大学
《集中上机》实习报告
题目简单贪吃蛇游戏
学院名称计算机学院
专业名称计算机应用
班级5311203
学生学号88
学生姓名陈染谷
指导教师甘玲
完成时间2014年12月9日
最终评定成绩
一、题目内容
用C+■面向对象编程语言设计一个简单的贪吃蛇游戏,通过WSA捱制蛇的方向进行游戏。
二、背景及相关技术
“贪吃蛇”游戏是一个经典的游戏,它因操作简单、娱乐性强而广受欢迎。
本文基于Java技术开发环境,开发了一个操作简单、界面美观、功能较齐全的“贪吃蛇”游戏。
整个游戏程序分为二个功能模块,六个类模块,实现了游戏的开始、暂停、结束。
程序关键在于表示蛇的图形及蛇的移动。
用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头用俩节表示。
移动时必须从蛇头开始,所以蛇不能向相反的方向移动,如果不按任意键,蛇自行在当前方向上前移,但按下有效方向键后,蛇头朝着该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新蛇的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后一节用背景色覆盖。
食物的出现与消失也是画矩形块和覆盖矩形块。
为了便于理解,定义两个结构体:
食物与蛇
三、概要设计
本程序是针对贪吃蛇小游戏的JAVA程序,利用方向键来改变蛇的运行方向,并在随机的地方产生食物,吃到食物就变成新的蛇体,碰到壁或自身则游戏结束,否则正常运行。
1.类之间的关系如图1所示:
2.简要算法分析:
a.利用数组列表来存放蛇身的每一个节点。
b,蛇的方向分别用四个整型常量表示:
1左,2上,3右,4下。
可利用derection%2是否等于newDer%2来判断改变的方向是否一原来方向相反。
d,蛇吃食物算法:
根据蛇头的方向,判断蛇头坐标与食物坐标关系,例如:
蛇头向上,则蛇头与食物的x坐标相同,蛇头y坐标比食物y坐标少10(一个食物或一节蛇身的长度)。
e,蛇移动时,根据当前蛇头坐标向蛇头方向前画一个节点作为新的蛇头,并去掉蛇尾。
系统流程图:
开始
NewGame
游戏结束
四、系统实现
1.主类SnakeGame
(1)主类为此程序的入口,定义了SnakeFrame的对象frame,开始运行此程序。
(2)源代码见文件SnakeGame.Java
2.类SnakeFrame
(1)成员变量见表2
表2主要成员变量
成员变量描述
变量类型
名称
状态标签
PrivateJLabel
statusLabel
分数标签
PrivateJLabel
scoreLabel
蛇面板
privateJPanel
snakePanel
速度标签
privateJLabel
speedLabel
蛇类对象
privateSnake
snake
菜单条
privateJMenuBar
bar
游戏菜单
JMenu
gameMenu
帮助菜单
JMenu
helpMenu
速度菜单
JMenu
speedMenu
新菜单项
JMenultem
newltem
暂停菜单项
JMenultem
pauseltem
关于菜单项
JMenultem
aboutltem
慢菜单项
JMenultem
slowltem
中间菜单项
JMenultem
midItem
快菜单项
JMenultem
fastltem
开始菜单项
JMenultem
startitem
帮助菜单项
JMenultem
helpitem
(2)方法见表3
表3主要方法
方法名
功能
SnakePanel()
创建蛇的面板
addKeyListener
监视器
setBounds()
设置尺寸
JLabel()
设置标签
JMenu()
创建菜单
JMenultem
构造菜单项
3.类Snake
(1)成员变量见表4表4主要成员变量
成员变量描述
变量类型
名称
是否运动
boolean
isRun
蛇体
ArrayList
Body
食物
Node
Food
方向
int
Derection
分数
int
Score
状态
int
Status
速度
int
Speed
慢
publicstaticfinalint
SLOW
中
publicstaticfinalint
MID
快
publicstaticfinalint
FAST
运动中
publicstaticfinalint
RUNNING
已暂停
publicstaticfinalint
PAUSED
游戏结束
publicstaticfinalint
GAMEOVER
左
publicstaticfinalint
LEFT
上
publicstaticfinalint
UP
右
publicstaticfinalint
RIGHT
下
publicstaticfinalint
DOWN
(2)方法见表5表5主要方法
方法名
功能
isEaten()
isCollsion()makeFood()changeDerection(intnewDer)
move()
判断食物是否被蛇吃掉,如果食物在蛇运行方向的正前方,并且与蛇头接触,则被吃掉
判断是否碰撞
在随机的地方产生食物
改变运行方向
蛇在运行中所米取的措施
4.类Node
(1)成员变量见表6
表6主要成员变量
成员变量描
述
变量类型
名称
食物块宽
publicstaticfinalint
W
食物块高
publicstaticfinalint
H
横坐标
int
x
纵坐标
int
y
(2)源代码见文件SnakeGame.java
5.类SnakePanel
此类为画蛇的面板类,是实现画蛇身算法的类。
源代码:
publicclassSnakePanelextendsJPanel{
Snakesnake;
publicSnakePanel(Snakesnake){
this.snake=snake;
this.setBackground(Color.WHITE);
}
publicvoidpaintComponent(Graphicsg){super.paintComponent(g);
Nodenode=null;
g.setColor(Color.BLACK);//蛇的颜色
for(inti=0;i<;i++){node=;g.fillRect(node.x,node.y,Node.H,Node.W);//填充指定的矩
形,也就是画出
}//一个蛇的节点node=snake.food;
g.setColor(Color.BLUE);//食物的颜色g.fillRect(node.x,node.y,node.H,node.W);
}
}
6.类StatusRunnable此类为线程的子类,实现记录状态的功能。
源代码:
import;
publicclassStatusRunnableimplementsRunnable{
privateJLabelscoreLabel;
privateJLabelstatusLabel;
privateSnakesnake;
publicStatusRunnable(Snakesnake,JLabelstatusLabel,JLabelscoreLabel){
this.statusLabel=statusLabel;
this.scoreLabel=scoreLabel;this.snake=snake;
}
publicvoidrun(){
Stringsta="";
while(true){switch(snake.status){caseSnake.RUNNING:
sta="运行";break;caseSnake.PAUSED:
sta="暂停";
break;
caseSnake.GAMEOVER:
sta="死了";break;
}statusLabel.setText(sta);scoreLabel.setText(""+snake.score);try{
Thread.sleep(100);
}catch(Exceptione){}
}
}
}
7.类SnakeRunnable此类为线程的子类,实现蛇运动以及记录分数的功能源代码:
import;
publicclassSnakeRunnableimplementsRunnable{
privateComponentcomponent;
privateSnakesnake;
publicSnakeRunnable(Snakesnake,Componentcomponent){this.snake=snake;
ponent=component;
}
@Overridepublicvoidrun(){while(true){try{snake.move();component.repaint();
Thread.sleep(snake.speed);
}catch(Exceptione){}
}
}
2.3、程序中所用类说明
1.SnakeGame:
该类为程序入口,含有main方法。
2.SnakeFrame:
该类实现菜单控制运行等总体要求,实现方向键控制蛇的方向,空格键控制游戏的暂停与继续,还有分数等,在菜单里还有制作人信息等。
3.Snake:
该类包含实现具体蛇的结构和蛇的具体运动,例如随机产生食物,判断失误是否被吃掉,蛇身增长等等。
4.Node:
该类为实现蛇身的组成单位以及单个食物的模板。
5.SnakePanel:
实现画板功能,将蛇与状态显示画在框架之内。
6.StatusRunnable:
记录蛇状态的线程。
7.SnakeRunnable:
该类为蛇运动及记录分数的线程
五、结果测试
1、运行环境
(1).操作系统:
Windowsxp、Windows2007等
(2).应用软件:
jdk1.6
开发工具:
Java开发工具Eclipse是许多Java初使用者的开发环境。
Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。
本游戏开发用的是Eclipse。
2、运行结果
运行结果符合预期:
游戏开始界面:
游戏运行界面:
游戏结束界面:
选择“是”,则分数清零,蛇身变短,状态转为暂停状态,空格键开始新的轮游戏。
训责“否”,则退出程序。