java写的俄罗斯方块的心得

1,分析游戏界面,通过游戏界面,抽象出来几种类型

2,定义类型

Cell:

 公共特征:行号,列号,图片

 共同行为:向左,向右,向下移动,提供JavaBean相关的规范

   Tetromino类型,其七种组合的父类

     共同特征,cells——四格方块(用数组表示)-——权限修饰词protect

     共同行为:向左,向右,向下移动,提供JavaBean相关规范

     添加randomOne()用来随机生成一个四格方块

根据父类,定义出来七种子类:T ,Z,O,I,L,J,S

给属性附具体元素

主类Tetris------extends JPanel

提供静态属性,加载静态资源

1,面板会自动调用绘制方法 paintGraphics g

2,重写paint方法,绘制图片背景,

,   3,绘制网格和嵌入墙中的方块paintWallGraphics g)提供属性wall ----是一个Cell类型的二维数组,20行,10列,属性Cell_SIZE-----一个方法的宽度

4,提供属性,

CurrentOne----正在下降的四方格

5,提供绘制正在下落的方块的方法

PaintCurrentOneGraphics g

6,在重写的paint方法中调用

    1)在paint方法中平移坐标轴到相应的位置

    2)调用paintWall()方法,且完成里面的功能

   3)画下一个下落的四方格到右上角相应的位置,paintNextOne()

 7,写一个start方法,用JPanel的对象调用此方法,在此方法中实现游戏的主要逻辑

    1)先用while(true)死循环中加入下落的方法来实现四方格的下落,每下落一次都要重新画,通过调用repaint()方法来实现,repaint()方法也是JPanel中的,且repaint()会自己调用paint()方法

    2)加入键盘监听事件,用键盘来控制四方格的移送

   3)KeyListener l=new KeyAdapter() {}匿名内部类中 //开启键盘监听事件,且是键盘按下去所调用    

         int code=e.getKeyCode()获取down键,left键,Right键的编号

        通过switch()case调用相应的方法来实现移动(其中KeyEvent.VK_DOWN是常量值==down键的编号, KeyEvent.VK_LEFT==left键的编号,KeyEvent.VK_RIGHT==Right键的编号)

4)再外类中写softDropAction()方法来实现down键控制下落

      在其中会调用canDrop()方法,来判断是否能继续下落

      若能下落currentOne调用Tetromino指向的子类中的softDrop()方法来实现下落

 5)在外类中写moveLeft()方法来实现left键控制左移

     先执行一次左移currentOne.moveLeft(),currentOne调用Tetromino指向的子类中的moveLeft()方法来实现;

    再调用noMove()和coincide()方法,来判断是否需要右移来抵消多左移的一次

    因为noMove()代表是否出最左边的线,coincide()代表是否与已有的方块重合,若返回true则通过currentOne.moveRight()来抵消

5)在外类中写moveRight()方法来实现left键控制左移

    实现和外类中的moveLeft()类似

 6)注意:在moveLeft()和moveRight()方法的判断条件是noMove与coincide或的关系,一定要把noMove()写在      coincide()的前面,这样可以防止在coincide()方法中出现数组下标越界的异常

备注:javaBean规范,就是程序员在定义类时,默认遵守的一种规范

   如:(1)添加两个构造器

(2)属性一般都是私有化

(3) 提供共有的get/set方法

(4)重写toString方法,用来描述属性的信息

(5)重写equals方法和hasCode方法

猜你喜欢

转载自blog.csdn.net/qq_40881157/article/details/80465213