golang制作一个斗地主游戏服务器[4]:叫地主和抢地主

发牌结束以后, 就是三家依次进行叫地主和抢地主了

所以逻辑是   叫地主/不要  -> 抢地主/不要  -> 抢地主/不要 -> 抢回来/不要

在这里可以用golang 自身的一个特性就是,  通过select 来很方便的执行超时逻辑.   玩家正常选择的时候,  执行上面的chan逻辑. 超时执行下面的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张手牌
	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