摘要:
这个系列写到这里,主要关注的2点在于。 1. 到底是call好还是cast好 2. 到底怎么测试更简单 现在发现前面的想法坚持不下来,让我觉得不舒服。 1. call 还是比较适用于阻塞期间无需及时处理其他消息的用法,这不适合多人游戏。 之前为什么纠结于这个问题,实际上是希望利用call的有返回方便 阅读全文
摘要:
通常,所有的玩家的操作都会经过玩家进程去处理。那么当玩家的操作很多的时候 该怎么去设计划分呢?(比如你有任务模块、充值模块、不同玩法模块的时候)。 在以前的项目中,大家是这么做的,以数字编码模块, 比如 handle(1xxxxx) 处理登录 handle(2XXXX)处理任务等等。 然后1xxxx 阅读全文
摘要:
上回讲到,游戏逻辑交由Table去测试了,TableServer似乎没有什么可测的了。 想了下,TableServer还是有点东西可测的,至少我们可以测试API接口是否正常。 所以现在补了点TableServer的测试。代码也做了点修改。 另外顺便提一下,如果在一个节点只用1个Registry提供P 阅读全文
摘要:
这回增加了不翻牌,不补牌操作以及牌局加速的测试。 代码已经提交,测试肯定失败! 为了使测试通过,我们需要给增加字段标识操作状态。 在哪加好呢?table 加?可以。但在seat加更自然。 我的状态需要标识三种, 可以用nil 表示尚未操作, true 翻牌, false 不翻牌。 补牌也是。 下回使 阅读全文
摘要:
之前写了篇关于call还是cast的讨论,实际等要改成call的时候又发生了疑问。 因为call的确有如下作用: 1. 阻塞客户端 2. 有返回值能确定操作是否成功,并能很好的支持测试 3. 保证时序,只有call成功了,才能继续执行下一步 可是除此之外,还有其他好处吗?麻烦呢? 如果table_s 阅读全文
摘要:
轮到处理桌子进程了。桌子进程抛开消息发送,基本上就是table的转调用。 无谓测试驱动先还是写代码先,反正怎么顺就怎么搞。 defmodule TableServer do use GenServer, restart: :temporary, start: {__MODULE__, :start_ 阅读全文
摘要:
上回提到SImpleTable有些函数的cond 少了true字句, 表明我们的测试覆盖不到。 这回给增加了上去,并改进了几个api。 相应的测试代码也做了更正。 有测试做支撑,可以放心修改。 已经提交到git, 从git看更方便。 我们显然还有测试或者功能要完成, 比如区分翻牌和补牌阶段,什么时候 阅读全文
摘要:
error_msg.ex 使用了点宏 (废了点时间,一致在尝试抹初那段for,想直接定义个工具宏, 由于生疏了没能很快成功, 好在for的代码也很简短,而实际上从csv生成的话,也是要做循环工作,算是安慰) defmodule ErrorMsg do @msgs %{ player_not_enou 阅读全文
摘要:
测试驱动,先simple_table_test.exs 里增加测试吧。 目前想到的这么多,如果遗漏后续增加, 写测试代码比业务代码还是难, 好处是提前想下模块的api接口。 像我这样一下子写那么多测试,其实也不对,反馈周期太长,测试驱动就没乐趣了, 而且代码调整可能导致测试要重新调整。 (这里只是示 阅读全文
摘要:
发现编写代码的时间和思考测试的时间比例是2:8,甚至于更少。大量的时间花在思考怎么编写测试。 无论是否使用测试驱动,我们都需要考虑使测试更容易。 测试的目标大致有2点: 1. 测试尽可能覆盖全 2. 同时测试尽量少(测试多了,必然是混乱的) 目前写到这里要逐步进入游戏逻辑了。table显然会有状态迁 阅读全文