当前位置:首页 > 免费毕业设计

JAVA基于J2ME的手机游戏开发(LW+源代码)

JAVA基于J2ME的手机游戏开发(LW+源代码)

  • 网站价格: 2
  • 特殊技术: java
  • 作品类型: 免费毕设
  • 售后服务:

联系方式: 微信:biyebang QQ: 629001810

作品详情

 摘要

随着通信技术的发展和手机的普及,手机游戏的开发技术越来越为人们所关注。以J2ME为开发平台,利用Java提供强大工具,不但可以在手机上实现静态HTML技术所无法实现的计算处理、数据存储、与服务器的通信等功能,而且能够开发各种手机游戏。本文在介绍J2ME及其体系结构的基础上,以贪吃蛇游戏为实例,描述了借助J2MEMIDlet类库开发手机游戏的过程。

 

 

目录

 

系统设计


贪吃蛇游戏的规则简介以及开发环境

3.1.1贪吃蛇游戏的规则简介

在贪吃蛇游戏中,玩家操作由小方块连接而成的蛇,去吃随机散落在画面内的小方块,每吃一块就增加一小方块长度,要是撞壁以及撞自己的尾,就属于失败,如无失败则直到通关为止。

屏幕的长度的行向为11单位,纵向为18单位。在这个范围内,玩家通过操作方向键来控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。

3.1.2开发环境

1)开发的硬件环境:CPU C1.7HZ/Maxor  40G/DDR256M/CD-ROW 40X

   2)开发软件:JDK1.3J2MEWTK

 

3.2  详细设计

本游戏的操作流程(如图3-1):用户在启动MIDlet后,即进入游戏主画面,屏幕开始显示为欢迎画面。用户按下[开始]按钮后,就可以开始玩游戏。当用户想暂停时,再次按一下[开始]按钮,游戏就暂停了,在暂停的情况下再按[开始]按钮,游戏继续运行。任何时候按[退出]按钮,游戏MIDlet都会终止。

 

代码设计

1)游戏地图代码设计

   游戏地图是蛇的活动范围和食物随机散落的范围,游戏的容器为行向为11单位,纵向为18单位,如下代码:

private final int iX = 10;          //地图的开始坐标

    private final int iY =10;             //

       private final intSWIDTH = 16;          //图标的宽度

    private final intiCells = 11;//地图的列数

    private final intiRows = 18;              //地图的行数

      privatefinal int iBoxW = SWIDTH*iCells;//地图的宽

采用二维绘图工具:二维绘图工具drawLine采用4个参数——直线起点的xy坐标值和直线终点xy的坐标值,例如:

graphics.drawLine5001000);

这行代码会从位置(500)到(1000)绘制一条直线。

绘制一个矩形是一个类似的过程,不同的只是需要用起点加上宽度和高度的方式来指定这个对象。可以绘制透明的或者填充的矩形,甚至可以绘制圆角的矩形。4个绘制矩形的方法是:drawRectdrawRoundedRectfillRectfillRoundedRect

2贪吃蛇和食物的代码设计

屏幕的长度为行向为11单位,纵向为18单位;在这个范围内(如图3.3),玩家操作方向键控制蛇的运动方向。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。

贪吃蛇最初由3个小正方形组成,小正方形是蛇的身体和游戏容器的组成部分。食物也由一块小正方形组成,并且随机散落在游戏框图的区域内,每次只出现唯一的一个,待玩家操作游戏完成一个任务后面,再出现下个食物,小蛇每吃一个食物就增加一个长度。实现代码如下:

publicint getCell(){

              return iCell;

       }

       public int getRow(){

              return iRow;

       }

   public void show(){

        sLabel.setVisible(true);

    }

    public boolean isVisible(){

        return sLabel.isVisible();

    }

    public void hide(){

        sLabel.setVisible(false);

    }

    protected void setPosition(int row, intcell){

              iCell = cell;

              iRow  = row;

        sLabel.setBounds(cell*SWIDTH,row*SWIDTH, SWIDTH, SWIDTH);

    }

       public void moveUp(){

              if(iRow>0)

                     setPosition(--iRow,iCell);

              else

                     setTouch();

       }

       public void moveDown(){

              if(iRow<iBoxH-1)

                     setPosition(++iRow,iCell);

              else

                     setTouch();

       }

       public void moveLeft(){

              if(iCell>0)

                     setPosition(iRow,--iCell);

              else

                     setTouch();

       }

       public void moveRight(){

              if(iCell<iBoxW-1)

                     setPosition(iRow,++iCell);

              else

                     setTouch();

       }

       static boolean getTouch(){

              returnisTouch;

       }

       static void setTouch(){

              isTouch = true;

       }

       static void setImTouch(){

              isTouch = false;

       }

       public Snake clone(){

              Snake tem = new Snake();

              tem.setPosition(this.getRow(),this.getCell());

              return tem;

       }

 

3)操作控制代码设计

MIDP的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动MIDlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的就不需重绘。游戏画布是一个CommandListener,可以接受用户键盘命令,控制蛇的左移,右移,下移,上移。其代码如下:

public voidmove(){

              hide();

       if(aoSnakes[0].getRow()==Food.getRow()&&aoSnakes[0].getCell()==Food.getCell())

                     eat();

              Snake tempSnakes[] = newSnake[iLen-1];

              for(inti=0;i<tempSnakes.length;i++){

                     tempSnakes[i] =aoSnakes[i].clone();

              }

              switch(heading){

                     case 37:

                            aoSnakes[0].moveLeft();

                            break;

                     case 38:

                            aoSnakes[0].moveUp();

                            break;

                     case 39:

                            aoSnakes[0].moveRight();

                            break;

                     case 40:

                            aoSnakes[0].moveDown();

                            break;

                     default:

                            break;

 

整个游戏的流程控制体现在游戏画布对象的paint()方法里。paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和Game Over画面的绘制相当简单,游戏暂停画面的绘制也相当容易,就是设立标志,让paint()执行的时候无需真正执行重绘动作。

系统实现


游戏的调试

在手机游戏方面,游戏的控制和图片的设置是游戏的基本能力,为了方便玩家操作游戏,把玩家常用的操作键设为游戏最常用的控制键,并通过J2ME简单有效的编码,使玩家可以重新设置自己的熟悉的键。本游戏不设立关卡,而是随着游戏积分的增加,游戏将自动增加游戏的难度,如加快游戏速度和随小蛇长度的增加,游戏的操作难度也会增大。如玩家进入游戏(如图4-1),操作小蛇,

 

去吃随机散落在游戏区内的食物,每吃一个食物就增加小蛇一个单位长度,并随着长度的增加,游戏的速度将增加,而小蛇的长度增加也会增加玩家的操作难度。

如果玩家操作小蛇碰壁或者由于小蛇长度太长而蛇头撞到小蛇的身体任何部位,均属于失败,玩家得重新游戏开始(如图4-2)。但游戏将自动纪录你的得分,并且保存你的游戏最高得分。

 

游戏的运行环境

目标硬件环境:

1:显示: 96*54象素,1位颜色,大约11的象素比例;

2:输入:(a)单手键盘或者小键盘;

(b)双手的QWERTV键盘;

(c)触摸屏。

3)内存  (a)128KB非易失性内存,供MIDP组件使用;

(b)8KB的非易失性内存,供应用程序生成的永久数据使用;

(c)32KB的易失性内存,供Java堆使用。

4)网络  (a)双响无线网络,可能间歇性连接;

(b)通常是很有限的带。

 

 

 

源文件


 

 

 

帮我毕业网微信

版权所有© 帮我毕业网 并保留所有权利

QQ 1370405256 微信 biyebang

QQ:629001810微信:biyebang

收缩