毕业论文java俄罗斯方块游戏.doc

上传人:scccc 文档编号:11227883 上传时间:2021-07-15 格式:DOC 页数:10 大小:143KB
返回 下载 相关 举报
毕业论文java俄罗斯方块游戏.doc_第1页
第1页 / 共10页
毕业论文java俄罗斯方块游戏.doc_第2页
第2页 / 共10页
毕业论文java俄罗斯方块游戏.doc_第3页
第3页 / 共10页
毕业论文java俄罗斯方块游戏.doc_第4页
第4页 / 共10页
毕业论文java俄罗斯方块游戏.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《毕业论文java俄罗斯方块游戏.doc》由会员分享,可在线阅读,更多相关《毕业论文java俄罗斯方块游戏.doc(10页珍藏版)》请在三一文库上搜索。

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(Grounds accept

6、);for(int x=0; x4; x+) for(int y=0; y4; y+) if(shape.isMember(x, y, false) if(shape.getLeft() + x)Global.WIDTH & (shape.getTop() + y)=0; y-) boolean full = true;for(int x=0; x0; y-) for(int x=0; xGlobal.WIDTH; x+) zawxy = zawxy-1;for(int x=0; xGlobal.WIDTH; x+) zawx0 = 0;deleteFullLine();利用循环语句从屏幕最底

7、行依次向上对有方块的每一行进行判断,判断某一行中是否有空白,如果没有空白的话,则将当前的行号传递给deleteLine(int lineNum)方法,由该方法实现消除当前行,并将上面的方块依次下移一行,最后再重新调用deleteFullLine()方法进行查找,直到所有行都检查一遍结束。5.2视图层(View)设计5.2.1 方块的显示通过视图层的GamePanel类的paint(Graphics g)方法调用Shape类的drawMe(Graphics g)方法,从而实现方块的绘制,代码如下:public void drawMe(Graphics g) g.setColor(Color.BL

8、UE);for(int x=0; x4; x+) for(int y=0; y4; 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 障碍物的显示 通过视图层的GamePanel类的paint(Graphics g)方法调用Ground的drawMe(Graphics g) 方法,从而实现

9、障碍物的绘制,代码如下:public void drawMe(Graphics g) for(int x=0; xGlobal.WIDTH; x+) for(int y=0; yGlobal.HEIGHT; y+) if(zawxy = 1) g.fill3DRect(x*Global.CELL_SIZE, y*Global.CELL_SIZE, Global.CELL_SIZE, Global.CELL_SIZE, true);5.3 控制层(Controller)设计控制层主要是实现图形工厂生产图形,图形按键事件的处理,方块、障碍物显示的控制,图形自动下落和障碍物生成的控制。通过控制层这个

10、大管家最终实现此俄罗斯方块的按键事件的处理以及各种逻辑的处理。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 测试结果分析 经过测试,本游戏实现了基本的功能,不过整体功能还不是很强大,作为开发的第一个版本,游戏在很多方面还需要进一步完善。10

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1