用 Decentraland SDK 制作一个多人连线扑克游戏

in HIVE CN 中文社区5 years ago (edited)


上回说到如何制作一个象棋的游戏。还没阅读的可以到以下链接。
https://hive.blog/hive-105017/@tensaix2j/5hgiq9-decentraland-part-3


今天来说说如何制作一个德州扑克游戏

image.png

基本上要制作一个 Texas Holdem , 就不能像上次那样完全在client side 实现,

那是因为象棋里,大家所看到的 Global Shared State 是一致的。 基本上只是 PlayerA 跟 PlayerB 轮流update 这个 global shared state 仅此而已

Poker 就不能让大家看到彼此的底牌了。只有 server 看到所有人的 state ,client 只可以看到自己底牌的部分。 所以还是要写server script 来负责控制全局的状态。

那么,跟往常一样, 首先也是去github 看看有没有现成的代码可以直接使用, 找了找,是有很多, 但 都写的太复杂了。 最后还是决定自己写一个练习练习一下 。

那我暂时就把这个分成两大部分 ,

  1. Server 端
  2. Client 端,即是 Decentraland SDK 的部分。


Server 端要负责什么呢? 基本上可以分成以下这些 :

  1. 设立一个Websocket Listener 来接收玩家connection request
  2. 洗牌, 发牌。 这个可以用 Hoyle.js 里的Deck 和 Card 来完成。包挂 Hole Card 和 Community Card
  3. 控制游戏的 State 进度 ( Ready, Pre-Flop, Flop, Turn, River, Reveal) 。
  4. 接收玩家的指令 ( Check, Call, Fold, Raise, All-In , Sit , Stand )
  5. 检查所有玩家的 Bet 来决定以上哪些指令是valid 的 。
  6. 计算玩家手上的牌的 hand (Hand 就是 5 到 7 张牌可以叫出什么pattern 例如 Flush, 4 of a kind, Full House)来决定开牌后谁赢,这个用 Hoyle.js 的 HandMaker 就可以了。
  7. 决定Small Blind , Big Blind , Button ,UnderTheGun 的位置。因为这个决定论到谁下注。
  8. 处理 Split pot 问题, 比如说 PlayerA All-in 后, 会把Pot split 出去,让其他还有钱的玩家继续 raise 然后进另一个pot , 假设最后PlayerA 赢,他只能赢他有参与bet 的部分。。
  9. 如果玩家没动作 ,20 秒countdown 后要自动帮他 check ,如不能则 fold。

基本上很多都靠 Hoyle.js 所以我选择了用 nodejs 来完成。

Client 端需要把给state 用各种 Decentraland SDK 里 3D 模型呈现出来, 以后有空在写。。。

先写到这,以后有空在写。。。

谢谢阅读。