J2ME实验报告.docx
《J2ME实验报告.docx》由会员分享,可在线阅读,更多相关《J2ME实验报告.docx(29页珍藏版)》请在冰豆网上搜索。
J2ME实验报告
实验名称:
创建简单的JAVAME应用
时间:
2010/10/18地点:
8-209
一、实验设备:
一台计算机。
二、实验目的:
熟悉使用Eclipse软件;
创建MIDlet项目,检验Eclipse设置;
创建JavaME项目,编辑JavaME元素,并运行与调试改程序,使之得到相应的运行结果。
实验内容及方法:
建立在熟悉MIDlet的条件下。
创建MIDlet项目,然后检验Eclipse的设置,创建JavaME项目。
添加MIDlet到项目,编辑JavaME元素。
最后运行与调试。
三、实验过程:
1.实验步骤
1.创建MIDlet项目。
建立一个继承自Midlet的类MyMIDlet,。
2.检验Eclipse的设置。
选择File—>New—>Project,在弹出的对话框中有一个J2ME选项(如图所示);
从菜单栏中选择Windows—>Preferences命令,在弹出的对话框中同样可以看到J2ME配置的首选项(如下图所示)。
有以上,则表明安装成功
3.创建JavaME项目。
在菜单栏中选择New—>Project命令,选中J2ME—>J2MEMidletSuite—>Next,进入另外向导。
然后输入项目名称,点下一步。
然后进入MidletSuite属性设置对话框,选择“SunJavaWirelessToolkit2.3”。
接下来直接选择默认设置即可。
4.添加MIDlet到项目。
首先找到我们所写的那个MIDlet文件MyMIDlet.java,然后直接复制到MyJ2ME工程文件夹的src文件夹对应的包中即可,刷新后就可以看到添加的MIDlet了。
5.编辑JavaME元素
6.运行与调试。
运行结果如下图所示。
2.流程图:
3.源程序:
部分:
publicclassMyMIDletextendsMIDlet{
privateFormform;
privatefinalCommandcmdExit=newCommand("Exit",Command.EXIT,1);
privatechar[]charArray={
'T','h','i','s','','i','s','',
'm','y','','f','i','r','s','t','','J','2','M','E','',
'p','r','o','g','r','a','m','.','\n','W','e','l','c','o','m','e','!
'};
publicMyMIDlet(){
//TODOAuto-generatedconstructorstub
form=newForm("HelloMyJ2ME");
StringBufferstrBuf=newStringBuffer();
for(inti=0;i{
strBuf.append(charArray[i]);
}
form.append(strBuf.toString());
form.addCommand(cmdExit);
form.setCommandListener(newCommandListener(){
publicvoidcommandAction(Commandarg0,Displayablearg1){
//TODOAuto-generatedmethodstub
if(cmdExit==arg0){
notifyDestroyed();
destroyApp(true);
}
}
});
}
protectedvoidstartApp(){
//TODOAuto-generatedmethodstub
Display.getDisplay(this).setCurrent(form);
}
protectedvoidpauseApp(){
//TODOAuto-generatedmethodstub
}
protectedvoiddestroyApp(booleanarg0){
//TODOAuto-generatedmethodstub
}
}
4.运行截图:
实验名称:
有图形的JavaMe应用
时间:
2010/10/21地点:
8-209
一.实验设备:
一台计算机。
二.实验目的:
实现一个关于高级图形用户界面的示例。
了解Display类、Displayable类和它们的实现方法;掌握TextBox组件、List组件和它们的实现方法;掌握Form及其Item和抽象命令事件。
三.实验内容及方法:
编写一个显示图形界面程序,在eclipse上运行,通过UI表现给用户。
将原图形的矩形改为正方形,将三角形改为直角三角形,并且对颜色相应改变。
四.实验过程:
1.实验步骤
①.分析实验需求,搜集相关的资料
②.编写程序,修改相应代码
③.在eclipse上面运行调试.输出结果
④.整理实验报告
2.流程图:
3.源程序:
部分
classMyCanvasextendsCanvasimplementsRunnable{
intmenuIndex=0;
String[]menu={"直线","正方形","弧","圆角矩形","直角三角形","图片","文本",""};
publicMyCanvas(){
setFullScreenMode(true);
image=createImage("/image1.png");
newThread(this).start();
}
privateImagecreateImage(Stringpath){
Imageimage=null;
try{
image=Image.createImage(path);
}catch(Exceptione){
e.printStackTrace();
}
returnimage;
}
publicvoidkeyPressed(intkeyCode){
intgameAction=getGameAction(keyCode);
if(gameAction==Canvas.UP){
menuIndex=--menuIndex<0?
menu.length-1:
menuIndex;
}elseif(gameAction==Canvas.DOWN){
menuIndex=++menuIndex>menu.length-1?
0:
menuIndex;
}elseif(gameAction==Canvas.FIRE||keyCode==-6){
state=menuIndex+1;
}elseif(keyCode==-7){
if(state==MENU){
exitApp();
}else{
state=MENU;
}
}
}
protectedvoidpaint(Graphicsg){
//TODOAuto-generatedmethodstub
g.setClip(0,0,getWidth(),getHeight());
g.setColor(0xABCDEF);
g.fillRect(0,0,getWidth(),getHeight());
switch(state){
caseMENU:
for(inti=0;i
if(i==menuIndex){
g.setColor(0);
}else{
g.setColor(0xDDDDDD);
}
g.drawString(menu[i],getWidth()>>1,20+i*20,0x1|0x10);
}
g.setColor(0xff);
g.drawString("进入",0,getHeight(),Graphics.LEFT|Graphics.BOTTOM);
g.drawString("退出",getWidth(),getHeight(),Graphics.RIGHT|Graphics.BOTTOM);
break;
caseLINE:
//直线的绘制
g.setColor(0xcdaba);
g.drawLine(140,80,140,20);
g.setColor(0xff);
g.drawString("返回",getWidth(),getHeight(),Graphics.RIGHT|Graphics.BOTTOM);
break;
caseRECT:
//正方形的绘制和填充
g.setColor(0xaaaaaa);
g.drawRect(900,100,100,100);
g.setColor(0xbbbcdd);
g.fillRect(91,101,98,98);
g.setColor(0xff);
g.drawString("返回",getWidth(),getHeight(),Graphics.RIGHT|Graphics.BOTTOM);
break;
caseTRIANGLE:
//直角三角形的绘制
g.setColor(0xdaaacb);
g.fillTriangle(100,40,40,40,100,100);
g.setColor(0xff);
g.drawString("返回",getWidth(),getHeight(),Graphics.RIGHT|Graphics.BOTTOM);
break;
}
publicvoidrun(){
//TODOAuto-generatedmethodstub
while(true){
longst=System.currentTimeMillis();
repaint();
serviceRepaints();
intet=(int)(System.currentTimeMillis()-st);
if(et<100){
try{
Thread.sleep(100-et);
}catch(Exceptione){
e.printStackTrace();
}
}
4.运行截图。
(1)修改前修改后
(2)修改前修改后
(3)修改前修改后
(4)修改前修改后
实验名称:
贪吃蛇小游戏
时间:
2010/10/25地点:
8—209
一.实验设备:
一台计算机。
二.实验目的:
了解SnakeCanvas类、SnakeMIDlet类和它们的实现方法;
编写贪吃蛇小游戏;
对eclipse编写游戏进一步提高。
三.实验内容及方法:
开发简单的贪吃蛇游戏,正确运用各种类,编写程序,并且运行。
四.实验过程:
1.实验步骤
①.理解贪吃蛇的游戏原理编写输入贪吃蛇程序
②.编写输入贪吃蛇程序实验游戏
③.上机输入和调试自己所编的程序;
④.整理出实验报告。
2.流程图:
3.源程序:
publicclassSnakeCanvasextendsCanvasimplementsRunnable{
/**存储贪吃蛇节点坐标,其中第二维下标为0的代表x坐标,第二维下标是1的代表y坐标*/
int[][]snake=newint[200][2];
intsnakeNum;/**已经使用的节点数量*/
intdirection;/**贪吃蛇运动方向,0代表向上,1代表向下,2代表向左,3代表向右*/
/*移动方向*/
privatefinalintDIRECTION_UP=0;/**向上*/
privatefinalintDIRECTION_DOWN=1;/**向下*/
privatefinalintDIRECTION_LEFT=2;/**向左*/
privatefinalintDIRECTION_RIGHT=3;/**向右*/
intwidth;/**游戏区域宽度*/
intheight;/**游戏区域高度*/
privatefinalbyteSNAKEWIDTH=4;/**蛇身单元宽度*/
booleanisPaused=false;/**是否处于暂停状态,true代表暂停*/
booleanisRun=true;/**是否处于运行状态,true代表运行*/
privatefinalintSLEEP_TIME=300;/**时间间隔*/
intfoodX;/**食物的X坐标*/
intfoodY;/**食物的Y坐标*/
booleanb=true;/**食物的闪烁控制*/
Randomrandom=newRandom();/**Random对象*/
publicSnakeCanvas(){
init();//初始化
width=this.getWidth();
height=this.getHeight();
newThread(this).start();//启动线程
}
/**
*初始化开始数据
*/
privatevoidinit(){
snakeNum=7;//初始化节点数量
//初始化节点数据
for(inti=0;isnake[i][0]=100-SNAKEWIDTH*i;
snake[i][1]=40;
}
direction=DIRECTION_RIGHT;//初始化移动方向
//初始化食物坐标
foodX=100;
foodY=100;
}
protectedvoidpaint(Graphicsg){
//清屏
g.setColor(0xffffff);
g.fillRect(0,0,width,height);
g.setColor(0);
//绘制蛇身
for(inti=0;ig.fillRect(snake[i][0],snake[i][1],SNAKEWIDTH,SNAKEWIDTH);
}
//绘制食物
if(b){
g.fillRect(foodX,foodY,SNAKEWIDTH,SNAKEWIDTH);
}
}
privatevoidmove(intdirection){
//蛇身移动
for(inti=snakeNum-1;i>0;i--){
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
}
//第一个单元格移动
switch(direction){
caseDIRECTION_UP:
snake[0][1]=snake[0][1]-SNAKEWIDTH;
break;
caseDIRECTION_DOWN:
snake[0][1]=snake[0][1]+SNAKEWIDTH;
break;
caseDIRECTION_LEFT:
snake[0][0]=snake[0][0]-SNAKEWIDTH;
break;
caseDIRECTION_RIGHT:
snake[0][0]=snake[0][0]+SNAKEWIDTH;
break;
}
}
/**
*吃掉食物,自身增长
*/
privatevoideatFood(){
//判别蛇头是否和食物重叠
if(snake[0][0]==foodX&&snake[0][1]==foodY){
snakeNum++;
generateFood();
}
}
/**
*产生食物
*说明:
食物的坐标必须位于屏幕内,且不能和蛇身重合
*/
privatevoidgenerateFood(){
while(true){
foodX=Math.abs(random.nextInt()%(width-SNAKEWIDTH+1))
/SNAKEWIDTH*SNAKEWIDTH;
foodY=Math.abs(random.nextInt()%(height-SNAKEWIDTH+1))
/SNAKEWIDTH*SNAKEWIDTH;
booleanb=true;
for(inti=0;iif(foodX==snake[i][0]&&snake[i][1]==foodY){
b=false;
break;
}
}
if(b){
break;
}
}
}
/**
*判断游戏是否结束
*结束条件:
*1、蛇头超出边界
*2、蛇头碰到自身
*/
privatebooleanisGameOver(){
//边界判别
if(snake[0][0]<0||snake[0][0]>(width-SNAKEWIDTH)||
snake[0][1]<0||snake[0][1]>(height-SNAKEWIDTH)){
returntrue;
}
//碰到自身
for(inti=4;iif(snake[0][0]==snake[i][0]
&&snake[0][1]==snake[i][1]){
returntrue;
}
}
returnfalse;
}
/**
*事件处理
*/
publicvoidkeyPressed(intkeyCode){
intaction=this.getGameAction(keyCode);
//改变方向
switch(action){
caseUP:
if(direction!
=DIRECTION_DOWN){
direction=DIRECTION_UP;
}
break;
caseDOWN:
if(direction!
=DIRECTION_UP){
direction=DIRECTION_DOWN;
}
break;
caseLEFT:
if(direction!
=DIRECTION_RIGHT){
direction=DIRECTION_LEFT;
}
break;
caseRIGHT:
if(direction!
=DIRECTION_LEFT){
direction=DIRECTION_RIGHT;
}
break;
caseFIRE:
//暂停和继续
isPaused=!
isPaused;
break;
}
}
/**
*线程方法
*使用精确延时
*/
publicvoidrun(){
try{
while(isRun){
//开始时间
longstart=System.currentTimeMillis();
if(!
isPaused){
//吃食物
eatFood();
//移动
move(direction);
//结束游戏
if(isGameOver()){
break;
}
//控制闪烁
b=!
b;
}
//重新绘制
repaint();
longend=System.currentTimeMillis();
//延时
if(end-startThread.sleep(SLEEP_TIME-(end-start));
}
}
}catch(Exceptione){}
}
}
4.运行截图:
(1)开始运行,蛇爬行,食物闪
(2)蛇头超出边界,游戏结束
(3)蛇身与食物重合,蛇吃掉食物,蛇身变长(4)蛇头碰到自身,游戏结束
(5)按确定键,游戏暂停,再按,游戏继续
实验名称:
创建简单的JAVAME应用
时间:
2010/10/28地点:
8—209
一.实验设备:
一台计算机.
二.实验目的:
修改一个开发出来的JavaME聊天工具,增添其功能。
了解GCF通用连接方法,熟悉JavaME通讯方式,熟悉掌握LogForm类、HallList类和ChatForm类。
三.实验内容及方法:
将已经编号的实验成寻导入到eclipse,运行。
查看其源代码,并进行修改。
使其在登录的时候能够提供记住当前密码的选项。
运行修改后的程序。
四.实验过程:
1.实验步骤
①.导入已经开发好的聊天工具程序
②.读聊天程序,并进行修改:
在登录项里面添加一个“记住密码“项。
③.调试运行程序。
2.流程图:
3.源程序:
部分
publicLogForm(String