项目开设计俄罗斯方块Word格式.docx

上传人:b****2 文档编号:3022393 上传时间:2023-05-01 格式:DOCX 页数:13 大小:509.01KB
下载 相关 举报
项目开设计俄罗斯方块Word格式.docx_第1页
第1页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第2页
第2页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第3页
第3页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第4页
第4页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第5页
第5页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第6页
第6页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第7页
第7页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第8页
第8页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第9页
第9页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第10页
第10页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第11页
第11页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第12页
第12页 / 共13页
项目开设计俄罗斯方块Word格式.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

项目开设计俄罗斯方块Word格式.docx

《项目开设计俄罗斯方块Word格式.docx》由会员分享,可在线阅读,更多相关《项目开设计俄罗斯方块Word格式.docx(13页珍藏版)》请在冰点文库上搜索。

项目开设计俄罗斯方块Word格式.docx

运行游戏后,可选择游戏难度,游戏开始后,由程序随机产生所定义的图形,右上角可看到下一个图形,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,可以由键盘控制向左右下移动,可通过空格键进行翻转,可以进行暂停、重新开始游戏,当某一行被下落的方块填满后消除并计分,难度越大方块下落速度相对提高,另外可修改游戏窗体风格。

(二)性能需求

1、游戏在不同分辨率下应能适应各种分辨率保证不变形。

2、保证游戏性能,在双核512M内存下应能流畅运行。

三、涉及主要知识点

(一)、开发环境搭建与配置

1、jdk安装配置

2、eclipse安装配置

(二)、界面布局

1、AWT、Swing

2、菜单使用

(三)、游戏方块

整个游戏中总共7种方块样式,每个方块有4种变形,通过线程控制由4*4个方格构成的一个方块的移动、下落以及变形。

(四)、游戏画布

通过线程动态改变游戏画布的方格颜色,画布通过检查方格颜色来体现方块的移动

(五)、事件

键盘监听事件

(六)、线程

整个游戏由线程控制,一轮游戏过程,实现了Runnable接口,一轮游戏是一个大循环,在这个循环中,每隔100毫秒;

检查游戏中的当前块是否已经到底了,如果没有,就继续等待。

如果到底了,就看有没有全填满的行,如果有就删除它,并为游戏者加分,同时随机产生一新的当前块,让它自动下落。

当新产生一个块时,先检查画布最顶上的一行是否已经

被占了,如果是,可以判断GameOver了。

四、概要设计

(采用开发模式、框架、模块划分、模块之间通讯设计等,本项目无)

五、数据库设计

(概念数据模型、物理数据模型、表、字段、约束、存储过程、函数、视图等,本项目无)

六、界面设计

本游戏只包含1个主界面

游戏菜单下包括开始新游戏、设置游戏方块颜色、设置背景颜色、改变游戏难度等。

控制菜单下包括游戏的暂停、继续、重新开始以及停止。

窗体风格菜单下用来设置游戏窗体风格。

关于菜单下包括帮助和游戏简介

七、类设计

本项目包含ErsBlock、ErsBlocksGame、ControlPanel、ErsBox以及GameCanvas5个类,具体设计如下:

(一)ErsBlock类

该类的主要功能为设计游戏方块类,继承自线程类(Thread),由4*4个方格(ErsBox)构成一个块,控制块的移动、下落、变形等。

(二)ErsBlocksGame类

该类的主要功能为游戏主类,继承自JFrame类,负责游戏的全局控制。

内含

1一个GameCanvas画布类的实例引用,

2一个保存当前活动块(ErsBlock)实例的引用,

3一个保存当前控制面板(ControlPanel)实例的引用;

利用线程实现了一轮游戏过程,一轮游戏是一个大循环,在这个循环中,每隔100毫秒,检查游戏中的当前块是否已经到底了,如果没有,就继续等待。

如果到底了,就看有没有全填满的行,如果有就删除它,并为游戏者加分,同时随机产生一个新的当前块,让它自动下落。

当新产生一个块时,先检查画布最顶上的一行是否已经被占了,如果是,可以判断GameOver了。

(三)ControlPanel类

该类的主要功能控制面板类,继承自JPanel.上边安放预显窗口、等级、得分、控制按钮,主

要用来控制游戏进程。

(四)ErsBox类

该类的主要功能是实现方格类,是组成块的基本元素,用自己的颜色来表示块的外观

(五)GameCanvas类

该类的主要功能是实现画布类,内有行数*列数个方格类实例。

继承自JPanel类。

ErsBlock线程类动态改变画布类的方格颜色,画布类通过检查方格颜色来体现ErsBlock块的移动情况。

八、技术难点、解决方案和关键代码

1、游戏方块的旋转和移动

游戏中总共有7种方块类型,每种方块有4种翻转,因此我们在程序中利用点阵图,把4位16进制数按每位换算成一行4位2进制数的结果矩阵,理解为一个4*4的矩阵,比如说0x04e0转换完后就是

0000

0100

1110

其中将0看作空的,1看作方块的块,就可以看出正好是长条形在4*4空间中的横竖切换

/**

*方块的样式数目为7

*/

privatefinalstaticintBLOCK_KIND_NUMBER=7;

/**

*每一个样式的方块的反转状态种类为4

privatefinalstaticintBLOCK_STATUS_NUMBER=4;

*分别对应对7种模型的28种状态

publicfinalstaticint[][]STYLES={//共28种状态

{0x0f00,0x4444,0x0f00,0x4444},//长条型的四种状态

{0x04e0,0x0464,0x00e4,0x04c4},//'

T'

型的四种状态

{0x4620,0x6c00,0x4620,0x6c00},//反'

Z'

{0x2640,0xc600,0x2640,0xc600},//'

{0x6220,0x1700,0x2230,0x0740},//'

7'

{0x6440,0x0e20,0x44c0,0x8e00},//反'

{0x0660,0x0660,0x0660,0x0660},//方块的四种状态

};

方块的移动分为向左、右和下3个方向,

*块向左移动一格

publicvoidmoveLeft(){

moveTo(y,x-1);

}

*块向右移动一格

publicvoidmoveRight(){

moveTo(y,x+1);

*块向下落一格

publicvoidmoveDown(){

moveTo(y+1,x);

*将当前画移动到newRow/newCol所指定的位置

*@paramnewRowint,目的地所在行

*@paramnewColint,目的地所在列

*@returnboolean,true-移动成功,false-移动失败

privatesynchronizedbooleanmoveTo(intnewRow,intnewCol){

if(!

isMoveAble(newRow,newCol)||!

moving)returnfalse;

earse();

y=newRow;

x=newCol;

display();

canvas.repaint();

returntrue;

对于方块的翻转,

*块变型

publicvoidturnNext(){

for(inti=0;

i<

BLOCK_KIND_NUMBER;

i++){

for(intj=0;

j<

BLOCK_STATUS_NUMBER;

j++){

if(STYLES[i][j]==style){

intnewStyle=STYLES[i][(j+1)%BLOCK_STATUS_NUMBER];

turnTo(newStyle);

return;

}

}

}

*将当前块变成newStyle所指定的块样式

*@paramnewStyleint,将要改变成的块样式,对应STYLES的28个值中的一个

*@returnboolean,true-改变成功,false-改变失败

privatebooleanturnTo(intnewStyle){

isTurnAble(newStyle)||!

intkey=0x8000;

boxes.length;

boxes[i].length;

booleanisColor=((newStyle&

key)!

=0);

boxes[i][j].setColor(isColor);

key>

>

=1;

style=newStyle;

2、游戏中消行和结束

如果游戏画布中有全填满的行,我们就应该从画布中删除当行,根据最顶行是否被占来判断游戏是否结束。

*检查画布中是否有全填满的行,如果有就删除之

*/

publicvoidcheckFullLine(){

for(inti=0;

canvas.getRows();

introw=-1;

booleanfullLineColorBox=true;

for(intj=0;

canvas.getCols();

if(!

canvas.getBox(i,j).isColorBox()){

fullLineColorBox=false;

break;

}

if(fullLineColorBox){

row=i--;

canvas.removeLine(row);

*当一行被游戏者叠满后,将此行清除,并为游戏者加分

*@paramrowint,要清除的行,是由ErsBoxesGame类计算的

publicsynchronizedvoidremoveLine(introw){

for(inti=row;

i>

0;

i--){

cols;

j++)

boxes[i][j]=(ErsBox)boxes[i-1][j].clone();

score+=ErsBlocksGame.PER_LINE_SCORE;

scoreForLevelUpdate+=ErsBlocksGame.PER_LINE_SCORE;

repaint();

/**

*根据最顶行是否被占,判断游戏是否已经结束了。

*@returnboolean,true-游戏结束了,false-游戏未结束

privatebooleanisGameOver(){

ErsBoxbox=canvas.getBox(0,i);

if(box.isColorBox())returntrue;

returnfalse;

九、参考资料

1、俄罗斯方块需求分析

2、基JAVA的俄罗斯方块游戏开发

3、多线编程

4、俄罗斯方块设计文档

资料仅供参考!

!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2