fix: rule game for kot and hakem kot
This commit is contained in:
@@ -58,6 +58,7 @@ type handOverMsg struct {
|
||||
Type string `json:"type"` // "hand_over"
|
||||
WinnerTeam int `json:"winner_team"`
|
||||
Kot bool `json:"kot"`
|
||||
HakemKot bool `json:"hakem_kot"`
|
||||
Points int `json:"points"`
|
||||
Scores [2]int `json:"scores"`
|
||||
}
|
||||
|
||||
+7
-2
@@ -101,7 +101,12 @@ func (r *Room) run() {
|
||||
|
||||
// start بازی را ساخته، matched را برای انسانها فرستاده و وضعیت اولیه را پخش میکند.
|
||||
func (r *Room) start() {
|
||||
r.game = game.NewGame(targetScore, game.FirstHakem())
|
||||
// تعداد هَندِ لازم برای برد بازی از روی نوعِ میز (tier) تعیین میشود.
|
||||
target := r.settler.TargetHands(r.tier)
|
||||
if target <= 0 {
|
||||
target = targetScore
|
||||
}
|
||||
r.game = game.NewGame(target, game.FirstHakem())
|
||||
for seat, s := range r.seats {
|
||||
if s.client != nil {
|
||||
s.client.trySend(mustJSON(r.matchedFor(seat)))
|
||||
@@ -127,7 +132,7 @@ func (r *Room) react() {
|
||||
res := r.game.LastResult
|
||||
r.broadcast(mustJSON(handOverMsg{
|
||||
Type: "hand_over", WinnerTeam: res.WinnerTeam, Kot: res.Kot,
|
||||
Points: res.Points, Scores: r.game.Scores,
|
||||
HakemKot: res.HakemKot, Points: res.Points, Scores: r.game.Scores,
|
||||
}))
|
||||
if err := r.game.NextHand(); err != nil {
|
||||
slog.Error("next hand", "room", r.ID, "err", err)
|
||||
|
||||
@@ -7,12 +7,15 @@ type Settler interface {
|
||||
Refund(userID int64, tier string) // بازگرداندن ورودی در صورت لغو
|
||||
AwardWinner(userID int64, tier string) // جایزه/XP/جام به برنده
|
||||
RecordGame(room, playersJSON string, winnerTeam int, kot bool)
|
||||
// TargetHands تعداد هَندِ لازم برای برد بازی در این tier (مثلاً مبتدی=۳).
|
||||
TargetHands(tier string) int
|
||||
}
|
||||
|
||||
// noopSettler پیشفرض (برای تستها و حالت بدون اقتصاد).
|
||||
type noopSettler struct{}
|
||||
|
||||
func (noopSettler) ChargeEntry(int64, string) error { return nil }
|
||||
func (noopSettler) Refund(int64, string) {}
|
||||
func (noopSettler) AwardWinner(int64, string) {}
|
||||
func (noopSettler) RecordGame(string, string, int, bool) {}
|
||||
func (noopSettler) ChargeEntry(int64, string) error { return nil }
|
||||
func (noopSettler) Refund(int64, string) {}
|
||||
func (noopSettler) AwardWinner(int64, string) {}
|
||||
func (noopSettler) RecordGame(string, string, int, bool) {}
|
||||
func (noopSettler) TargetHands(string) int { return 7 }
|
||||
|
||||
@@ -346,6 +346,9 @@ func (s *recordingSettler) RecordGame(string, string, int, bool) {
|
||||
s.records++
|
||||
s.mu.Unlock()
|
||||
}
|
||||
|
||||
// برای سرعتِ تست، بازی پس از ۲ هَند تمام میشود.
|
||||
func (s *recordingSettler) TargetHands(string) int { return 2 }
|
||||
func (s *recordingSettler) snapshot() (c, r, a, rec int) {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
Reference in New Issue
Block a user