模式应用(二) 俄罗斯方块设计的思考:用OO的思想

模式应用(二) 俄罗斯方块设计的思考:用OO的思想

         大学的时候看同学用C写的俄罗斯方块,今天心血来潮,突然想设计下用OO的思想来设计下。俄罗斯方块是一以前俄罗斯的计算机科学家自己开发娱乐的小游戏,没想到后来这么流行。

        像俄罗斯(Tetris)方块,迷宫,推箱子这种小游戏,其实建模都差不多,这里我选择一个2维数组10×20的来代表整个游戏区域的显示点,0代表该位置空,1代表有方块。 每一个数组值(a[2][4])代表屏幕上的一个像素,数组类似于:
        a[20][10] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              .........................................
                           }      
         这里有几个简单的判断:
         1. 判断是不是方块撞到墙上,就是看a[i-1]中i-1是不是<0或i+1是不是>10;
         2. 判断一层能不能clear, 就是每行是不是数组值都是1
            int k = 0; 
            for(int i=0; i<20; i++){
                for(int j = 0; j<10; j++){
                     if(a[i][j] == 1)
                            k++;
               }
               if(k==10)
                   ClearRow(i);   //把数组第i行全置0
           }
           3......其它的判断类似

            好,具体的设计思想参考图1-1
            模式应用(二) 俄罗斯方块设计的思考:用OO的思想_第1张图片 

                                                                                       图1-1      

         
         在游戏操作中,有六个键, 上下左右+左右旋转, 该图中Form是边界类与UI和用户控制打交道,Handler业务控制类, ManageArray操作singleton数组和控制一些比较复杂算法的类。

         首先该设计把整个业务算法等等从界面分离开,不管你用什么Iphone的UI的SDK还是android的, 都没问题。 他们只与我们的UIForm打交道。
         再次这边的Singleton模式把数组暴露给想要他的程序。
         最后用策略模式把旋转的算法分开,每个算法只关心自己怎么变化,想扩展就加一个类,如果一个算法要修改,那么只修改某一个方法。开闭原则。
           
         望各位博友指点
   
      

你可能感兴趣的:(模式应用(二) 俄罗斯方块设计的思考:用OO的思想)