我想和你讨论一下erlang中的纸牌游戏的可能实现。 我在网上找到的唯一完整示例是OpenPoker。
我想自己创建一个,所以这是我想到的实现:
代表牌组的gen_server:开始时创建一副牌(洗牌)。并将其存储在其州。提供handle_call(draw_card)
代表聊天室的gen_server。在其状态中存储播放器进程的注册名称(例如,player1,player2,luke等)。导出handle_cast加入聊天(当有人成功加入游戏时默认执行)和一个通过调用代表玩家的gen_server上的handle_cast向所有用户广播聊天消息。
gen_fsm表示游戏实例。有两种状态(wait_join和转)。导出加入/ 1加入游戏,play_card / 2和send_msg / 2。一个参数是玩家进程的pid。
代表玩家的gen_server。仅导出start_link / 1,其中参数是用于注册进程的名称(在init中我调用gen_fsm的join方法)。有不同的handle_calls(例如get_hand,draw_card)和handle_casts(例如play_card,deliver_msg和send_msg)
表示主进程的gen_server。导出(join_game / 1调用player:start_link / 1,send_msg / 2调用播放器的send_msg,play_card / 3调用播放器的play_card)。
您如何看待这种架构?
提前致谢