很高兴又在每天的这个时间和大家一起分享自己的学习见解,今天我看了一下大话设计模式里面的单一职责原则,现在就跟大家一起分享一下自己的学习成果:
单一职责的定义:
就一个类而言,应该只有一个引起它变化的原因。
为什么要使用单一职责模式呢:
如果一个类承担的职责过多,就等于把这些职责耦合在了一起,一个职责的变化可能会削弱或者抑制这个类完成他职责的能力。这种耦合会导致脆弱的设计,设计会遭到意想不到的破坏。
现在用俄罗斯方块游戏的设计思路为例:
设计逻辑:
俄罗斯方块方块下落动画原理是画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
分享到:
相关推荐
大话设计模式之外观模式 经典代码 C#类
Android之大话设计模式——:抽象工厂模式借鉴.pdf
android之大话设计模式.pdf
设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为...
《大话设计模式》对各种设计模式,做简要归纳(原创)
android之大话设计模式整理.pdf
大话设计模式源代码之简单工厂模式 经典代码
树懒自己整理的大话设计模式的修行笔记,对程序设计有很大的帮助,主要是以自己学习的习惯整理的!
大话设计模式之代理模式 经典代码 C#类
大话设计模式源代码之策略模式 经典代码 C#类
设计模式之《大话设计模式》.pptx
用 Objective-C 实现《大话设计模式》书中的例子,并用一些 Objective-C 的特性对例子的实现加以优化,希望能对初学设计模式的 iOS 开发者有所帮助。 前言 在某些人看来学习设计模式没有什么意义,因为在实际工作中...
NULL 博文链接:https://helei050.iteye.com/blog/2086309
大话设计模式 完整设计模式介绍
大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf
大话设计模式,史上最全源码。包括23个设计模式,6个原则。
大话设计模式之小菜编程成长记 一本不错的设计模式入门书籍
NULL 博文链接:https://linxingliang.iteye.com/blog/1217811