毕业论文java俄罗斯方块游戏docWord下载.docx
《毕业论文java俄罗斯方块游戏docWord下载.docx》由会员分享,可在线阅读,更多相关《毕业论文java俄罗斯方块游戏docWord下载.docx(10页珍藏版)》请在冰豆网上搜索。
本游戏是用一个三维数组int[][][]shapes=newint[][][];
作为存储方块的数据结构来保存方块的28种状态的。
5.1.3图形的移动
图形类Shape保存了自己的位置信息,用left表示图形到左边界的距离,top表示图形到上边界的距离,图形移动就是改变left和top的值。
向上移动:
top减1,向下移动:
top加1,向左移动:
left减1,向右移动:
left加1。
图形的移动分为图形的自动下落以及通过按键事件实现图形的左移、右移以及加速下移。
通过多线程ShapeDriver类来实现图形的自动下移,由于游戏中方块的动态性,每个方块有一定的生命周期,所以选用线程来实现方块。
一个方块用一个线程类对象实现,该类继承与Thread类,当一个方块出现时也就表示一个线程对象产生并开始运行。
通过对按键事件的响应,实现图形的左移、右移以及加速下移。
5.1.4图形的变形
通过inttype=newRandom().nextInt(shapes.length);
shape.setBody(shapes[type]);
shape.setStatus(0);
实现初始图形的初始化,通过status=(status+1)%body.length;
实现图形的变形功能。
5.1.5存储和表示障碍物
用一个和显示区域的面板大小相对应的二维数组保存障碍物的位置信息,如果对应的位置是障碍物,则这个数组中相应的元素就为1,否则就为0。
如何把图形变成障碍物呢?
只要把属于图形的格子对应的位置都变成障碍物即可。
代码如下:
publicbooleanisMember(intx,inty,booleanrotate){
inttempStatus=status;
if(rotate){
tempStatus=(status+1)%body.length;
}
returnbody[tempStatus][y*4+x]==1;
}
publicvoidaccept(Shapeshape){
System.out.println("
Ground'
saccept"
);
for(intx=0;
x<
4;
x++){
for(inty=0;
y<
y++){
if(shape.isMember(x,y,false)){
if((shape.getLeft()+x)<
Global.WIDTH&
&
(shape.getTop()+y)<
Global.HEIGHT)
zaw[shape.getLeft()+x][shape.getTop()+y]=1;
}
}
5.1.6判断满行及消行
如果某一行没有空白,则这一行就是满行。
满的那行上面所有的行整体下移一行就是消除这个满行。
privatevoiddeleteFullLine(){
for(inty=Global.HEIGHT-1;
y>
=0;
y--){
booleanfull=true;
for(intx=0;
Global.WIDTH;
if(zaw[x][y]==0){
full=false;
if(full){
deleteLine(y);
}
privatevoiddeleteLine(intlineNum){
for(inty=lineNum;
0;
zaw[x][y]=zaw[x][y-1];
zaw[x][0]=0;
deleteFullLine();
利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给deleteLine(intlineNum)方法,由该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用deleteFullLine()方法进行查找,直到所有行都检查一遍结束。
5.2视图层(View)设计
5.2.1方块的显示
通过视图层的GamePanel类的paint(Graphicsg)方法调用Shape类的drawMe(Graphicsg)方法,从而实现方块的绘制,代码如下:
publicvoiddrawMe(Graphicsg){
g.setColor(Color.BLUE);
y++)
if(getFlagByPoint(x,y)){
g.setColor(newShape().shapeColor);
g.fill3DRect((left+x)*Global.CELL_SIZE,
(top+y)*Global.CELL_SIZE,
Global.CELL_SIZE,
Global.CELL_SIZE,
true);
5.2.2障碍物的显示
通过视图层的GamePanel类的paint(Graphicsg)方法调用Ground的drawMe(Graphicsg)方法,从而实现障碍物的绘制,代码如下:
Global.HEIGHT;
if(zaw[x][y]==1){
g.fill3DRect(x*Global.CELL_SIZE,
y*Global.CELL_SIZE,
Global.CELL_SIZE,
Global.CELL_SIZE,
true);
5.3控制层(Controller)设计
控制层主要是实现图形工厂生产图形,图形按键事件的处理,方块、障碍物显示的控制,图形自动下落和障碍物生成的控制。
通过控制层这个大管家最终实现此俄罗斯方块的按键事件的处理以及各种逻辑的处理。
5.4游戏演示
5.4.1游戏界面显示
5.4.2开始和结束控制菜单
5.4.3分数和等级查看菜单
5.4.4变换方块菜单
5.4.5帮助菜单
5.系统测试
5.1游戏界面菜单选项的功能测试
(1)“控制”菜单测试
①点击“游戏”→“开始”
输出:
游戏开始
结果:
正常
②点击“游戏”→“结束”
弹出游戏结束提示框
(2)“查看”菜单测试
①点击“查看”→“分数”
在游戏面板中间跳出分数显示框
②点击“查看”→“级别”
在游戏面板中间跳出级别显示框
(3)“变换”菜单测试
①点击“变换”→“改变方块”
在游戏面板中显示随机产生的某种方块
5.2按键事件的功能测试
(1)方块移动测试
游戏过程中,点击“左、右、下”方向键
方块正常移动,不会移出边界
(2)方块反转测试
游戏过程中,点击向上方向键
方块无边界和障碍物阻挡的情况下可反转
5.3方块堆砌与消行测试
(1)当方块下落到最底面或与障碍物接触时
方块成功堆砌在底部
(2)当出现满行现象时
所有满行被消除,方块依次下移
5.4测试结果分析
经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。