大话设计模式之单一职责原则

前端之家收集整理的这篇文章主要介绍了大话设计模式之单一职责原则前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

很高兴又在每天的这个时间和大家一起分享自己的学习见解,今天我看了一下大话设计模式里面的单一职责原则,现在就跟大家一起分享一下自己的学习成果:

单一职责的定义:

就一个类而言,应该只有一个引起它变化的原因。

为什么要使用单一职责模式呢:

如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱或者抑制这个类完成他职责的能力。这种耦合会导致脆弱的设计,设计会遭到意想不到的破坏。

现在用俄罗斯方块游戏的设计思路为例:

设计逻辑:

俄罗斯方块方块下落动画原理是画4个小方块,擦掉,然后在在下一行画4个小方块,不断的绘制和擦除就形成了动画效果,所以要有绘制和擦除的代码,除此之外,还有左移,右移,下移,翻转的代码,这些都是函数,当然左移和右移要考虑碰撞问题,下移要考虑消层和堆积问题。

界面设计:

建立一个winform窗体,添加一个用于游戏框的控件,比如一个panel,一个按钮来控制开始,再放一个Timer用于分时动画编程。写代码就是编写Timer_Tick来绘制和擦除方块,并做出消层和堆积判断,再编写控件的键盘事件,控制方块的动作,还需要用些GDI+的技术来绘制和擦除方块。

现在就要考虑如何分层编程了,这也是这一款游戏的关键所在

方块的可移动区域可以用一个二维数组来表示坐标,宽10,高20;比如:int[,]=new int[10,20];那么整个方块移动就只是数组下标的变换,比如原方块在arraysquery=[3,5];上,则下移就变成了arraysquery=[3,6];左移就变成了arraysquery=[2,5];右移就是arraysquery=[4,5];每个数组的值就是是否存在方块的标识,存在为1,不存在为0,这下你该明白了,所谓的碰撞其实是什么。

是否能左移,就是判断arraysquery[x-1,y]是否为1,否则就撞墙了,arraysquery[x,y+1]是否为1,则说明堆积了,所谓堆积只不过是判断arraysquery[x,y+1]是否为1的过程,如果为一,则arraysquery[x,y]=1,那么消层其实就是arraysquery[x,y]中循环x由0到9,判断arraysquery[x,y]是否为1,是则此行数据清零,将上一层的数组值遍历下移一位。

现在你也许明白了,所谓的游戏逻辑,其实就是数组中每一项值变化的问题,下落,旋转,左移,右移,堆积,碰撞其实都只是数组值的变化,而界面逻辑,不过是窗体类根据数组值进行绘制和擦除,或者根据键盘事件调用数组相应的方法进行变换。由此可见至少应该将该程序分两个类,一个游戏逻辑类,一个窗体类,这样以后如果更换界面,只用重新编写窗体类即可。

由于时间已晚,源码我将在我整理完毕以后通知大家,供大家下载进行研究

感谢大家对Darren博客支持,大家也可以评论大家一起交流学习,学无止境

源码已经整理完毕,请大家下载源码进行研究:

http://download.csdn.net/detail/fwj380891124/4301746

猜你在找的设计模式相关文章