来咯!因为章节较多,先做小部分回顾,熟悉的朋友就直接跳过吧。
-----------回顾分割线-----------
此系列旨在开发类似“谁是卧底+杀人游戏”的捉鬼游戏在线版,记录从分析游戏开始的开发全过程,通过此项目让自己熟悉面向对象的SOLID原则,提高对设计模式、重构的理解。
系列索引点这里,游戏整体流程介绍与技术选型点这里,之前做了一半的版本点这里(图文)
在设计业务对象与对象职责划分(1)中对之前做的版本进行了截图说明部分views的细节,相信大家已对游戏流程更熟悉了(我也回顾了一遍,包括游戏技巧很有意思~),本第(2)篇主讲MVC的M和C,深入剖析游戏业务在代码中的体现。如索引篇所说,大家的技术性吐槽与质疑是对其他读者和我最大的帮助;如上一篇所言,这个做了一半的版本坏味道很多,尤其从设计模式的角度看就更明显了(这个系列做完,我计划再写一个俄罗斯方块系列,俄罗斯方块是已经做好的C#+WinForm,但同样是坏味道严重,拓展不易,也才更需要update),所以才有了重写一遍捉鬼游戏,并想把整个项目建设过程同步更新到博客园,以给和我一样的初学者一个共同思考和进步的途径。我始终相信,知其然还要知其所以然,甚至和项目开发者同步思考过、犯过错、再一起探讨与改正过,会获得更深刻的经验。也欢迎朋友们勇敢的在最后把代码直接拿去说这是我和一位博客园朋友一期开发的小项目![自豪] 笔者对“开源”一词的理解还不太深刻,但我相信无偿的提供代码、写代码的心得,甚至写代码的全程思考会让大家比直接拿商用代码更有价值。
-----------回顾结束分割线-----------
-----------本篇开始分割线-----------
1. Models
业务类目录
从类目录可看出一共7个类,先从最辅助性的英雄(啊不是英雄,是类)Setting开始(已在上篇贴过代码)
(1)Setting(设置类)负责从Web.config获取游戏人数的设定(标配9人,开发测试3人),Setting作为全局访问点采用了singleton单例模式。
public class Setting { private int _civilianCount; private int _ghostCount; private int _idioCount; public int IdioCount { get { return _idioCount; } } public int GhostCount { get { return _ghostCount; } } public int CivilianCount { get { return _civilianCount; } } public int GetTotalCount() { return IdioCount + GhostCount + CivilianCount; } // singleton private static Setting _instance; private Setting() { this._civilianCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["CivilianCount"]); this._ghostCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["GhostCount"]); this._idioCount = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["IdioCount"]); } public static Setting CreateInstance() { if (_instance == null) { _instance = new Setting(); } return _instance; } }