カードが配られた後、3人のプレーヤーは地主に入札し、地主をつかみます。
したがって、論理は、地主に電話する/しない->地主をつかむ/しない->地主をつかむ/しない->取り戻す/しない
ここで使用できるgolang自体の特徴の1つは、selectを介してタイムアウトロジックを実行すると便利なことです。プレイヤーが通常選択すると、上記のchanロジックが実行されます。timeoutは次のchanロジックを実行します。
// 叫地主
ch := make(chan int, 1)
self.chDefineDZ = ch
select {
case <-ch:
log.Println("叫地主")
case <-time.After(time.Second * 5): // 假设5秒超时
log.Println("超时")
}
サーバーへのアクセスがまだないため、クライアントの操作とロジックを一時的にシミュレートすることしかできません。
go func() {
log.Println("模拟客户端叫地主")
self.nDZPosition = 1 // 1号位叫地主
self.nMultiples *= 2 // 倍数要乘以2
ch <- 1
}()
家主を選択した後、家主を選択した場合は、さらに3枚のハンドカードを家主に割り当てる必要があります。家主が選択されていない場合、論理は、家主をランダムに繰り返すか強制することです。この論理は無視されます。
// 给地主分配额外的3张手牌
switch self.nDZPosition {
case 0:
log.Println("无人抢地主, 游戏应该结束, 未来再做其他的异常处理")
case 1:
self.pHandCardList1 = append(self.pHandCardList1, self.pUnderCardList...)
self.pHandCardList1.sort()
case 2:
self.pHandCardList2 = append(self.pHandCardList2, self.pUnderCardList...)
self.pHandCardList2.sort()
case 3:
self.pHandCardList3 = append(self.pHandCardList3, self.pUnderCardList...)
self.pHandCardList3.sort()
default:
log.Panicln("未知的位置")
}
self.pHandCardList1.print()
self.pHandCardList2.print()
self.pHandCardList3.print()
self.pUnderCardList.print()