软件技术毕业设计(
论文
政研论文下载论文大学下载论文大学下载关于长拳的论文浙大论文封面下载
)-J2ME贪吃蛇游戏制作(含源程序)
需源程序联系QQ153893706
毕业设计总结
贪吃蛇游戏制作
院 (系) 信息工程与艺术设计系
专 业 软件技术
学生姓名
学生学号
指导教师
提交时间 2011年12月2日
1
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
目 录
目 录 ........................................................................ 2 摘 要 ........................................................................ 3 引 言 ......................................................................... 4 第一章需求分析 ................................................................ 4
1.1游戏开发的可行性 ....................................................... 4
1.2设计目的 ............................................................... 4
1.3游戏需求 ............................................................... 4 第二章J2ME贪吃蛇项目
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
与分析 ............................................... 5
2.1游戏说明 ............................................................... 5
2.2游戏分析 ............................................................... 5
2.3具体实现代码详细介绍: ................................................. 7
2.4游戏控制界面实现代码 ................................................... 9
2.5下一关实现代码 ........................................................ 16
2.6测试结果 .............................................................. 21 第三章自我
评价
LEC评价法下载LEC评价法下载评价量规免费下载学院评价表文档下载学院评价表文档下载
............................................................... 21 第四章总结 ................................................................... 22 致谢 ......................................................................... 22 主要参考文献 ................................................................. 23
第2 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
摘 要
随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。
贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。
虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。
本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的开始、退出等功能,分为:游戏主界面模块、游戏控制模块两个模块。
游戏主界面模块:
主要包括游戏初始界面、游戏开始按钮、退出按钮。
游戏控制模块:
主要完成游戏的开始、退出等功能。
关键词:贪吃蛇;小游戏;J2ME;
第3 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
引 言
随着科技的发展,现在手机的功能已不仅仅是简单的打接电话、收发短信了。更多的手机用户希望在工作、学习之余通过方便灵巧可随身携带的仪器休闲娱乐。因此,为了迎合众多用户的需求并适应现在手机的规模,我们开发出一套适合各阶层人士的具有很强的娱乐性和交互性的贪吃蛇小游戏。
贪吃蛇,之所以取这样的名字,去用意还是很明显的.贪吃蛇其实并不贪,它是人不断向前追求的象征.就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。
虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手.随着游戏速度不断加快,其刺激性也更强。可以说该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行。对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的。这样的小游戏刚好迎合了他们的需求。
第一章需求分析
1.1游戏开发的可行性
游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。
1.2设计目的
综合运用在校期间所学理论知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力。 1.3游戏需求
给出1条小蛇和随机出1个食物当小蛇吃到食物时就加分。
第4 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
第二章J2ME贪吃蛇项目说明与分析
2.1游戏说明
* 运行环境:手机移动平台,经过实验多种型号手机都可以运行。当然前提下是手机要支持JAVA功能才行。
* 本游戏支持RMS持久化数据库存,可以保存游戏计分,关数,速度。
* 用户可以自行设置游戏速度,游戏关数。
* 想在手机上运行,可以通过多种方式,将文件传送到手机中,当然最普通的方式就是通过USB连接将数据传送到手机上。由于我把项目的所有源代码都发布了,传送时只需要将项目文件当中.jar和.jad传进去。有的手机,可能不需要那个.jad的文件,这两个文件在项目当中的dist目录下。不需要将其他的文件发送到手机上去。
2.2游戏分析
首先分析此游戏,我们先来看一下贪吃蛇初始界面。
第5 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
图一初始界面
图二 游戏运行过程中截图
第6 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
图三 本局积分游戏界面
2.3具体实现代码详细介绍:
import java.io.IOException;
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Image; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException;
public class SnakeMIDlet extends MIDlet {
public Display display;//显示的对象
public GameCtrl game;
public SnakeMIDlet() {
第7 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
super();
// TODO Auto-generated constructor stub
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// TODO Auto-generated method stub
}
protected void pauseApp() {
// TODO Auto-generated method stub
}
protected void startApp() throws MIDletStateChangeException {
// 获得Display
display = Display.getDisplay(this);
// 获得Displayable
Displayable current = display.getCurrent();
if (current == null) {
// 装载logo图象
Image logo = null;
try
{
logo = Image.createImage("/logo.png");
}
catch (IOException e) { }
// 显示logo
第8 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
Alert splashScreen = new Alert(null, "山东劳动职业技术学院软件技术
班————郑珍珍", logo, AlertType.INFO);
// 延迟4秒
splashScreen.setTimeout(2000);
//新建ChooseDemo对象
game = new GameCtrl(this);
// 显示闪屏界面
display.setCurrent(splashScreen, game);
}
else
{
// 显示当前界面
display.setCurrent(current);
}
// TODO Auto-generated method stub
}
public void quit() throws MIDletStateChangeException {
// 退出程序
destroyApp(false);
notifyDestroyed();
}
}
2.4游戏控制界面实现代码
import java.util.Timer;
第9 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
import javax.microedition.lcdui.Alert; import javax.microedition.lcdui.AlertType; import javax.microedition.lcdui.Canvas; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Graphics; import javax.microedition.lcdui.Image; import javax.microedition.midlet.MIDletStateChangeException;
public class GameCtrl extends Canvas implements CommandListener{
private final Command startCommand;
private final Command quitCommand;
private final SnakeMIDlet midlet;
private Graphics graph;
private Timer timer = new Timer();
private NextFrame nextFrame;
// 游戏结束标志
public boolean isGameOver = false;
// 游戏开始标志
public boolean isGameRun = false;
// 游戏积分
public int score = 0;
// 屏幕尺寸
public int width = 0;
public int height = 0;
第10 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
// 食物位置
public int foodX = 0;
public int foodY = 0;
// 蛇身位置
public int[] snakeX = {10, 14, 18, 22, 26, 30, 34, 38, 42, 46, 50 ,54, 58,
62, 66, 70, 74, 78, 82, 86};
public int[] snakeY = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10};
// 运动方向 [0,1,2,3——上,下,左,右]
public int direction = 0;
// 食物图象
public Image foodImage = null;
/**
*
*/
public GameCtrl(SnakeMIDlet midlet) {
super();
// 保存MIDlet类对象
this.midlet = midlet;
// 得到屏幕尺寸
width = getWidth();
height = getHeight();
// 设置食物位置
foodX = width / 2;
第11 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
foodY = height / 2;
try {
// 装载食物图象
foodImage = Image.createImage("/food.png");
}catch(Exception e) {}
// 添加命令按键
quitCommand = new Command("退出", Command.EXIT, 2);
addCommand(quitCommand);
startCommand = new Command("开始", Command.OK, 1);
addCommand(startCommand);
// 侦听按键响应
setCommandListener(this);
}
protected void paint(Graphics g) {
graph = g;
if (isGameOver == true && isGameRun == true){
isGameRun = false;
// 显示logo
Alert result = new Alert("本局积分", String.valueOf(score), null,
AlertType.INFO);
// 延迟4秒
result.setTimeout(2000);
// 显示闪屏界面
midlet.display.setCurrent(result, this);
第12 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
return;
}
if (isGameRun == true){
// 白色清空画布
graph.setColor(255, 255, 255);
graph.fillRect(0, 0, width, height);
// 绘制食物
g.drawImage(foodImage, foodX, foodY, Graphics.HCENTER |
Graphics.VCENTER);
// 绘制蛇身
graph.setColor(0, 0, 255);
for (int i = 0; i < 19; i++){
graph.drawLine(snakeX[i], snakeY[i], snakeX[i + 1], snakeY[i +
1]);
}
}
}
public void commandAction(Command arg0, Displayable arg1) {
if (arg0 == startCommand){
// 用户开始游戏
initialize();
}
if (arg0 == quitCommand){
if (isGameRun == true){
// 结束游戏
isGameOver = true;
第13 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
isGameRun = false;
// 关闭定时器
nextFrame.cancel();
}
// 用户退出游戏
try{
midlet.quit();
}
catch(MIDletStateChangeException e){}
}
}
private void initialize() {
// 初始化数据
score = 0;
// 白色清空画布
graph.setColor(255, 255, 255);
graph.fillRect(0, 0, width, height);
// 开启定时器
nextFrame = new NextFrame(this);
timer.schedule(nextFrame, 300, 300);
// 重绘屏幕
isGameOver = false;
isGameRun = true;
repaint();
}
第14 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
protected void keyPressed(int keyCode) {
// 游戏结束后不处理按键
if (isGameOver == true)
return;
// 得到按键动作
int gameAction = getGameAction(keyCode);
switch (gameAction) {
case UP:
direction = 0;
break;
case DOWN:
direction = 1;
break;
case LEFT:
direction = 2;
break;
case RIGHT:
direction = 3;
break;
default:
break;
}
// 重绘屏幕
repaint();
}
}
第15 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
2.5下一关实现代码
import java.util.Random;
import java.util.TimerTask;
public class NextFrame extends TimerTask {
private GameCtrl gameCtrl;
private Random rand = new Random();
// 每局时长
public long tickcount = 0;
// 食物最大停留时间
private long foodtime = 25;
// 食物图像的宽度高度
private int foodwidth = 0;
private int foodheight = 0;
/**
*
*/
public NextFrame(GameCtrl gameCtrl) {
super();
this.gameCtrl = gameCtrl;
foodwidth = gameCtrl.foodImage.getWidth();
foodheight = gameCtrl.foodImage.getHeight();
}
第16 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
/* (非 Javadoc)
* @see java.lang.Runnable#run()
*/
public void run() {
// 食物位置调整
foodtime--;
if (foodtime == 0){
foodtime = 25;
getNextPos();
}
// 移动蛇身
switch(gameCtrl.direction){
case 0:
// 蛇身位置处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX[i] = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY[i] = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeY[0] > 3){
gameCtrl.snakeY[0] -= 4;
}else{
if (gameCtrl.snakeX[0] > gameCtrl.width / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 2;
gameCtrl.snakeX[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 3;
第17 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
gameCtrl.snakeX[0] += 4;
}
}
break;
case 1:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX[i] = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY[i] = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeY[0] < gameCtrl.height - 5){
gameCtrl.snakeY[0] += 4;
}else{
if (gameCtrl.snakeX[0] > gameCtrl.width / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 2;
gameCtrl.snakeX[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 3;
gameCtrl.snakeX[0] += 4;
}
}
break;
case 2:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX[i] = gameCtrl.snakeX[i - 1];
第18 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
gameCtrl.snakeY[i] = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeX[0] > 3){
gameCtrl.snakeX[0] -= 4;
}else{
if (gameCtrl.snakeY[0] > gameCtrl.height / 2){
// 如果已到屏幕上界则左移
gameCtrl.direction = 0;
gameCtrl.snakeY[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 1;
gameCtrl.snakeY[0] += 4;
}
}
break;
case 3:
// 蛇身处理
for (int i = 19; i > 0 ; i--){
gameCtrl.snakeX[i] = gameCtrl.snakeX[i - 1];
gameCtrl.snakeY[i] = gameCtrl.snakeY[i - 1];
}
// 蛇头处理
if (gameCtrl.snakeX[0] < gameCtrl.width - 5){
gameCtrl.snakeX[0] += 4;
}else{
if (gameCtrl.snakeY[0] > gameCtrl.height / 2){
第19 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
// 如果已到屏幕上界则左移
gameCtrl.direction = 0;
gameCtrl.snakeY[0] -= 4;
}else{
// 如果已到屏幕上界则右移
gameCtrl.direction = 1;
gameCtrl.snakeY[0] += 4;
}
}
break;
}
// 碰撞检测
if (gameCtrl.snakeX[0] > gameCtrl.foodX - foodwidth / 2 &&
gameCtrl.snakeX[0] < gameCtrl.foodX + foodwidth / 2 &&
gameCtrl.snakeY[0] > gameCtrl.foodY - foodheight / 2 &&
gameCtrl.snakeY[0] < gameCtrl.foodY + foodheight / 2){
// 计分
gameCtrl.score += 10;
// 生成新的食物位置
getNextPos();
}
// 计时
tickcount++;
if (tickcount == 300)
gameCtrl.isGameOver = true;
第20 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
// 重绘画面
gameCtrl.repaint();
}
public void getNextPos(){
// 在屏幕内随机设置位置
int x = (int)(rand.nextLong());
gameCtrl.foodX = (int)(x % gameCtrl.width);
int y = (int)(rand.nextLong());
gameCtrl.foodY = (int)(y % gameCtrl.height);
// 使图像限定在屏幕内
if (gameCtrl.foodX < foodwidth / 2)
gameCtrl.foodX = foodwidth / 2;
if (gameCtrl.foodX > gameCtrl.width - foodwidth / 2)
gameCtrl.foodX = gameCtrl.width - foodwidth / 2;
if (gameCtrl.foodY < foodheight / 2)
gameCtrl.foodY = foodheight / 2;
if (gameCtrl.foodY > gameCtrl.height - foodheight / 2)
gameCtrl.foodY = gameCtrl.height - foodheight / 2;
}
}
2.6测试结果
游戏运行状况良好,未发现bug。
第三章自我评价
先是不太清楚图形化界面的设计,后来在同学的帮助和自己的查找下解决了这个问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
。 后来在蛇的移动的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示上也不太清楚,找了一些资料后发现蛇身由一串基本图形构成,
第21 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
每过一秒,检测前面是什么,如果是空的,那么把头画成普通身体的样子,再在前方(或侧面,如果转弯的话)再画一个头,并将其坐标记入数组,数组要足够大,再把尾巴画成背景色;如果前面是食物,尾巴就不删除,这里的难点是数组里的操作和坐标的表示:把头添在最后一个元素,把第一个元素提取(也就是尾巴)。
最后在排行榜和存档的读取问题上遇到了困难,在同学的帮助下解决了这个难题。
第四章总结
这次Java课程设计让我重新认识到了编程的艺术,在学习、使用Java的过程中,通过与以前所学的C/C++内容的对比,让我进一步巩固了C/C++的知识,并更进一步在总体上让我对编程语言有了更新的认识。在不断的设计、调试、修改的过程当中,我对程序的设计与构架在整体上有了长足的进步。
在做Java课程设计以前,我对Java游戏开发只是停留在理论知识的水平上,是“纸上谈兵”,缺乏实际的软件开发经验。这次通过做Java课程设计,我完成了贪吃蛇游戏的软件开发任务。在整个开发过程中遇到了很多问题,如蛇的移动的表示、排行榜和存档的读取问题、屏幕太闪烁的问题、图形化界面的设计问题,但最终都被我一一解决,对其中比较主要的几点体会总结如下。
第一,完成了从局部到整体从细节到大局的转变。设计过程中,经常会遇到困难,我学会通过反复思考和测试,然后找出自己的错误并加以改正,再进行下一个步骤。这个程序就是在这样反复过程序中一点一点的完成的。完成之后再来优化整个程序。
第二,做课设是一个不断学习新鲜事物的过程,从设计初的不懂到最后能够顺利完成,我体会到在实践中学习的重要性,这对于将来我走上工作岗位具有重要意义。
第三,通过课设使我对Java这门课程有了一定的了解,也对我今后的就业之路打下了一定的基础。
致谢
经过一个月的不断努力,课设内容已经基本上完成了。回顾这个设计过程,我学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩展了本专业的知识面,使我受益非浅,同时也体验到了搞软件开发的困难度。在这次设计的同时,我又从中学到了许多东西。但由于我对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,界面的设计及整体的布局还比较简单,没有突出特色
第22 页 共23 页
山东劳动职业技术学院信息工程与艺术设计系毕业设计总结
出来,这也可能是我这个系统的不足之处,在这里也恳请各位老师能够对我的作品指明不足并加以改正。
总之,在这一次的课设过程中,我查阅了大量的资料,对Java有了一点初步的认识,对于软件工程这些辅助性的教材也巩固了不少,为我这次的课设提供了很大的帮助,锻炼了我的能力让我掌握了一门新的程序设计语言:Java语言,系统地学习了数据库方面的知识,并更进一步提高了我在程序设计、调试方面的技巧。更重要的是,它还让我认识到了自己的不足,在编程方面,我仅仅是刚刚入门而已,以后的道路任重道远,需要我不断的丰富自己、充实自己,这样才能在程序设计方面有所收获。
主要参考文献
[1]孙淑敏.java2游戏开发北京[M].北京:清华大学出版社.2005
[2]张小玮.J2ME无线应用开发 [M]. 北京:清华大学出版社.2005 [3]张白一.面向对象程序设计java[M].西安:西安电子科技大学出版社.2002.8 [4]史斌星.java基础编程贯通教材 [M]. 北京:清华大学出版社.2005
第23 页 共23 页