`
java-admin
  • 浏览: 1381576 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

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

阅读更多

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

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

作者:陈万飞

作者简介

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

摘要

本文给出了一个基于MIDP1.0的俄罗斯方块游戏的设计方案,并给出全部实现源代码。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。游戏在J2me wireless toolkit 2.1的4种模拟器上测试通过。

声明:本游戏代码最初来源于一个日本开源项目(见参考资料1),笔者有大幅度修改。

以下为几张游戏截屏图:

设计

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}}

分享到:
评论

相关推荐

    一个MIDP俄罗斯方块游戏的设计和实现.rar

    《一个MIDP俄罗斯方块游戏的设计和实现》 在移动设备上开发游戏,MIDP(Mobile Information Device Profile)是Java ME(Micro Edition)的一部分,它为开发针对功能手机的应用程序提供了框架,特别是游戏。本项目...

    MIDP俄罗斯方块游戏的设计和实现

    本文给出了一个基于MIDP1.0的俄罗斯方块游戏的设计方案,并给出全部实现源代码。该游戏的最大特色是屏幕自适应,无论各种手机,PDA的屏幕大小如何,该游戏总是能获得最佳的显示效果。游戏在J2me wireless toolkit 2.1...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现(文档,源代码).zip

    在本项目中,我们探讨了如何使用Java ME(Micro Edition)技术实现在无线网络移动端运行的俄罗斯方块游戏。Java ME是一种轻量级的Java平台,特别适合开发移动设备和嵌入式系统的应用程序。这个项目提供了详细的文档...

    JAVA编程俄罗斯方块游戏

    而"一个MIDP俄罗斯方块游戏的设计和实现"可能是项目源代码或者设计文档,MIDP(Mobile Information Device Profile)是JAVA ME(Micro Edition)的一个子集,主要用于移动设备和嵌入式系统的应用开发。这意味着这个...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现(最终修改版).rar

    《基于Java ME无线网络移动端的俄罗斯方块游戏的实现》 在移动通信技术飞速发展的今天,手机游戏已经成为人们日常娱乐的重要组成部分。Java ME(Micro Edition)作为一种跨平台的轻量级开发框架,广泛应用于移动...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现(论文,源代码)

    总的来说,基于Java ME无线网络移动端的俄罗斯方块游戏实现是一个综合性的项目,涵盖了Java编程、游戏逻辑设计、用户界面构建和网络通信等多个方面。这个项目不仅提供了实践经验,还展示了将理论知识应用于实际问题...

    JAVA课程设计 俄罗斯方块

    【JAVA课程设计 俄罗斯方块】的项目是一个基于Java实现的经典游戏——俄罗斯方块,它包含详细的实验报告和源代码,旨在帮助学习者理解和实践Java编程。以下是该项目涉及的重要知识点和详细说明: 1. **线程与定时器...

    J2me俄罗斯方块,设计报告

    《J2me俄罗斯方块设计报告》是一份深入解析如何使用Java 2 Micro Edition (J2ME) 技术开发经典游戏俄罗斯方块的详细文档。这份报告涵盖了从项目规划到实现过程的各个环节,旨在帮助学习者理解移动平台游戏开发的基础...

    毕业答辩-基于Java ME无线网络移动端的俄罗斯方块游戏的实现(论文,源代码).rar

    本项目聚焦于使用Java ME(Java Micro Edition)技术在无线网络移动端实现俄罗斯方块游戏,这不仅展示了Java ME在嵌入式设备上的应用潜力,同时也揭示了游戏开发的基本流程和技术难点。 Java ME是Java平台的一个...

    俄罗斯方块J2ME下载

    【标题】:“俄罗斯方块J2ME下载” 【描述】:描述中连续多次提到了...总的来说,"俄罗斯方块J2ME下载"涉及的是利用Java的J2ME技术开发和分发俄罗斯方块游戏的过程,涵盖了游戏设计、编程、优化和用户体验等多个方面。

    俄罗斯方块源程序 j2me

    学习和分析J2ME版的俄罗斯方块源代码,不仅可以帮助我们理解游戏开发的基本原理,还能掌握J2ME编程的核心技巧,这对于移动应用开发者来说是一笔宝贵的财富。通过这样的实践,开发者能够更好地掌握移动设备上的图形...

    JAVA俄罗斯方块游戏详解源代码

    本资源"JAVA俄罗斯方块游戏详解源代码"提供了一个很好的学习平台,让你深入理解游戏编程的基础和技巧。这个项目是基于J2ME(Java 2 Micro Edition)开发的,J2ME是一个专门用于嵌入式设备和移动设备的Java平台,比如...

    用J2ME设计的俄罗斯方块游戏

    本文将深入探讨如何使用J2ME技术设计并实现一款经典的俄罗斯方块游戏。 首先,我们要理解J2ME的基本结构。J2ME由配置(Configurations)、配置集(Profiles)和API层组成。在设计俄罗斯方块游戏时,通常选择MIDP...

    Java毕业设计-基于Java ME无线网络移动端的俄罗斯方块游戏的实现(源代码+论文).rar

    本资源提供了一个完整的基于Java ME无线网络移动端的俄罗斯方块游戏实现,包括源代码和详细的设计论文。此项目不仅是一个娱乐性的游戏,更是一个展示Java ME技术在无线网络应用中的实践案例。 源代码采用Eclipse ...

    j2me 俄罗斯方块 数组版

    本文将深入探讨一个基于J2ME的俄罗斯方块游戏,它利用数组作为核心数据结构来实现游戏逻辑。 俄罗斯方块是一款经典的益智游戏,由不同形状的方块组成,玩家需要通过旋转和移动这些方块使其在水平方向形成完整的行,...

    J2ME俄罗斯方块游戏

    《J2ME俄罗斯方块游戏》是一款基于Java Micro Edition(J2ME)平台开发的经典游戏。J2ME是Java技术的一个分支,主要用于移动设备、嵌入式设备等小型计算平台上,提供了丰富的功能和良好的跨平台能力,使得开发者能够...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现

    在本文中,我们将深入探讨如何使用Java ME(Micro Edition)技术在无线网络移动端实现一个功能完备的俄罗斯方块游戏。Java ME是Java平台的一个子集,专为资源有限的移动设备设计,如早期的智能手机和平板电脑。这个...

Global site tag (gtag.js) - Google Analytics