Java实习项目_俄罗斯方块

项目:经典俄罗斯方块:

画面20行10列的方格

画面中的最小单元:
一个小方块

设计需求分析:
最多有200个方块,这些方块有共同特征,有共同行为,
四个方块为一种方块组合,分别为ZSTOJLI
游戏运行状态:一个方块组合下落,
行为:左右移动,加速下落,旋转
屏幕右边显示下一个要落下的方块组合和得分score 每消除一行加15分,
方块组合下落至面板底部,或碰到堆积在底部的方块 ,则停止下落, 新的方块组合落下;
游戏结束转态:方块组合堆积至面板顶部

最小单元:用Cell来定义方块
    成员变量:行号row,列号col
    方法:drop(),left(),right()
方块组合:Tetromino:
    成员变量:cells = new Cell[4];
    方法:
        moveLeft();
        moveRight();
        moveDrop();
        rotate();//变形:旋转
        hit();//碰撞,堆积
        hitBound();//越界,底边堆积
        tetrominoRandom();//随机产出一种子类型,静态方法
子类(extends Tetromino):Z,S,T,O,J,L,I
        不同的构造方法,其余的方法一致
游戏界面:
    TetrominoGame
        currentOne:下落的方块组合
        currentNext:下次下落的方块组合
        cs[]:堆积在面板上的方块
        lables[][]:标记面板上的方法是否有方块

=======================================
编写:

    (1)编写方块类型:Cell
                row;行号
                col;列号
                image;方块的图片
                添加构造方法
                get/set方法
                左右移动,下落的方法
    (2)编写TetrominoGame类型,继承面板类型
         加载静态资源(静态变量和静态块)
         添加main方法,创建窗口,TetrominoGame对象
        重写了void paint(Graphics g)
        添加了paintBackground(g)
        需要定义此方法
    (3)编写Tetromino类型, 添加方法
        并编写其七个子类(7种方块组合)
    (4)回到TetrominoGame中,
        添加成员变量currentOne,调用静态方法TetrominoRandom();随机产生一种方块组合
        在paint()中添加paintCurrentOne(g);
        定义 void paintCurrentOne(Graphics g)
        添加一个成员变量 定时器timer
            在action里初始化,
            定义监听器对象,用于监听键盘事件
            根据键盘输入的上下左右,分别是变形,下落,左右移动,执行完重绘
           并在左右移动中添加条件语句(移动方向没有越界,没有面板方块障碍才能移动(在Tetromino类中添加一个判断的方法))
           添加一个死循环,每过一秒,currentOne下落一个方格(添加一个睡眠)并重绘
            给定时器设置任务,延迟0毫秒执行任务,
            间隔1毫秒循环执行 并重绘
            内部添加检查任务(方法)
        (5)在定时器中添加堆积方法hit()
            添加currentNext ,调用静态方法tetrominoRandom()随机生成一个新的方块组合;
            在paint()中添加paintCurrentNext(),并定义
            添加Cell[]  cs数组,用来存储堆积的方块,
            Boolean[][]  lable的20x10的数组,用来标记每个方格的状态
            在paint()中添加paintCs方法并定义该方法
            定义hit()方法,在Tetromino中添加判断是否与底边或与已堆积的方块堆积的方法
            若堆积,将cs扩容, currentOne的方块存入cs, 并将lable中对应的位置的false改成true;
            将currentNext赋值给currentOne, currentNext重新随机新的方块组合
          (6)在定时器中添加消除方法deleteAction()
              添加成员变量score用来统计得分
              添加并定义paintScore();
              定义deleteAction(),遍历lable,当某一行都为true时,将一行的方块消除,score+=15(每消除一行加15分),被消除的方块之上的方块,行数+1,lable对cs中剩下的方块重新遍历
          (7)在定时器中添加overAction(), 判断游戏是否结束
              添加成员变量state 和常量RUNNING=0,GAMEOVER=1
              添加并定义paintGameOver()
              定义overAction(), 当cs数组中有方块在面板顶端时,state= GAMEOVER
              并在运行时的语句前加一个if(state==RUNNING)条件语句
              在键盘监听事件中加一个"s"键 用来重新开始游戏(所有成员"初始化")

猜你喜欢

转载自blog.csdn.net/yc_hen/article/details/81608997