feat: smarter bot
This commit is contained in:
+7
-1
@@ -70,6 +70,9 @@ type Room struct {
|
||||
// graceUntil: تا این لحظه هیچ حرکتِ خودکاری انجام نمیشود (هماهنگ با انیمیشنهای کلاینت).
|
||||
graceUntil time.Time
|
||||
chatAt [4]time.Time // آخرین زمانِ چتِ هر جایگاه (ضدِ اسپم)
|
||||
// seen: حافظهی کارتهای بازیشده در هَندِ جاری (برای هوشِ باتِ کارتشمار).
|
||||
// بیتِ (rank-2) از seen[suit] یعنی آن کارت رو شده. هر هَند ریست میشود.
|
||||
seen [4]uint16
|
||||
}
|
||||
|
||||
func newRoom(id string, seats [4]*seatInfo, hub *Hub) *Room {
|
||||
@@ -280,6 +283,7 @@ func (r *Room) handleInput(act roomAction) {
|
||||
r.sendError(act.seat, err.Error())
|
||||
return
|
||||
}
|
||||
r.seen = [4]uint16{} // شروعِ فازِ بازیِ هَند ⇒ ریستِ حافظهی کارتها
|
||||
r.graceUntil = time.Now().Add(r.dealDelay) // انیمیشنِ پخشِ بقیهی کارتها
|
||||
r.react()
|
||||
case "reshuffle":
|
||||
@@ -340,6 +344,7 @@ func (r *Room) autoChooseTrump(seat int) {
|
||||
return
|
||||
}
|
||||
_ = r.game.ChooseTrump(seat, botChooseTrump(hand))
|
||||
r.seen = [4]uint16{} // شروعِ فازِ بازیِ هَند ⇒ ریستِ حافظهی کارتها
|
||||
r.graceUntil = time.Now().Add(r.dealDelay) // انیمیشنِ پخشِ بقیهی کارتها
|
||||
}
|
||||
|
||||
@@ -349,7 +354,7 @@ func (r *Room) autoPlayCard(seat int) {
|
||||
if len(hand) == 0 {
|
||||
return
|
||||
}
|
||||
choice := botPlay(hand, r.game.Trick, r.game.Trump, r.game.LeadSuit)
|
||||
choice := botPlay(hand, r.game.Trick, r.game.Trump, r.game.LeadSuit, r.seen)
|
||||
_ = r.playCard(seat, choice)
|
||||
}
|
||||
|
||||
@@ -359,6 +364,7 @@ func (r *Room) playCard(seat int, card game.Card) error {
|
||||
if err := r.game.PlayCard(seat, card); err != nil {
|
||||
return err
|
||||
}
|
||||
r.seen[card.Suit] |= 1 << (card.Rank - 2) // ثبت در حافظهی کارتشمارِ بات
|
||||
// بُرِش: کارتِ غیرِاولِ دست، از خالِ حکم، در حالی که خالِ زمینه حکم نبوده
|
||||
// ⇒ بازیکن خالِ زمینه را نداشته و با حکم بریده است.
|
||||
if !wasFirst && card.Suit == r.game.Trump && r.game.LeadSuit != r.game.Trump {
|
||||
|
||||
Reference in New Issue
Block a user