网站导航网学 原创论文 网站设计 最新系统 最新研究 原创论文 获取论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计下载 > Java类作品 > 正文

基于JavaME平台的俄罗斯方块游戏

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/05/09

【编者按】网学网Java类作品频道为大家收集整理了“基于Java ME平台的俄罗斯方块游戏“提供大家参考,希望对大家有所帮助!

QQ交谈客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn

 

2         游戏系统分析设计
4.1       系统解决方案
本系统在Windows XP的操作系统下,以Java Micro Edition Wireless Toolkit 2.1为开发工具,用中文版UltraEdit做为代码编辑器而实现的。在KToolBar开发包的DefaultColorPhone模拟器下进行调试。
4.2       系统总体结构
系统开发的主要任务是俄罗斯方块游戏在无线移动端的实现。本系统的主要实现功能模块分为:难度选择模块、方块处理模块、游戏规则模块。
4.2.1              难度选择模块
用户在title屏按键数字键选择0-9种游戏难度,进入相对应游戏关卡。

进入游戏
按键输入(0-9)选择关卡难度
处理输入
选择关卡难度
进入关卡0
进入关卡1
进入关卡2
进入关卡3
。。。。。。
判断游戏是否结束

6 Title屏选择关卡模块图
4.2.2              方块处理模块
方块处理模块定义方块的7种状态,每种状态都是由四个小方块组合而成,如下:
7 方块形状模块图
4.2.3              游戏规则模块
游戏规则模块主要实现俄罗斯方块游戏基本规则。比如,积满一行后消减;能够快速直接的下落;记录游戏最高分;方块翻转;分数计算;随机生成方块,见下图:

游戏规则
消减积满行
快速下落
方块翻转
分数计算
随机生成方块

8 游戏规则模块图
4.3       游戏中断处理流程
中断处理是移动设备程序生命周期的重要组成特性,包括下图三种阶段:

运行阶段(startApp)
挂起阶段(pauseApp)
结束阶段(destroyApp)
唤醒
挂起
结束
结束

9 系统生命周期图
5               系统实现与测试
5.1  系统源文件结构
本系统由10个类组成并实现全部功能。项目名字为TetrisMidlet,其项目文件结构如下图:
10 项目结构图
在项目源文件中,src文件夹下为实现系统的源文件。建了两个包作为功能划分,分别为:ui包和model包。
5.2   难度选择模块
5.2.1              难度选择模块结构
ui包里包含以下类:
InfoBox.java        用于显示数字的信息框
TitleBox.java        显示title屏,包含当前高分提示选择一个难度
NextPieceBox.java    显示下一个激活方块
TetrisCanvas.java    处理程序的所有UI
DisplayBox.java    在屏幕上显示Box
其结构图如下:

ui包
InfoBox
TitleBox
NextPieceBox
TetrisCanvas
DisplayBox

11 ui包结构图
其中核心类DisplayBox.java的方法图如下:
12 类DisplayBox的方法图
DisplayBox.java中方法paint()实现了title屏的显示,其代码如下:
public final void paint(Graphics g) {
        g.setColor(this.bgColor);
        g.fillRect(x, y, width, height);    // box的背景
        g.setColor(this.fgColor);
        g.drawRect(x, y, width, height);    // 边框
        this.paintBoxContents(g);}
下面是TerisCanvas.java中绘制方块paintBlock()方法的实现代码:
private void paintBlock(int x, int y, int blockType, Graphics g) {
        int blockX = this.boardX + (this.blockSize * x);
        int blockY=this.boardY+(this.blockSize* (y - TetrisConstants.TOP_VISIBLE_ROW));
        if(TetrisConstants.BLOCK_EMPTY != blockType) {
            // 绘制下落时的阴影
            g.setColor(TetrisConstants.COLOR_BLACK);
    g.fillRect(blockX + 1, blockY + 1, this.blockSize - 1, this.blockSize - 1);
            // 绘制一个实际的方块覆盖在阴影上
            this.setColor(blockType, g);
            g.fillRect(blockX, blockY, this.blockSize - 1, this.blockSize - 1);
        } else {
            //绘制颜色
            g.setColor(TetrisConstants.COLOR_WHITE);
            g.fillRect(blockX, blockY, this.blockSize, this.blockSize);}}
其中,TOP_VISIBLE_ROW为TetrisConstants下定义,Y坐标的从行0开始索引的位置,初始值为2。
BLOCK_EMPTYTetrisConstants下定义的空方块,初始值为-1。
COLOR_BLACKTetrisConstants下定义的预设RGB颜色,初始值为0x00000000。
COLOR_WHITETetrisConstants下定义的预设RGB颜色,初始值为0x00ffffff。
5.2.2              难度选择模块功能
模拟器程序运行,在应用程序列表里显示可以载入运行的模拟程序,如下图:
13 载入程序
点击运行程序后,在title屏显示游戏名称、作者、最高分记录和按键提示,点击数字键输入0-9中的一个数字,以选择不同难度的关卡,如下图:
14 运行游戏
在title屏,也可以点击左软键退出程序。
5.3  游戏规则模块功能
5.3.1    游戏规则模块结构
游戏规则模块包含3个类:
DropThread.java    处理方块下落问题
TetrisConstants.java 常数定义
TetrisMidlet.java    游戏规则和对键盘输入的捕捉,以及中断的处理
其结构图如下:

TetrisMidlet
Ui
Model包
DropThread
TetrisConstants
TetrisMidlet

15 游戏规则模块结构图
其中核心类DropThread.java实现了方块的下落,它的方法图如下:
16 类DropThread方法图
其中run()方法实现循环下落,代码如下:
   public void run() { //运行方法
        while(this.running) {          
            // 当前下落的方块
            if(this.skipNextTick) {
                this.skipNextTick = false;
            } else {
                this.game.tick();
            }
            try {
                Thread.sleep(this.game.getTickSpeed()); // 线程睡眠
            } catch(InterruptedException ie) {
        }}}
5.3.2    游戏规则模块功能
游戏规则模块实现俄罗斯方块游戏的主要功能包括,消减积满的行、快速下落、方块翻转、分数计算、下落碰撞检测、随机生成方块。
下面是消减积满行功能代码,如下:
   private int clearCompletedRows(TetrisPiece piece) {
        TetrisBoard board = this.getBoard();
        // 检查方块的每一行,看是否以完成
        for(int i = 0; i < TetrisConstants.FOUR_BLOCKS; i++) {
            int rowY = piece.getBlockY(i);
            // 如果一行被填充满,则标记为完成
            if(board.checkRowCompleted(rowY)) {
                this.markRowCompleted(rowY, true);
            }
        }
       int numClearedRows = 0;
        for(int y = TetrisConstants.HEIGHT - 1; y >= 0; y--) { //从下到上重复
            if(numClearedRows > 0) {
                board.dropRow(y, numClearedRows);
            }
            if(this.isRowCompleted(y)) {
                numClearedRows++;
                this.markRowCompleted(y, false);    // 为下一次重置
            }
        }
        // 清除最上面的完成行数
        for(int i = 0; i < numClearedRows; i++) {
            board.clearRow(i);
        }
        return numClearedRows;
    }
为了增加玩家在游戏过程中的游戏性,下落的方块设置成随机生成,这里利用rand.nextInt方法得到随机数,下面是随机生成方块功能的部分代码,如下:
    private int getRandomPieceType() {
        return Math.abs(rand.nextInt() % TetrisConstants.NUM_PIECE_TYPES) + 1;
    }
   首先用rand.nextInt()方法得到随机数后,用随机数除以TetrisCanstants中定义的表示方块类型数的常量NUM_PIECE_TYPE,其值初始值为7,取余后加1取其绝对值。实现效果如下图:
17 游戏进行状态图
在前面4.3部分通过图9的系统生命周期流程图,已经了解了游戏中断处理的过程。在游戏运行时可以按右软键调用程序生命周期中pauseApp()方法暂停游戏,方块会停在暂停位置,直到玩家再次点击右软键恢复游戏,pauseApp()方法代码如下:
protected void pauseApp() {
        // 挂起程序使游戏进入暂停状态
        if(TetrisConstants.RUNNING_STATE == this.gameState) {
            this.pauseGame();
        } }
pauseApp方法中调用了pauseGame()方法,其实现代码如下:
private void pauseGame() {
        // 把暂停命令替换成恢复命令
        this.gameCanvas.removeCommand(this.pauseCommand);
        this.gameCanvas.addCommand(this.resumeCommand);
        // 进入暂停状态并停止下落
        this.setGameState(TetrisConstants.PAUSED_STATE);
        this.dropThread.stopThread();}
游戏暂停阶段画面如下:
18 游戏暂停状态图
当点击右软件恢复游戏后,方块从暂停位置继续下落,这里用了resumeGame()来实现此功能,代码如下:
private void resumeGame() {
        // 把恢复命令替换成暂停命令
        this.gameCanvas.removeCommand(this.resumeCommand);
        this.gameCanvas.addCommand(this.pauseCommand);
        // 进入运行状态并下落
        this.setGameState(TetrisConstants.RUNNING_STATE);
        this.runDropThread();}
游戏恢复阶段状态,如下图:
19 游戏恢复状态图

 

 

本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT

本文选自计算机毕业设计http://myeducs.cn
论文文章部分只是部分简介,如需了解更多详情请咨询本站客服!QQ交谈QQ3710167

原创论文

设为首页 | 加入收藏 | 论文首页 |原创论文 |
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师