admin管理员组文章数量:1532174
2024年1月13日发(作者:)
《计算机项目实践(1)》课程设计
说 明 书
设计题目: 手机贪吃蛇游戏开发
班 级:
学 号:
姓 名:
指导教师:
完成日期: 2010-1-14
word资料
目 录
一、需求分析 ................................................ 3
1.1 概述 ................................................. 3
1.2 技术原理 ............................................. 3
二、模块功能说明(概要设计) ................................ 3
三、详细设计 ................................................ 4
3.1 系统设计 ............................................. 4
3.2 功能实现 ............................................. 4
四、任务进度表 .............................................. 9
五、测试结果 ................................................ 9
六、设计小结 ............................................... 10
七、用户使用说明 ........................................... 10
参考文献................................................... 10
word资料
一、需求分析
1.1 概述
随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注,这次的项目就是用J2ME开发的贪吃蛇游戏的应用程序,设计一个基于Java语言的游戏程序,使它能在手机模拟器上运行经典的贪吃蛇游戏。它的主要功能有:游戏规则的实现,积分计算,界面功能。
1.2 技术原理
J2ME游戏开发技术是支持像小型嵌入式设备或移动设备而制定的一系列的技术和规的总称,它是JAVA语言的一个分支,遵循JAVA 的规则,是一个运行平台,特别适用于手机用户的游戏开发。
本项目的贪吃蛇游戏就是基于J2ME游戏技术开发的。本次实训开发工具为Eclipse,使用JAVA 功能,支持RMS持久化数据库,可以保存游戏的积分,等级,速度等。用户也可以自行设置游戏的一些规则。其技术原理涉及MIDP简表:针对移动信息处理设备(主要指智能手机和一部分具有无线通信功能的PDA)的图形界面、输入和时间处理、持久性存储、无线。MIDP的总体框架:MID硬件层、本地系统软件层、KVM层、CLDC层、MIDP层。其中还涉及到MIDP2.0的新特性,MIDP的安全机制等。
二、模块功能说明(概要设计)
模块一:欢迎界面及游戏选择界面。
模块二:用户界面的编写和游戏元素的功能。
模块三:蛇的移动。
模块四:蛇吃掉一个目标并积分。
模块五:游戏规则的设定和实现。
word资料
模块六:游戏汇总和积分计算。
三、详细设计
3.1 系统设计
类:Int foodX Int foodY int foodC;
类:Int[] Snake int snakeNum;
3. GameObj类:int SNAKE_W int SNAKE_H
4. SnakeCanvas类:int direction
3.2 功能实现:
1、 游戏初始化:
其实现的功能是初始化游戏的数据,实现该功能首先需要清晰的知道需要初始化那些数据,如何进行初始化。将贪吃蛇基本初始化在屏幕的中央,初始移动方向和贪吃蛇节点的排列顺序一致,食物的坐标固定位置。
游戏初始化的代码如下:
/**初始化开始数据*/ private void init() {
// 初始化节点数量 snakeNum = 7;
// 初始化节点数据 for (int i = 0; i < snakeNum;
i++) {
snake[i][0] = 100 - SNAKEWIDTH * i;
snake[i][1] = 40; }
// 初始化移动方向 direction = DIRECTION_RIGHT;
// 初始化食物坐标 foodX = 100; foodY = 100;
isPaused = false; //初始化暂停 }
如图所示:
2、 贪吃蛇的移动:
实现贪吃蛇移动的代码如下: /**贪吃蛇移动*/
word资料
private void move() { // 蛇身移动
for (int i = snakeNum; i > 0; i--) {
snake[i][0] = snake[i - 1][0];
snake[i][1] = snake[i - 1][1]; }
// 第一个单元格移动
switch (direction) {
case DIRECTION_UP:
snake[0][1] = snake[0][1] - SNAKEWIDTH;
break;
case DIRECTION_DOWN:
snake[0][1] = snake[0][1] + SNAKEWIDTH;
break;
case DIRECTION_LEFT:
snake[0][0] = snake[0][0] - SNAKEWIDTH;
break;
case DIRECTION_RIGHT:
snake[0][0] = snake[0][0] + SNAKEWIDTH;
break; } }
如图所示:
3、 贪吃蛇方向控制:
贪吃蛇方向的控制需要根据玩家的按键来改变蛇的方向,根据J2ME技术中事件处理的编程方式,实现的代码如下:
/**事件处理*/
public void keyPressed(int keyCode) {
int action = eAction(keyCode);
switch (action) { case UP:
if (direction != DIRECTION_DOWN) {
direction = DIRECTION_UP; } break;
case DOWN: if (direction != DIRECTION_UP) {
direction = DIRECTION_DOWN; }
break;
case LEFT: if (direction != DIRECTION_RIGHT) {
direction = DIRECTION_LEFT; }
word资料
break;
case RIGHT: if (direction != DIRECTION_LEFT) {
direction = DIRECTION_RIGHT; }
reak; }
}
4、 贪吃蛇和食物的碰撞和处理:
则本规则的实现代码如下: /**吃掉食物,自身增长*/
private void eatFood() { // 判别蛇头是否和食物重叠
if (snake[0][0] == foodX && snake[0][1] == foodY) {
snakeNum++;
generateFood(); } }
5、 食物坐标的随机生成:
需要实现如下要求:
a、 坐标位于屏幕以
b、 坐标不能和贪吃蛇任何一个节点重合
c、 坐标必须是贪吃蛇节点宽度的整数倍(该要求和贪吃蛇的碰撞检测算法匹配)。
按照以上逻辑实现的程序代码如下: /**产生食物*/
private void generateFood() {
while (true) { //屏幕围,且是蛇身宽度的整数倍
foodX = (t() % (width - SNAKEWIDTH + 1))
/ SNAKEWIDTH * SNAKEWIDTH;
foodY = (t() % (height - SNAKEWIDTH +
1))
/ SNAKEWIDTH * SNAKEWIDTH;
//判断是否和蛇节点重叠
boolean b = true;
for (int i = 0; i < snakeNum; i++) {
word资料
if (foodX == snake[i][0] && snake[i][1]
== foodY){
b = false;
break; }
}
if (b) {
break; } } }
6、 游戏结束的判别:
游戏结束的规则主要有两个:
a、 贪吃蛇超出游戏区域
b、 贪吃蛇自身的节点之间存在重叠
代码如下所示:
/**判断下一步是否超出屏幕而越界,或者碰到自身,游戏结束*/
if(isGameOver()){
isShow = false;
isExit = true;
return;
}
/**蛇身移动过程*/
for(int i = snakeNum - 1;i > 0;i--){
snake[i*3+0] = snake[(i-1)*3+0];
snake[i*3+1] = snake[(i-1)*3+1];
}
//第一个单元格移动
stepX = 0;
stepY = 0;
switch(direction){
case DIR_UP:
stepY = -SNAKE_H;
break;
case DIR_DOWN:
stepY = SNAKE_H;
break;
case DIR_LEFT:
stepX = -SNAKE_W;
break;
case DIR_RIGHT:
stepX = SNAKE_W;
break;
}
snake[0*3+0] += stepX;
snake[0*3+1] += stepY;
}
word资料
然后在程序中利用该方法的返回值,控制游戏中界面的切换等,从而实现游戏结束的功能。
7、 游戏暂停的控制
在程序中这样来实现暂停,使用变量isPaused的值来控制线程逻辑和事件处理,当按下暂停键时设置该变量为true,当按下继续键时设置该变量为false。实现的代码如下:
/**事件处理*/
public void keyPressed(int keyCode) {
if(keyCode == -6){ //左软键 isPaused
= !isPaused; }
if(keyCode == -7){ //右软键
p(); }
if(isPaused){ //如果暂停则不能控制移动方向
return; } }
代码如下:
/**线程方法 使用精确延时*/
public void run() {
try {
while (isRun) {
// 开始时间
long start = tTimeMillis();
if (!isPaused) { //如果不暂停 eatFood(); // 吃食物 move();
// 移动
if (isGameOver()) { // 结束游戏 break;
b = !b; // 控制闪烁 } repaint(); // 重新绘制 }
long end = tTimeMillis();
if (end - start < SLEEP_TIME) { // 延时
(SLEEP_TIME - (end - start)); } }
} catch (Exception e) {}
}
word资料
四、任务进度表
日期
计划任务
完成任务
完成
缺陷报告
无 2009年12月30开发环境安装配日2010年1月2置,系统需求分析
日
1月3到1月6日 用户界面设置及相关
1月7日到1月10实现蛇的运动和食日 物的事件
1月11日到12号 实现方向控制,事件处理
1月13日到14号 游戏操作控制的设置,界面的设置
1月15日 说明书的撰写
完成 无
完成 无
完成 无
完成 无
完成 无
五、测试结果
测试容
游戏初始化
贪吃蛇方向控制
表5.1 系统测试结果
预期结果 实际结果
实现初始化
实现控制
实现
实现
评价
完成很好
完成良好
word资料
贪吃蛇和食物的碰撞处理
游戏结束的判别
游戏暂停的控制
能正常实现
能正确判别
能无误控制
实现
实现
实现
完成很好
完成很好
完成良好
六、设计小结
经过两周的程序综合实训,我们对ECLIPSE这个开发软件有了更深一步的了解,对J2ME的认识也有所提高。本次JAVA贪吃蛇游戏设计意义深重,对于巩固JAVA知识的运用和实践的推广起到重要的意义。虽然在游戏的开发过程中,我遇到了许多的问题和错误,但是面对这些,我还是想尽一切办法去解决,或是上网找资料,或者请教同学互相讨论一番。经过种种的曲折,现在一个比较完善的贪吃蛇游戏总算完成了,我这两周的所付出的努力和心血总算没有白费。
JAVA程序编程时实践性很强的一门计算机课程。其目的是使我们能够巩固所学的J2ME语言知识,增进J2ME语言编程的的理解。通过这次实训,我学会了用J2ME进行手机游戏的简单编写,让我更好的了解了相应的专业知识和技能,更加明白理论和实践相结合的重要意义。其实,J2ME并不是那么难的,只要用心,打好基础,把它掌握好还不会是问题的。
希望在以后能对J2ME 有更好的了解!
七、用户使用说明
首先但运行游戏代码时,则会出现一个用户界面,上面会提示你按屏幕右下角的菜单键就会进入游戏,左边则是退出游戏。点击menu后,又会显示游戏界面,上面会有“帮助说明“,”返回“,”难度选择“,”新游戏“等按键。
1. 点击“开始游戏“时,则会出现贪吃蛇的游戏,按上下左右就可以移动蛇去吃食物了。
2. 点击“帮助说明“时,则会显示如何使用该游戏。以及一些游戏的规则。
3. 点击“难度选择“时,则又会出现选择”初级“,”中级“,”高级“的选项按钮,这个可以根据用户自己的水平或爱好来选择相应的游戏困难度。
4. 点击“返回“时,则会层层返回上一页。
5. 点击“新游戏“的按钮时,则会重新开始新的贪吃蛇游戏!
word资料
参考文献
1. 王克宏 著. Java技术教程(基础篇). :高等教育,2002.04
2. 燕 主编. Java入门与实例教程. :,2003.01
3. 叶核亚,立著. Java2程序设计使用教程. :电子工业,2003.5
4. Harvey , Paul 著. Java How to Program . 工业,2002.01
word资料
版权声明:本文标题:手机贪吃蛇游戏的开发 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1705110523a123528.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论