2

我想和你讨论一个在 erlang 中纸牌游戏的可能实现。我在网上找到的唯一完整示例是OpenPoker

我想自己创建一个,所以这是我想到的实现:

  1. 一个 gen_server 代表一副牌:当开始时创建一副牌(洗牌)。并将其存储在其状态中。提供handle_call (draw_card)

  2. 代表聊天室的 gen_server。在其状态中存储播放器进程的注册名称(例如 player1、player2、luke 等)。导出 handle_cast 加入聊天(默认情况下,当有人成功加入游戏时执行)和一个通过调用代表玩家的 gen_server 上的 handle_cast 向所有用户广播聊天消息。

  3. 一个 gen_fsm 来表示一个游戏实例。有两种状态(wait_join 和 turn)。导出 join/1 加入游戏,play_card/2 和 send_msg/2。一个参数是播放器进程的 pid。

  4. 一个 gen_server 来代表玩家。仅导出 start_link/1 ,其中参数是用于注册进程的名称(在 init 中我调用 gen_fsm 的 join 方法)。有不同的handle_calls(例如get_hand、draw_card)和handle_casts(例如play_card、deliver_msg和send_msg)

  5. 一个 gen_server 来表示主进程。导出(join_game/1 调用 player:start_link/1,send_msg/2 调用玩家的 send_msg,play_card/3 调用玩家的 play_card)。

你觉得这个架构怎么样?

提前致谢

4

0 回答 0