128 lines
2.3 KiB
Go
128 lines
2.3 KiB
Go
package dragonvstiger
|
|
|
|
import (
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
const (
|
|
POKER_CART_CNT = 52
|
|
PER_CARD_COLOR_MAX = 13
|
|
CardColor_Max = 4
|
|
Hand_CardNum = 3
|
|
A_CARD = 0
|
|
K_CARD = 12
|
|
T_CARD = 9
|
|
)
|
|
|
|
var cardSeed = time.Now().UnixNano()
|
|
|
|
type Card int
|
|
|
|
var CardValueMap = [PER_CARD_COLOR_MAX]int{13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}
|
|
|
|
type Poker struct {
|
|
buf []Card
|
|
//todo test 指定的牌放在最前面
|
|
ctrlPokers []int64
|
|
}
|
|
type PokerMemData struct {
|
|
Buf []Card
|
|
}
|
|
|
|
func NewPoker() *Poker {
|
|
p := &Poker{}
|
|
p.Shuffle()
|
|
return p
|
|
}
|
|
|
|
func (this *Poker) Shuffle() {
|
|
this.buf = this.buf[:0]
|
|
for i := 0; i < POKER_CART_CNT; i++ {
|
|
this.buf = append(this.buf, Card(i))
|
|
}
|
|
cardSeed++
|
|
rand.Seed(cardSeed)
|
|
for i := 0; i < len(this.buf); i++ {
|
|
j := rand.Intn(i + 1)
|
|
this.buf[i], this.buf[j] = this.buf[j], this.buf[i]
|
|
}
|
|
}
|
|
func (this *Poker) Next() Card {
|
|
if len(this.buf) <= 0 {
|
|
return -1
|
|
}
|
|
c := this.buf[0]
|
|
this.buf = this.buf[1:]
|
|
return c
|
|
}
|
|
|
|
func (this *Poker) Count() int {
|
|
return len(this.buf)
|
|
}
|
|
|
|
func (this *Poker) TryDTDraw(flag int32) (int32, int32) {
|
|
dCard := this.Next()
|
|
tCard := this.Next()
|
|
d := dCard % PER_CARD_COLOR_MAX
|
|
t := tCard % PER_CARD_COLOR_MAX
|
|
switch flag {
|
|
case 1: // 龙
|
|
if d > t {
|
|
break
|
|
}
|
|
if d < t {
|
|
dCard, tCard = tCard, dCard
|
|
break
|
|
}
|
|
// 龙给一张大于1的牌
|
|
for i := 0; i < len(this.buf); i++ {
|
|
if this.buf[i]%PER_CARD_COLOR_MAX > 0 {
|
|
dCard, this.buf[i] = this.buf[i], dCard
|
|
break
|
|
}
|
|
}
|
|
d = dCard % PER_CARD_COLOR_MAX
|
|
for i := 0; i < len(this.buf); i++ {
|
|
if d > this.buf[i]%PER_CARD_COLOR_MAX {
|
|
tCard, this.buf[i] = this.buf[i], tCard
|
|
break
|
|
}
|
|
}
|
|
case 2: // 虎
|
|
if d < t {
|
|
break
|
|
}
|
|
if d > t {
|
|
dCard, tCard = tCard, dCard
|
|
break
|
|
}
|
|
// 虎给一张大于1的牌
|
|
for i := 0; i < len(this.buf); i++ {
|
|
if this.buf[i]%PER_CARD_COLOR_MAX > 0 {
|
|
tCard, this.buf[i] = this.buf[i], tCard
|
|
break
|
|
}
|
|
}
|
|
t = tCard % PER_CARD_COLOR_MAX
|
|
for i := 0; i < len(this.buf); i++ {
|
|
if t > this.buf[i]%PER_CARD_COLOR_MAX {
|
|
dCard, this.buf[i] = this.buf[i], dCard
|
|
break
|
|
}
|
|
}
|
|
default:
|
|
// 和
|
|
if d == t {
|
|
break
|
|
}
|
|
for i := 0; i < len(this.buf); i++ {
|
|
if this.buf[i]%PER_CARD_COLOR_MAX == d {
|
|
tCard, this.buf[i] = this.buf[i], tCard
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return int32(dCard), int32(tCard)
|
|
}
|