Golangは地主ゲームサーバーを作成します[4]:地主に電話して地主をつかみます

カードが配られた後、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()

 

おすすめ

転載: blog.csdn.net/warrially/article/details/88566721