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

文章来源:csdn 作者:陈万飞

 

作者简介

  陈万飞,男,中南大学数软系学士,曾任北京长城软件高级程序员,系统分析师.有较为丰富的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}}

源代码和可执行代码

  总共为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 程序设计入门>

 

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java编程俄罗斯方块、java实现俄罗斯方块、俄罗斯方块编程、俄罗斯方块c语言编程、俄罗斯方块编程思想,以便于您获取更多的相关知识。

时间: 2024-10-06 22:49:44

一个MIDP俄罗斯方块游戏的设计和实现_Java编程的相关文章

c#-C#做一个益智类游戏 设计思路

问题描述 C#做一个益智类游戏 设计思路 新手,老师留了一个课题用C#做一个搭桥的益智类游戏,游戏的链接:http://www.puzzle-bridges.com/ 求大神给个思路,具体怎么设计这个游戏 解决方案 遍历所有节点,按照规则判断.岛和岛只能水平垂直连接,每个岛的桥的数量和数字相等,桥不能交叉生成游戏可以随机先产生节点和网格,随机删除一些路径,然后标记好数字,画出来.

用Python编写一个简单的俄罗斯方块游戏的教程_python

俄罗斯方块游戏,使用Python实现,总共有350+行代码,实现了俄罗斯方块游戏的基本功能,同时会记录所花费时间,消去的总行数,所得的总分,还包括一个排行榜,可以查看最高记录. 排行榜中包含一系列的统计功能,如单位时间消去的行数,单位时间得分等.   附源码:     from Tkinter import * from tkMessageBox import * import random import time #俄罗斯方块界面的高度 HEIGHT = 18 #俄罗斯方块界面的宽度 WIDT

eclipse+adt,设计一个剪刀石头布的游戏

问题描述 eclipse+adt,设计一个剪刀石头布的游戏 使用eclipse+adt制作一个猜拳游戏,请附上详细代码和说明,谢谢. 解决方案 机智的可怕 给玩家 石头 剪刀 布 三个选择 另一方电脑用随机数 来判断 出那个 然后判断结果就好了 解决方案二: 你这是作业吧....

5、使用Libgdx设计一个简单的游戏------雨滴

(原文:http://www.libgdx.cn/topic/49/5-%E4%BD%BF%E7%94%A8libgdx%E8%AE%BE%E8%AE%A1%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E6%B8%B8%E6%88%8F-%E9%9B%A8%E6%BB%B4) 在深入研究Libgdx提供的API之前,我们先来创建一个简单的游戏来感受一下libgdx各个功能.这里将简单的对一些功能做介绍. 使用的技术: 文件访问 清除屏幕 渲染图片 使

javascript实现俄罗斯方块游戏的思路和方法_javascript技巧

观摩一下<编程之美>:"程序虽然很难写,却很美妙.要想把程序写好,需要写好一定的基础知识,包括编程语言.数据结构与算法.程序写得好,需要缜密的逻辑思维能力和良好的梳理基础,而且熟悉编程环境和编程工具." 学了几年的计算机,你有没有爱上编程.话说,没有尝试自己写过一个游戏,算不上热爱编程. 俄罗斯方块曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事,它看似简单但却变化无穷,令人上瘾.相信大多数同学,曾经为它痴迷得茶不思饭不想. 游戏规则 1.一个用于摆放小型正方形的平

浅谈——韩国游戏网站设计

一直以来游戏网站带来的印象是整体的,华丽的,因为游戏的本质就是多彩美丽地艺术品,每一款游戏本身的独特元素,造就了一个个具有独特魅力的游戏网站.网络游戏在中国的发展是迅速的,千年,传奇,天堂,MU,RO,很多韩国游戏在中国很受欢迎,本土的游戏也深受韩国游戏的影响和启发,游戏网站也有相同的发展经历,从韩国风格的素材,模板,到构图,色彩,插画创意等. 首尔被称为世界设计中心之一,有叹为观止的建筑,令人羡慕的工业设计,融入日常生活的艺术,有如此多的美学作为标杆,网站设计自然也有美丽之处,更重要之处是有浓

J2ME伪高手先锋开讲—扫雷游戏的设计

设计 J2ME伪高手先锋开讲--扫雷游戏的设计 首先我要装得像高手一样,来假装把系统稍微分析一下. 一般,按照java得开发模式,这种程序一般是分为三个模块来开发. 如下三个: 一个程序运作的主文件,也就是一个midlet的继承: 一个界面的表示类,也就是一个canvas的继承,界面上应该有些菜单,如new.exit 什么的,那就应该要 implements一个 commandListener消息监听类(大家可以把java的消息监听理解为一个线程,一直像倭寇那样对看得顺眼的东西虎视耽耽,当然这里

设计参考:12个设计精彩的国外游戏网站设计

现在"国产"网游已经有很多经典之作了,但是无可否认,国产游戏与国际巨头还是有些差距的,游戏网站亦是如此.游戏网站设计对游戏本身是很重要的,好的游戏网站至少要能够体现出游戏的特色和优势.一个设计出色的游戏网站,无疑能够吸引更多的用户来尝试游戏. 今天网页教学网从国外大量的游戏网站中精选出12个特别出色的网站,供大家欣赏,也希望能给大家的设计带来某些灵感. 暗黑 3 雷顿教授与不可思议的城镇 大坏蛋 吉他英雄:非凡精选 最终幻想XIII 拳无虚发!! 网球大满贯 极速竞赛 模拟人生 3 铁

游戏网站设计案例欣赏

  游戏网站的设计要求比一般网站要求要高,设计必需细致,突出画面视觉效果,很多优秀的游戏网站可能要经过手绘.后期处理并且制作极击冲击力的视频,这些都需要花费大量的时间,所以制作一个好的游戏官网并不容易.