代码拉取完成,页面将自动刷新
对象: Pokers Player Game
功能:
Pokers 负责牌面的生成,洗牌,切牌等
Player 标识每个玩家、玩家数据等,负责发送接受广播消息等
Game 负责对当前房间内的游戏流程控制,为房间内每个玩家派发事件
关系:
Game 继承 Pokers,Game 中包含 四个Player, 四个 Player 中挂有属性 Game ↓
Game extends Pokers
Game.players = [player1, player2, player3, player4]
player1.Game = player2.Game = player2.Game = player3.Game = new Game()
1.回合制问题:
① 监听客户端触发的消息:
如果---当前玩家状态为flag ( 四个玩家只能有一个玩家状态为flag, flag 标志为允许出牌状态 )
判断当前玩家状态:
如果---当前玩家状态为等待游戏状态
返回状态
如果---当前玩家状态不为等待游戏状态
如果---当前玩家手里牌的数量为零
补牌 -----?????????
如果---当前玩家手里牌的数量不为零
转到出牌规则处理程序 ***
否则---
发送消息 ---> "还没轮到该玩家出牌!"
返回当前客户端触发的消息数据
② 拿到客户端消息回调:
判断数据:
如果数据标识为 "check" (代表玩家过牌)
不做处理 ?????????
如果数据标识不为 "check" (代表玩家已经放过牌)
将数据存进 Game 对象的 cards 属性 (记录上一次放过的牌)
将数据存进 Game 对象的 cardsArr 属性 (记录本回合中放出的牌的集合)
开始做回合制检测 ***
将当前出过牌的玩家的状态 flag 设置为 false
拿到回合制检测结果数据:
如果数据标识为 "check" (代表回合制结束)
遍历 Game 对象中的 cardsArr 属性,将有积分的牌累加,然后赋值给下一个玩家(即下一回合首次出牌玩家)
发布消息通知房间内所有玩家积分变更情况
如果数据标识不为 "check"
不做处理
将下一个玩家的 flag 属性设置为 true (轮到下一个玩家出牌)
如果数据标识为 "check"
将下一个玩家的 firstFlag 属性设置为 true (这里有点问题)
通知房间内所有玩家:该轮到谁出牌
2.回合制检测问题:
判断四个玩家:
如果有三个玩家的 check 属性为 true (一回合中三个玩家过牌就为结束状态)
开始做补牌处理 ***
返回 "check" 标识为 true
如果没有三个玩家的 check 属性为 true
放回 "check" 标识为 false
3.补牌问题
当回合制结束之后,需要对场内的玩家补牌,判断剩余牌面:
①如果---剩余牌面数量为0,直接返回不做补牌处理,并且判断玩家手中的牌数量是否为零,
如果----玩家手中的牌数量为零
设置该玩家的状态为等待游戏结束状态;
否则---
跳过
②如果---牌面数量大于零并且大于场内需要补牌的数量
应该按当前首次出牌玩家依顺序补牌;
③如果---剩余牌面数量大于零并且小于场内需要补牌的数量
应该按当前首次出牌玩家依顺序补牌;
如果---剩余牌面数量小于当前需要补牌的玩家手中的牌的数量
将剩余牌面数量补发给当前玩家;
否则---
跳过
4.出牌规则处理程序问题:
........
潜在问题,当回合制标识没有结束,但是系统牌已经没有并且场内某玩家手里牌已经没有了,程序识别不到
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。