-----------回顾分割线-----------

系列之一讲述了游戏规则系列之二讲述了旧版的前台效果代码中不好的地方以及新版的改进核心,此篇开始就是新版代码编写全过程。此系列旨在开发类似“谁是卧底+杀人游戏”的捉鬼游戏在线版,记录从分析游戏开始的开发全过程,通过此项目让自己熟悉面向对象的SOLID原则,提高对设计模式、重构的理解。

索引目录

0. 索引(持续更新中)

1. 游戏流程介绍与技术选用

2. 设计业务对象与对象职责划分(1)(图解旧版本)

3. 设计业务对象与对象职责划分(2)(旧版本代码剖析)

4. 设计业务对象与对象职责划分(3)(新版本业务对象设计)

5. 业务对象核心代码编写与单元测试(游戏开始前:玩家入座与退出)

6. 业务对象核心代码编写与单元测试(游戏开始:抽题、分角色、开启鬼讨论模式)

……(未完待续)

-----------回顾结束分割线-----------

 

先放上svn代码,地址:https://115.29.246.25/svn/Catghost/

账号:guest 密码:guest(支持源代码下载,已设只读权限,待我基本做出初始版本后再放到git)

 

-----------本篇开始分割线-----------

快乐的码字生活又开始了~ 先上之前(新版本业务对象设计)分析过的流程图:

在线捉鬼游戏开发之三 - 业务对象核心代码编写与单元测试(游戏开始:抽题、分角色、开启鬼讨论模式)

上一篇已经做了1-4步,本篇处理的5-8都属于游戏开始的初始化——游戏玩家一达到数量立即自动开始,然后自动执行5-8步,第8之后就是等待鬼(Ghost)讨论谁开始首轮发言。

进一步说明就是,游戏自动检测玩家入座人数符合配置文件中的总人数时,自动由PlayerManager类通知Table,由Table再通知Game,让Game执行他自己的Start()方法。在Start()方法中,我们需要做上图的5-8步,即:抽题、分角色、开启鬼讨论模式(抽题与分角色两个步骤是可以互换的,但此处为遵循现实中的做法,便于客观理解而设计)。

一、抽题

(1)单例模式【此处有错,第四节更正】:题目类Subject,被设计为单例模式,因为只需在游戏开始前抽一次题就够了,而不需要像其他管理者(发言管理者SpeakManager、循环管理者LoopManager、投票官VoteManager、死神DeathManager、胜负判官WinManager)那样在后续的游戏进行过程中,会出现多次,所以一个实例就够了。此处同时提到负责分角色——角色管理者RoleManager(没有使用单例模式),因为RoleManager只是在Game中需要被调用一次,其他地方不会再调用也不允许再调用(不可能游戏进行到一半又重新分角色),但是Subject题目类却会始终伴随游戏进行,被各个玩家不断查阅自己的词(发言者要记录不能透露词中的字、胜负判官要判断是否被鬼猜中词),为了全局访问点,所以只能单例模式,全局访问点也是单例模式存在的一个重要的原因

(2)应该从题库抽题:为了重点放在游戏流程环节,题库和抽题的做法就不强调了,此处先写死在程序里以便测试。

public void GetSubjectFromDictionary()
{
    // Todo: get subject from system with random
    CivilianWord = "孙悟空";
    IdiotWord = "周星驰";

    GhostWord = NewGhostWord(CivilianWord, IdiotWord);
}
GetSubjectFromDictionary

相关文章:

  • 2021-05-31
  • 2021-08-07
  • 2021-03-31
  • 2021-08-28
  • 2021-11-13
  • 2022-12-23
猜你喜欢
  • 2021-06-05
  • 2021-11-13
  • 2021-07-10
  • 2021-10-06
  • 2021-06-21
  • 2021-06-25
  • 2021-06-21
相关资源
相似解决方案