项目开设计俄罗斯方块Word格式.docx
- 文档编号:3022393
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:13
- 大小:509.01KB
项目开设计俄罗斯方块Word格式.docx
《项目开设计俄罗斯方块Word格式.docx》由会员分享,可在线阅读,更多相关《项目开设计俄罗斯方块Word格式.docx(13页珍藏版)》请在冰点文库上搜索。
运行游戏后,可选择游戏难度,游戏开始后,由程序随机产生所定义的图形,右上角可看到下一个图形,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,可以由键盘控制向左右下移动,可通过空格键进行翻转,可以进行暂停、重新开始游戏,当某一行被下落的方块填满后消除并计分,难度越大方块下落速度相对提高,另外可修改游戏窗体风格。
(二)性能需求
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、俄罗斯方块设计文档
资料仅供参考!
!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 项目 开设 俄罗斯方块