资讯   |   开发   |   选机中心   |   产品大全 | IBM | 惠普 | 联想 | 戴尔 | 苹果 | 神舟
更多: | 华硕 | 明基 | 方正 | 紫光 | TCL | 夏新 | 联宝 | 宏碁 | 七喜 | 长城 | 清华同方 | 海尔 | 三星 | 东芝 | 索尼 | 富士通 | LG | 技术 | ddnoon
当前位置:笔记本 > 编程开发 >
Advertisement
文章正文

一个MIDP俄罗斯方块游戏的设计和实现 _编程

类型:转载   责任编辑:asp.net   日期:2007/05/23


热门软件下载:


   
  • WorkbenchAdvisor中的方法执行顺序  
  • Struts 的安装、配置与运行  
  • JDK1.5 最新特性  
  • 配置 Tomcat 的网站根目录、虚拟目录、端口等  
  • 彻底解决Tomcat 5.0.19中文乱码  
  • 深入探索SOAP1.1--使用SAAJ1.2.1  
  • jfreechart里在页面上生成临时图片的过程剖析  
  • 今天一位老兄回的贴,觉得不错.  
  • Java Threading中的final变量  
  • EJB工作原理学习笔记!  
  • 页面导航:

    正文内容:

    设计

    1. 操作流程

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

    游戏画面流程图如下:

    2. 算法

    midp的游戏设计,本质上就是用一个线程或者定时器产生重绘事件,用线程和用户输入改变游戏状态。这个游戏也不例外,启动midlet后,就立即生成一个重绘线程,该线程每隔50ms绘制一次屏幕。当然,重绘时有一些优化措施,并不是屏幕上所有的像素都需要重绘,而是有所选择,比如游戏画布上那些已经固定下来的下坠物(下坠物一共有7种,由4个小砖块组成,每种下坠物颜色固定,可以上下左右旋转)就不需重绘。游戏画布是一个commandlistener,可以接受用户键盘命令,控制下坠物的左移,右移,下移,旋转动作。整个游戏的流程控制体现在游戏画布对象的paint()方法里。paint()根据当前的游戏状态,绘制出当时的游戏画面。欢迎画面和game over画面的绘制相当简单。游戏暂停画面的绘制也相当容易,就是设立标志,让paint()执行的时候无需真正执行重绘动作。对于游戏处于运行状态的画面的绘制,则需要在下坠物的当前位置,绘制下坠物。在绘制下坠物之前,判断下坠物是否还能下坠,如果能下坠的话,就让它下落一格,再进行绘制,如果下坠物已无法下坠,则判断游戏是否处于game over状态,如果是处于game over状态的话,则设置游戏状态为game over状态,这样画布在下一次重绘时就绘出game over的画面.如果游戏不是处于game over状态,则把下坠物固定下来,同时检查游戏画布上下坠物当前行下面的所有行,看是否需要进行行删除动作,如果需要行删除,则清除游戏地图上被删行的数据,再把被删行绘制成背景色。然后初始化一个新的下坠物,绘制这个新的下坠物。paint方法的流程图如下所示:

    3. 数据结构

    本游戏涉及到以下几种数据结构。

    游戏区域

    游戏区域为手机或者pda屏幕的一部分,该区域为正方形,边长一定能被16整除(因为俄罗斯游戏区域刚好为16个小砖块长,16个小砖块宽的方形)。无论在水平方向还是垂直方向,该区域都要处于屏幕的居中位置。游戏区域在水平方向上分为2部分,一部分为12个小砖块宽,用来显示游戏容器,另一部分为4个小砖块宽,用来显示下一个下坠物和分数。

    小砖块

    小砖块是下坠物和游戏容器的组成部分。表现为一个正方形,边长为游戏区域边长的1/16。每个小砖块在绘制的时候,4边会留出1个象素宽,绘制成白色或者灰色,这样砖块之间才有间隙。每种小砖块也有id,分别为1到8。我们可以用一个颜色数组(程序里叫brick_colors)存储这8种颜色。若某种小砖块的id为3,那么该小砖的颜色为brick_colors[3-1].

    下坠物

    下坠物本质上为16个小砖块组成的正方形。下坠物一共有7种,比如有"田"字形的,"l"字形的等等。每种下坠物一共有4种旋转变化。 每种下坠物都有一个id,分别为1到7。因为对于一种下坠物来说,其颜色是固定的。我们同样可以用该种颜色在brick_colors数组中的下标值加上1,作为下坠物的id.

    例如"l"形下坠物的id为3,其变化形式为:

    那么用什么数据结构存储一个下坠物呢,我们以"l"形的下坠物为例子来说明:

    因为每一个下坠物有四种状态,所以我们可以考虑用一个长度为4的数组来存贮一个下坠物的4种状态,数组中每一个元素表示该下坠物的一种状态。那么用什么东西来表示某个下坠物的某种状态呢,从上图可以看出,用一个4x4的二维数组来存储一种下坠物的一种状态最合适不过了。在有色砖块出现的位置,值为1,而只有背景颜色,无需绘制的位置,值为0。因此,整个"l"形下坠物的4种状态可以用一个3维数组来表示:

    protected int blockpattern3[][][] = { {{0, 1, 0, 0}, {0, 1, 0, 0}, {0, 1, 1, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 1, 1, 1}, {0, 1, 0, 0}, {0, 0, 0, 0}}, {{0, 0, 0, 0}, {0, 1, 1, 0}, {0, 0, 1, 0}, {0, 0, 1, 0}}, {{0, 0, 0, 0}, {0, 0, 1, 0}, {1, 1, 1, 0}, {0, 0, 0, 0}} };

    游戏地图

    游戏地图是用来存储游戏容器上的固定砖块的。游戏容器为一个宽为12个小砖块单位,高为16个小砖块单位,包括左右2堵墙和下边的容器底在内。所以用一个16x12的二维数组(程序里叫mapdata)来存储固定砖块。如果mapdata[i][j]=k(k!=0).那么就表示游戏容器的i行j列上有个固定的小砖块,小砖块的颜色值为brick_colors[k-1].如果k=0则表示i行j列无砖块。

    因此对于以下这种游戏运行时刻,mapdata的值为{{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,0,0,8}{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,0,0,0,1,1,8}{8,0,0,0,0,0,7,7,5,1,1,8}{8,0,5,0,0,7,2,5,5,1,1,8}{8,8,8,8,8,8,8,8,8,8,8,8}}

    源代码和可执行代码

    总共为3个文件:src.rar, ketrisgame.jad, ketrisgame.jar 说明:src.rar中有全部的源代码。ketrisgame.jar中还有程序运行所需要的资源文件.安装wtk2.1后,让ketrisgame.jad和ketrisgame.jar处于同一目录下(目录路径中不能含有中文和空格 切记),双击ketrisgame.jad文件,即可在模拟器里运行游戏。

    参考资料

    http://www.javadrive.jp/j2me/game/3/index.html

    <j2me in a nutshell>

    <java 手机/pda 程序设计入门>


    作者简介

    陈万飞,男,中南大学数软系学士,曾任北京长城软件高级程序员,系统分析师.有较为丰富的j2se,j2ee开发经验。目前致力于j2me研究工作。可通过chen_cwf@163.net与他联系

    本文原引自http://gceclub.sun.com.cn/yuanchuang/week-10/game.html



     

     
    热门推荐笔记本: IBM笔记本
    相关文章:
    webmaster:popbb@126.com   最佳浏览:1024X768 MSIE
    ©2007 popbb.net All Rights Reserved