解释:就一个类而言,仅有一个引起它变化的原因,
我们在编程过程中,会想要给一个类加各种各样的功能,但是如果有别的需求进来,我们都需要去修改这个类,这就导致这个类并不能被复用,也缺乏灵活性,一个类承担的职责越多,就等于是把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。
举例:方块游戏的设计-俄罗斯方块
-
如何设计?
-
要考虑的问题?
我们设计这个游戏,需要考虑到方块下落的原理通过方块的绘出和擦掉形成动画,所以一定要有画和擦方块的代码,然后考虑左右键的移动,下键实现加速,上键实现旋转,左右键移动还要考虑到碰撞的问题,下移需要考虑到堆积和消层的问题。
-
怎么实现单一职责原则?
下落、旋转、碰撞判断、移动、堆积,这些都是和游戏有关的逻辑,和界面是没有关系的,我们可以将界面和游戏逻辑进行分离,将程序分为两个类,一个是游戏逻辑的类,一个是WinForm窗体的类,当有一天需要改变界面的时候,就只是对窗体类进行修改,实现游戏逻辑的复用。
界面的变化是和游戏本身没有关系的,界面是容易变化的,而游戏逻辑是不太容易变化的,将它们分离开有利于界面的改动。
游戏逻辑就是数组的值的变化,下落,旋转、碰撞判断、移动、堆积都是在对数组值进行变化。
界面显示逻辑,根据数组的数据进行绘出和擦除
-
游戏逻辑?
设计一个二维数组用来表示坐标int[] arraySquare = new int[10,20]
-
-
左右键的移动:假设原方块在arraySquare【3,5】,下移就是arraySquare【3,6】,左移就是
【2,6】
-
数组的值就是是否存在方块的标志,存在即为1,不存在就是0
-
碰撞:就是判断arraySquare【x,y】x-1是否小于0,否则就是撞墙,或者arraySquare【x-1,y】是否等于1,否则说明左侧有堆积的方块
-
堆积:就是判断arraySquare【x,y+1】是否等于1,是就将自己的arraySquare【x,y】改为1
-
消层:就是arraySquare【x,y】中循环x从0到9,判断arraySquare【x,y】是否都等于1,是就数据清零,并将上方数组值遍历下移一位。
-