C集中上机.docx

上传人:b****6 文档编号:7781216 上传时间:2023-01-26 格式:DOCX 页数:8 大小:23.41KB
下载 相关 举报
C集中上机.docx_第1页
第1页 / 共8页
C集中上机.docx_第2页
第2页 / 共8页
C集中上机.docx_第3页
第3页 / 共8页
C集中上机.docx_第4页
第4页 / 共8页
C集中上机.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

C集中上机.docx

《C集中上机.docx》由会员分享,可在线阅读,更多相关《C集中上机.docx(8页珍藏版)》请在冰豆网上搜索。

C集中上机.docx

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、运行结果

运行结果符合预期:

游戏开始界面:

游戏运行界面:

游戏结束界面:

选择“是”,则分数清零,蛇身变短,状态转为暂停状态,空格键开始新的轮游戏。

训责“否”,则退出程序。

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

当前位置:首页 > 高等教育 > 理学

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

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