java俄罗斯方块游戏毕业设计答辩
使用JavaGUI开发俄罗斯方块游戏 作者: 项目介绍 1.传统游戏 2.主要使用Java语言进行GUI设计、图形编程、线程程序开发、算法的实现思路 意义和研究目的 小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,方便人们娱乐的目的。另外也通过本程序将几年来所学的专业知识和其他方面的知识融入到实际应用中。 通过此次课题的设计,掌握如何制作一个俄罗斯方块游戏软件,以及制作游戏软件的整个流程,制作游戏软件的步骤,为以后的就业工作打下基础。 项目功能模块 图形化用户界面(GUI) 产生、绘制方块 控制方块移动、旋转 方块自动下落 方块消除 计分、排行榜 游戏界面 GamePanel的组成: A区:游戏信息 B区:下一个方块预览 C区:游戏区 GamePanel 方块的构成 俄罗斯方块的构成:一共7种图形,每种图形由四个方块组成 田字型 一字型 土字型 正反L型 正反Z型 游戏绘制Part-1 1方块数据:存储七种不同形态的方块,每个方块四种形态,定义一个四维数组来表示每种方块的不同形态。 2地图数据:本游戏地图为20X12,所以做一个20行12列的二位数据存储地图数据. 3建立游戏的坐标:用于实现方块数组和地图数组的映射关系,并将左上角做为(0,0) 4对方块数据和游戏数据的操作:确定了方块数据和地图数据的映射关系,对方块的左移、右移、下移等,只是坐标对映移动相应单位即可。 游戏绘制Part-1 5游戏绘图: 遍历方块数组绘制动态方块: for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) if(Block[blocktype][turnstate][i][j]==1) g.fill3DRect((y+j)*width,(x+i)*width,width,width,raised); 原理是每一次绘制一个单位长度的正方形格子,在将这些格子组合成某一种的形态方块。某一种形态的方块是由方块数组中的参数i和j决定的,具体是哪种形态、翻转状态的方块,由参数blocktype和turnstate决定。参数y+j表示的当前格子的横坐标,x+i表示的是纵坐标。 遍历游戏地图数组实现坠下方块的消行绘制: 当坠下的方块有满行需要重新绘制时,需要进行消行绘制。首先,可用一个数值代表游戏地图数组的某一个区域是否有方块填充,假定这个数值是2,即如果地图数组中某一个元素的值为2,则表示这个元素所代表的地图区域存在方块。进行消行绘制时需要判断地图数组的某一行是否全为2,如果全为2,则可以认为这行被方块填满,需要进行消行,然后再继续往下判断下一行,直到所有满行被消除为止。 方块产生Part A-1 图形产生算法: 生成一个7以内的随机数,分别代表不同的图形int n = (int) (Math.random() * 7); 分别在预览区和游戏区绘制图形: 预览区绘制下一个图形:Block[] preview 游戏区绘制当前图形:Block[] current 键盘监听 键盘事件的监听和处理 public void keyPressed(KeyEvent key) { switch (key.getKeyCode()) { case KeyEvent.VK_A: case KeyEvent.VK_LEFT: //左移操作 break; ………… 键盘按键的作用 ←、↓、↑、→对应,实现左移、加快下落、旋转、右移的功能 移动之前要判断是否可以移动 新位置仍在游戏区域内 新位置没有其它方块 实现移动 实现旋转 方块的移动和翻转 方块的翻转与移动比较容易实现,方块移动只需要改变方块的横坐标或纵坐标,然后重新绘制方块即可。方块翻转也只需要改变方块数据第二维turnstate的值,然后重新绘制方块即可。 算法讲解Part E-1 加分规则 简单规则:每删除一行加一个固定分值 复杂规则: 图形每下落一行加若干分,视图形不同加不同分,如一字型相对加分比Z字型少; 同时消除二行的加分比单独消除一行2次要高,同理一次性消除三行、四行的分数都要相应提高升级 每达到一定分数,游戏难度级别上升,下落速度加快 算法讲解Part E-2 升级 每达到一定分数,游戏难度级别上升,下落速度加快 算法讲解Part F-1 排行榜的实现想法 当游戏结束后,判断本次成绩是否在