上回说到如何制作一个象棋的游戏。还没阅读的可以到以下链接。
https://hive.blog/hive-105017/@tensaix2j/5hgiq9-decentraland-part-3
今天来说说如何制作一个德州扑克游戏
基本上要制作一个 Texas Holdem , 就不能像上次那样完全在client side 实现,
那是因为象棋里,大家所看到的 Global Shared State 是一致的。 基本上只是 PlayerA 跟 PlayerB 轮流update 这个 global shared state 仅此而已
Poker 就不能让大家看到彼此的底牌了。只有 server 看到所有人的 state ,client 只可以看到自己底牌的部分。 所以还是要写server script 来负责控制全局的状态。
那么,跟往常一样, 首先也是去github 看看有没有现成的代码可以直接使用, 找了找,是有很多, 但 都写的太复杂了。 最后还是决定自己写一个练习练习一下 。
那我暂时就把这个分成两大部分 ,
- Server 端
- Client 端,即是 Decentraland SDK 的部分。
Server 端要负责什么呢? 基本上可以分成以下这些 :
- 设立一个Websocket Listener 来接收玩家connection request
- 洗牌, 发牌。 这个可以用 Hoyle.js 里的Deck 和 Card 来完成。包挂 Hole Card 和 Community Card
- 控制游戏的 State 进度 ( Ready, Pre-Flop, Flop, Turn, River, Reveal) 。
- 接收玩家的指令 ( Check, Call, Fold, Raise, All-In , Sit , Stand )
- 检查所有玩家的 Bet 来决定以上哪些指令是valid 的 。
- 计算玩家手上的牌的 hand (Hand 就是 5 到 7 张牌可以叫出什么pattern 例如 Flush, 4 of a kind, Full House)来决定开牌后谁赢,这个用 Hoyle.js 的 HandMaker 就可以了。
- 决定Small Blind , Big Blind , Button ,UnderTheGun 的位置。因为这个决定论到谁下注。
- 处理 Split pot 问题, 比如说 PlayerA All-in 后, 会把Pot split 出去,让其他还有钱的玩家继续 raise 然后进另一个pot , 假设最后PlayerA 赢,他只能赢他有参与bet 的部分。。
- 如果玩家没动作 ,20 秒countdown 后要自动帮他 check ,如不能则 fold。
基本上很多都靠 Hoyle.js 所以我选择了用 nodejs 来完成。
Client 端需要把给state 用各种 Decentraland SDK 里 3D 模型呈现出来, 以后有空在写。。。
先写到这,以后有空在写。。。
谢谢阅读。