j2me课程设计.docx
《j2me课程设计.docx》由会员分享,可在线阅读,更多相关《j2me课程设计.docx(25页珍藏版)》请在冰豆网上搜索。
![j2me课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/24/568bdfaa-cf5a-465d-ad4c-421bcd96b11f/568bdfaa-cf5a-465d-ad4c-421bcd96b11f1.gif)
j2me课程设计
枣庄学院
信息科学与工程学院
课程设计任务书
题目:
小游戏程序程序开发
学号:
201012220241
姓名:
赵文正
专业:
计算机应用技术
课程:
J2ME应用技术开发
指导教师:
刘梦琳职称:
讲师
完成时间:
2012年5月----2012年6月
枣庄学院信息科学与工程学院制
课程设计任务书及成绩评定
课程设计的任务和具体要求
任务:
1、利用本学期所学的知识,设计并开发出一个手机游戏或手机应用小系统。
手机游戏类例如:
贪吃蛇游戏、挖雷游戏、五子棋游戏等;应用小系统类,例如:
手机短信的收发、通讯录系统等。
2、要求界面美观、功能较齐全;
设计要求:
1、开始显示初始化游戏界面,请稍后正在加载。
2、进入游戏列表,请选择你要玩的游戏,选择好进入游戏。
3、开始玩游戏,进行小游戏运行
指导教师签字:
、日期:
指导教师评语
成绩:
指导教师签字:
日期:
课程设计所需软件、硬件等
硬件:
计算机、打印机
软件:
KVMEcipse、WTK2.5.2JavaME
课程设计进度计划
起至日期
工作内容
备注
2012/5/1—2012/5/15
2012/5/15—2012/6/1
2012/6/1—2012/6/15
确定程序
编写代码
撰写设计书
参考文献、资料索引
序号
文献、资料名称
编著者
出版单位
1、《基于Eclipse环境的J2ME应用程序开发》万辉王军@编著清华大学出版社
2、《J2ME应用教程》陈旭东,徐保民@编著.清华大学出版社
3、《J2ME移动设备程序设计》胡虚怀李换@编著.清华大学出版社.
4、《J2ME开发精讲》詹建飞@编著.电子工业出版社.
5、《J2ME技术开发与应用》李研刘晶晶@编著.机械工业出版社.
摘要
J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。
它有一些非常重要的特征对所有组织都有益。
因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。
本设计通过Alert和Gauge设计的进度条,进行加载游戏等待。
通过用List设计一个游戏列表,进行选择游戏。
上面的Alert、Form(Gauge)和List是Screen高级编程的代表,看出Screen都是全屏显示的,对屏幕的显示设计是离不开的。
通过Canvas或gameCanvas才能画到屏幕上,通过他们以及各种类库来进行设计贪吃蛇和扫雷游戏,最后编程实现了全过程。
本游戏如我们手机上的小游戏差不多,比较人性化的,合理的设计,由于本人能力有限时间有限只能做的这样,希望大家好好看看,通过本次实验设计可以吧高级编程和低级编程都进行系统的掌握一下。
关键词:
J2ME面向对象CanvasgameCanvasAlertListGauge
目录
1、设计内容3
2、设计过程3
2.1设计方案的论证3
2.2、界面设计3
3、设计内容6
3.1程序代码6
3.1.1MIDlet主程序代码(gameCanvas)6
3.1.3扫雷游戏代码(MineCanvas)同贪吃蛇类似16
4、实现结果16
4.1游戏加载框16
4.2游戏选择框17
4.3贪吃蛇游戏18
4.4扫雷游戏19
5、实验小结19
1、设计内容
本设计是从设计界面开始的,从游戏的加载,在进入游戏的选择列表,你想玩那个游戏就玩那个游戏,给人们提供方便,贪吃蛇和扫雷是个老幼皆宜的小游戏,贪吃蛇游戏是用户根据键盘的四个方向键控制翻向上、向左、向右和向下操作,(控制键的实现是由键盘的方向键的消息函数实现)遇到食物就进行加长蛇身,就这样不断的加长。
扫雷吧就是先设计个方格框有插旗、有数字、有雷,雷的出现是随机的。
2、设计过程
2.1设计方案的论证
J2ME语言继承了JAVA语言易学易用的特点,特别适合于初学者学系统编程。
随着21世纪信息社会的到来,计算机在人们的工作和生活中的深入,要求我们越来越多地与计算机打交道,为了使用户在繁忙的日程工作中得到放松,于是出现了各种各样的休闲软件,如聊天工具,游戏等等。
通过这学期来J2ME课程的学习,我初步掌握了J2ME语言的最基本的知识,于是老师的指导下动手用J2ME编写小游戏(贪吃蛇和扫雷)。
游戏是用来给大家娱乐的,所以要能在使用的过程中给大家带来快乐,消除大家的疲劳,激发大家的娱乐激情。
从本游戏的从设计界面出发,主要就是本设计是从设计界面开始的,从游戏的加载,在进入游戏的选择列表,你想玩那个游戏就玩那个游戏,给人们提供方便,贪吃蛇和扫雷是个老幼皆宜的小游戏,贪吃蛇游戏是用户根据键盘的四个方向键控制翻向上、向左、向右和向下操作,(控制键的实现是由键盘的方向键的消息函数实现)遇到食物就进行加长蛇身,就这样不断的加长。
扫雷吧就是先设计个方格框有插旗、有数字、有雷,雷的出现是随机的。
2.2、界面设计
如图1(代码流程):
如图2(界面流程图):
3、设计内容
3.1程序代码
3.1.1MIDlet主程序代码(gameCanvas)
importjavax.microedition.lcdui.Alert;
importjavax.microedition.lcdui.AlertType;
importjavax.microedition.lcdui.Choice;
importjavax.microedition.lcdui.Command;
importjavax.microedition.lcdui.CommandListener;
importjavax.microedition.lcdui.Display;
importjavax.microedition.lcdui.Displayable;
importjavax.microedition.lcdui.Form;
importjavax.microedition.lcdui.Gauge;
importjavax.microedition.lcdui.Image;
importjavax.microedition.lcdui.Item;
importjavax.microedition.lcdui.ItemCommandListener;
importjavax.microedition.lcdui.List;
importjavax.microedition.lcdui.StringItem;
importjavax.microedition.lcdui.TextBox;
importjavax.microedition.lcdui.TextField;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassgameMIDletextendsMIDletimplementsRunnable,CommandListener{
/**显示*/
privateDisplaydisplay;
privateSnakeCanvassnakecanvas;
privateMineCanvasminecanvas;
publicstaticgameMIDletinstance;
/**加载提示*/
privateAlertalert;
/**加载条*/
privateGaugegauge;
/**数目列表*/
privateListlist;
privateintcurgameIndex=0;
/**初始时间*/
longfirstTime;
privateImageimage;
privatefinalCommandcmdEnter=newCommand("进入",Command.OK,1);
privatefinalCommandcmdExit=newCommand("退出",Command.EXIT,1);
privatefinalCommandcmdBack=newCommand("返回",Command.BACK,1);
/**游戏名*/
privateString[]bookName={"贪吃蛇","扫雷","纸牌","推箱子"};
publicgameMIDlet(){
//TODOAuto-generatedconstructorstub
display=Display.getDisplay(this);
alert=newAlert("游戏启动中",null,null,AlertType.INFO);
gauge=newGauge(null,false,5,1);
alert.setIndicator(gauge);
alert.setTimeout(6000);
firstTime=System.currentTimeMillis();
minecanvas=newMineCanvas();
snakecanvas=newSnakeCanvas();
image=createImage("/123.png");
list=newList("游戏名",Choice.IMPLICIT,bookName,newImage[]{image,image});
list.addCommand(cmdEnter);
list.addCommand(cmdExit);
list.setCommandListener(this);
newThread(this).start();
}
privateImagecreateImage(Stringfile){
Imageimage=null;
try{
image=Image.createImage(file);
}catch(Exceptione){
e.printStackTrace();
}
returnimage;
}
protectedvoiddestroyApp(booleanarg0){
//TODOAuto-generatedmethodstub
}
protectedvoidpauseApp(){
//TODOAuto-generatedmethodstub
}
protectedvoidstartApp(){
//TODOAuto-generatedmethodstub
display.setCurrent(alert);
}
publicvoidexitApp(){
try{
destroyApp(true);
notifyDestroyed();
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
/**
*控制进度提示
*/
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true){
inttime=(int)(System.currentTimeMillis()-firstTime);
gauge.setValue(time/1000);
if(time>=alert.getTimeout()){
//alert.setString("欢迎进入游戏,请稍后");
//sleep(1000);
display.setCurrent(list);
alert.setIndicator(null);
break;
}
}
}
/**
*各个窗体事件
*/
publicvoidcommandAction(Commandcommand,Displayabledisplayable){
//TODOAuto-generatedmethodstub
if(command==cmdEnter){
if(displayable.equals(list)){
curgameIndex=list.getSelectedIndex();
if(curgameIndex==0){
display.setCurrent(snakecanvas);
}elseif(curgameIndex==1){
display.setCurrent(minecanvas);
}elseif(curgameIndex==2){}
}elseif(curgameIndex==3){}
}elseif(command==cmdExit){
notifyDestroyed();
destroyApp(true);
}
}
}
3.1.2贪吃蛇游戏代码(SnakeCanvas)
importjava.util.Random;
importjavax.microedition.lcdui.Canvas;
importjavax.microedition.lcdui.Graphics;
publicclassSnakeCanvasextendsCanvasimplementsRunnable{
/**食物的左上角X坐标*/
privateintfoodX;
/**食物的左上角Y坐标*/
privateintfoodY;
/**食物的颜色值*/
privateintfoodC;
/**贪吃蛇*/
privateint[]snake=newint[200*3];
/**贪吃蛇食物宽度*/
privatefinalintSNAKE_W=4;
/**贪吃蛇食物长度*/
privatefinalintSNAKE_H=4;
/**贪吃蛇的身体长度,即包含食物的个数*/
privateintsnakeNum;
/**方向变量*/
privateintdirection;
/**方向上*/
privatefinalintDIR_UP=0;
/**方向下*/
privatefinalintDIR_DOWN=1;
/**方向左*/
privatefinalintDIR_LEFT=2;
/**方向右*/
privatefinalintDIR_RIGHT=3;
/**Random对象,控制食物的随机出现*/
Randomrandom=newRandom();
/**可选颜色值*/
privatefinalint[]COLOR={0xff0000,0x00ff00,0x0000ff,0xffff00,0xff00ff,0x00ffff,0xff000f};
/**线程对象*/
privateThreadthread;
/**线程控制变量*/
privatebooleanisShow=true;
/**游戏是否退出控制变量*/
privatebooleanisExit=false;
/**屏幕宽*/
privateintSCREEN_W;
/**屏幕高*/
privateintSCREEN_H;
publicSnakeCanvas(){
//TODOAuto-generatedconstructorstub
/**获取屏幕宽度和高度*/
SCREEN_W=this.getWidth();
SCREEN_H=this.getHeight();
//初始化贪吃蛇的长度
snakeNum=7;
for(inti=0;isnake[i*3+0]=100-SNAKE_W*i;
snake[i*3+1]=40;
snake[i*3+2]=COLOR[i%7];
}
//初始化贪吃蛇的移动方向
direction=DIR_RIGHT;
//初始化食物坐标
foodX=100;
foodY=100;
foodC=0xff;
//启动游戏线程
thread=newThread(this);
thread.start();
}
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true){
//游戏逻辑控制循环体
while(isShow){
//获取每一帧的开始时间点
longst=System.currentTimeMillis();
//游戏主逻辑控制函数
main();
//刷新屏幕
repaint();
serviceRepaints();
//获取每一帧逻辑处理完后的时间点与开始时间点之间的时间差
intct=(int)(System.currentTimeMillis()-st);
//设置游戏帧的睡眠时间
if(ct<300){
try{
Thread.sleep(300-ct);
}catch(Exceptione){
e.printStackTrace();
}
}
}
//游戏退出控制
if(isExit){
gameMIDlet.instance.exitApp();
}
}
}
publicvoidmain(){
/**先判断是否能吃到食物*/
//定义贪吃蛇下一步的位移量
intstepX=0;
intstepY=0;
//判断方向,以便得到贪吃蛇下一步的位移量
switch(direction){
caseDIR_UP:
stepY=-SNAKE_H;
break;
caseDIR_DOWN:
stepY=SNAKE_H;
break;
caseDIR_LEFT:
stepX=-SNAKE_W;
break;
caseDIR_RIGHT:
stepX=SNAKE_W;
break;
}
//得到贪吃蛇蛇头下一步的位置
intnewX=snake[0*3+0]+stepX;
intnewY=snake[0*3+1]+stepY;
//判断下一步是否有食物,如果有则吞食,并随机再在屏幕内,蛇身外生成新的食物
if(newX==foodX&&newY==foodY){
snakeNum++;
for(inti=snakeNum-1;i>0;i--)
{
snake[i*3+0]=snake[(i-1)*3+0];
snake[i*3+1]=snake[(i-1)*3+1];
snake[i*3+2]=snake[(i-1)*3+2];
}
snake[0*3+0]=foodX;
snake[0*3+1]=foodY;
snake[0*3+2]=foodC;
//食物被吃掉后需要生成新的食物
makeFood();
}
/**判断下一步是否超出屏幕而越界,或者碰到自身,游戏结束*/
if(isGameOver()){
isShow=false;
isExit=true;
return;
}
/**蛇身移动过程*/
for(inti=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){
caseDIR_UP:
stepY=-SNAKE_H;
break;
caseDIR_DOWN:
stepY=SNAKE_H;
break;
caseDIR_LEFT:
stepX=-SNAKE_W;
break;
caseDIR_RIGHT:
stepX=SNAKE_W;
break;
}
snake[0*3+0]+=stepX;
snake[0*3+1]+=stepY;
if(snake[0*3+0]==0){
snake[0*3+0]=SCREEN_W-SNAKE_W;
}elseif(snake[0*3+0]==SCREEN_W-SNAKE_W){
snake[0*3+0]=0;
}
}
/**
*生成新的食物
*/
privatevoidmakeFood(){
//食物坐标
foodX=Math.abs(random.nextInt()%(SCREEN_W-SNAKE_W+1))/SNAKE_W*SNAKE_W;
foodY=Math.abs(random.nextInt()%(SCREEN_H-SNAKE_H+1))/SNAKE_H*SNAKE_H;
//食物颜色
foodC=COLOR[Math.abs(random.nextInt()%COLOR.length)];
}
/**
*判断游戏是否结束
*结束条件:
*1、蛇头超出边界
*2、蛇头碰到自身
*/
privatebooleanisGameOver(){
//边界判别
//if(snake[0*3+0]<0||snake[0*3+0]>(SCREEN_W-SNAKE_W)||
//snake[0*3+1]<0||snake[0*3+1]>(SCR