毕业论文java俄罗斯方块游戏_第1页
毕业论文java俄罗斯方块游戏_第2页
毕业论文java俄罗斯方块游戏_第3页
毕业论文java俄罗斯方块游戏_第4页
毕业论文java俄罗斯方块游戏_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、毕业论文java俄罗斯方块游戏5 详细设计5.1模型层(model)设计5.1.1 图形的产生 通过图形工厂类shapefactory的getshape(shapelistener listener)方法随机产生方块的某种状态,这里运用了工厂设计模式,这种设计模式是为了实现高内聚低耦合而存在的,这种设计模式的通俗解释就是:你想要一个产品,你需要让工厂给你生产一个,你要告诉工厂你要生产什么产品,就把你需要生产的这个产品当做参数传给工厂类的生产产品的方法,然后根据你传进来的产品,而决定工厂人生产什么产品,产生出来产品后,最后要返回您要的这个东西。7654321随机产生一个数随机数一字形z字形反z形

2、7字形反7形倒t形田字型5.1.2 图形的数据结构 定义一个4x4方阵,共16个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此可以组合出多种图形,如图所示:其中图一表示为0,0,0,0, 1,1,1,1 , 0,0,0,0, 0,0,0,0其中图二表示为0,0,0,0, 0,1,1,0 , 0,1,1,0, 0,0,0,0其中图三表示为0,0,0,0, 0,1,0,0 , 0,1,1,1, 0,0,0,0其中图四表示为0,0,0,0, 0,1,0,1 , 0,1,1,0, 0,0,1,0方块的旋转是通过绘制4个方向的方块,在不同旋转角度显示不同方向的方块来完成的。所以程序要控制方块的

3、旋转方向,只要控制显示哪副图就可以了。本游戏是用一个三维数组int shapes = new int;作为存储方块的数据结构来保存方块的28种状态的。5.1.3 图形的移动图形类shape保存了自己的位置信息,用left表示图形到左边界的距离,top表示图形到上边界的距离,图形移动就是改变left和top的值。向上移动:top减1,向下移动:top加1,向左移动:left减1,向右移动:left加1。图形的移动分为图形的自动下落以及通过按键事件实现图形的左移、右移以及加速下移。通过多线程shapedriver类来实现图形的自动下移,由于游戏中方块的动态性,每个方块有一定的生命周期,所以选用线程

4、来实现方块。一个方块用一个线程类对象实现,该类继承与thread类,当一个方块出现时也就表示一个线程对象产生并开始运行。通过对按键事件的响应,实现图形的左移、右移以及加速下移。5.1.4 图形的变形通过int type = new random().nextint(shapes.length); shape.setbody(shapestype);shape.setstatus(0);实现初始图形的初始化,通过status = (status + 1) % body.length;实现图形的变形功能。5.1.5 存储和表示障碍物用一个和显示区域的面板大小相对应的二维数组保存障碍物的位置信息,如

5、果对应的位置是障碍物,则这个数组中相应的元素就为1,否则就为0。如何把图形变成障碍物呢?只要把属于图形的格子对应的位置都变成障碍物即可。代码如下:public boolean ismember(int x, int y, boolean rotate) int tempstatus = status;if(rotate) tempstatus = (status + 1) % body.length;return bodytempstatusy*4 + x = 1;public void accept(shape shape) system.out.println("ground&#

6、39;s accept");for(int x=0; x<4; x+) for(int y=0; y<4; y+) if(shape.ismember(x, y, false) if(shape.getleft() + x)<global.width && (shape.gettop() + y)<global.height) zawshape.getleft() + xshape.gettop() + y = 1;5.1.6 判断满行及消行如果某一行没有空白,则这一行就是满行。满的那行上面所有的行整体下移一行就是消除这个满行。代码如下:pri

7、vate void deletefullline() for(int y=global.height-1; y>=0; y-) boolean full = true;for(int x=0; x<global.width; x+) if(zawxy = 0) full = false;if(full) deleteline(y);private void deleteline(int linenum) for(int y=linenum; y>0; y-) for(int x=0; x<global.width; x+) zawxy = zawxy-1;for(int

8、 x=0; x<global.width; x+) zawx0 = 0;deletefullline();利用循环语句从屏幕最底行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给deleteline(int linenum)方法,由该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用deletefullline()方法进行查找,直到所有行都检查一遍结束。5.2视图层(view)设计5.2.1 方块的显示通过视图层的gamepanel类的paint(graphics g)方法调用shape类的drawme(graphics g)方

9、法,从而实现方块的绘制,代码如下:public void drawme(graphics g) g.setcolor(color.blue);for(int x=0; x<4; x+) for(int y=0; y<4; y+)if(getflagbypoint(x, y) g.setcolor(new shape().shapecolor);g.fill3drect(left + x)*global.cell_size, (top + y)*global.cell_size, global.cell_size, global.cell_size, true); 5.2.2 障碍物

10、的显示 通过视图层的gamepanel类的paint(graphics g)方法调用ground的drawme(graphics g) 方法,从而实现障碍物的绘制,代码如下:public void drawme(graphics g) for(int x=0; x<global.width; x+) for(int y=0; y<global.height; y+) if(zawxy = 1) g.fill3drect(x*global.cell_size, y*global.cell_size, global.cell_size, global.cell_size, true);

11、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) 方块反转测试 游戏过程中,点击向上

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论