From 4b782c6de3e1b8f5565b77e8a4abc573ad4cbdc9 Mon Sep 17 00:00:00 2001 From: Trevor Slocum Date: Sun, 7 Jan 2024 21:29:47 -0800 Subject: [PATCH] Support playing tabula games --- bot/client.go | 26 +++++++++++--------------- go.mod | 6 +++--- go.sum | 12 ++++++------ main.go | 6 +++--- 4 files changed, 23 insertions(+), 27 deletions(-) diff --git a/bot/client.go b/bot/client.go index 2264c0a..8de645a 100644 --- a/bot/client.go +++ b/bot/client.go @@ -41,13 +41,13 @@ type Client struct { sentGreeting bool rolled bool lastActivity time.Time - acey bool + variant int8 quiet bool thinkTime time.Duration analysis []*tabula.Analysis } -func NewClient(address string, username string, password string, points int, acey bool, quiet bool, thinkTime time.Duration) *Client { +func NewClient(address string, username string, password string, points int, variant int8, quiet bool, thinkTime time.Duration) *Client { const bufferSize = 10 c := &Client{ Address: address, @@ -56,7 +56,7 @@ func NewClient(address string, username string, password string, points int, ace Events: make(chan interface{}, bufferSize), Out: make(chan []byte, bufferSize), points: points, - acey: acey, + variant: variant, quiet: quiet, thinkTime: thinkTime, analysis: make([]*tabula.Analysis, 0, tabula.AnalysisBufferSize), @@ -65,8 +65,8 @@ func NewClient(address string, username string, password string, points int, ace return c } -func NewLocalClient(conn net.Conn, address string, username string, password string, points int, acey bool, quiet bool, thinkTime time.Duration) { - c := NewClient(address, username, password, points, acey, quiet, thinkTime) +func NewLocalClient(conn net.Conn, address string, username string, password string, points int, variant int8, quiet bool, thinkTime time.Duration) { + c := NewClient(address, username, password, points, variant, quiet, thinkTime) c.connecting = true go c.connectTCP(conn) c.HandleEvents() @@ -288,11 +288,7 @@ func (c *Client) handleTCPRead(conn net.Conn) { } func (c *Client) createMatch() { - acey := 0 - if c.acey { - acey = 1 - } - c.Out <- []byte(fmt.Sprintf("c public %d %d", c.points, acey)) + c.Out <- []byte(fmt.Sprintf("c public %d %d", c.points, c.variant)) c.sentGreeting = false c.rolled = false } @@ -565,21 +561,21 @@ func (c *Client) HandleEvents() { func TabulaBoard(b []int8) tabula.Board { var roll1, roll2, roll3, roll4 int8 roll1, roll2 = int8(Game.Roll1), int8(Game.Roll2) - if roll1 == roll2 { + if Game.Variant == bgammon.VariantTabula { + roll3 = int8(Game.Roll3) + } else if roll1 == roll2 { roll3, roll4 = int8(Game.Roll1), int8(Game.Roll2) } entered1, entered2 := int8(1), int8(1) - acey := int8(0) - if Game.Acey { + if Game.Variant != bgammon.VariantBackgammon { if !Game.Player1.Entered { entered1 = 0 } if !Game.Player2.Entered { entered2 = 0 } - acey = 1 } - return tabula.Board{b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], roll1, roll2, roll3, roll4, entered1, entered2, acey} + return tabula.Board{b[0], b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19], b[20], b[21], b[22], b[23], b[24], b[25], b[26], b[27], roll1, roll2, roll3, roll4, entered1, entered2, Game.Variant} } func randInt(max int) int { diff --git a/go.mod b/go.mod index 7a3e024..f9c4aae 100644 --- a/go.mod +++ b/go.mod @@ -3,9 +3,9 @@ module code.rocket9labs.com/tslocum/bgammon-tabula-bot go 1.17 require ( - code.rocket9labs.com/tslocum/bgammon v0.0.0-20240107205420-7064b0b085aa - code.rocket9labs.com/tslocum/tabula v0.0.0-20240107223909-3a825a2f6402 + code.rocket9labs.com/tslocum/bgammon v0.0.0-20240108183627-118a7f78eb98 + code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21 nhooyr.io/websocket v1.8.10 ) -require code.rocket9labs.com/tslocum/bei v0.0.0-20240107212214-bcc7b6933a4c // indirect +require code.rocket9labs.com/tslocum/bei v0.0.0-20240108012722-6db380cc190b // indirect diff --git a/go.sum b/go.sum index b69ad0c..9b76b3d 100644 --- a/go.sum +++ b/go.sum @@ -1,8 +1,8 @@ -code.rocket9labs.com/tslocum/bei v0.0.0-20240107212214-bcc7b6933a4c h1:fiH72XLcHof1XvVeBw/1NvaS+iIzoZqCTn7Mv0AAYss= -code.rocket9labs.com/tslocum/bei v0.0.0-20240107212214-bcc7b6933a4c/go.mod h1:tS60/VNAJphKvDBkSLQhKALa15msIAuWWfEKNc4oFZc= -code.rocket9labs.com/tslocum/bgammon v0.0.0-20240107205420-7064b0b085aa h1:tG9v4fLW6Dpe9QmcP4H+nG4jv9dw4QlHCRKUrch0/sc= -code.rocket9labs.com/tslocum/bgammon v0.0.0-20240107205420-7064b0b085aa/go.mod h1:qoXFACgj2k4y5996rU5+GxZ2x9De1ZyA3+GraUJpFj8= -code.rocket9labs.com/tslocum/tabula v0.0.0-20240107223909-3a825a2f6402 h1:2kqQt+6qE5hSDimNetYePHoGJmLkxFSOJWCzsgqdLyE= -code.rocket9labs.com/tslocum/tabula v0.0.0-20240107223909-3a825a2f6402/go.mod h1:0MDYsQyP0LKhY2CktMH39hUXgZK1ti3vuxLC6iHm79E= +code.rocket9labs.com/tslocum/bei v0.0.0-20240108012722-6db380cc190b h1:Y0a14Kf/hSYepSmp4ZfDeE4CZZGBGBS97CNjCbKJm0c= +code.rocket9labs.com/tslocum/bei v0.0.0-20240108012722-6db380cc190b/go.mod h1:tS60/VNAJphKvDBkSLQhKALa15msIAuWWfEKNc4oFZc= +code.rocket9labs.com/tslocum/bgammon v0.0.0-20240108183627-118a7f78eb98 h1:6lndXAeTooxepIWtpVWOhEFjig6DVh6bkVaWJVtrmX4= +code.rocket9labs.com/tslocum/bgammon v0.0.0-20240108183627-118a7f78eb98/go.mod h1:0DTOM6NviKJsDDBANcB7hbk2fseN5qtHJZAFeKsnAPQ= +code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21 h1:1VG88tdhCSVv7wGoIKQe8A8KfBXJsdz5pDsyP4ymDwk= +code.rocket9labs.com/tslocum/tabula v0.0.0-20240108183445-695ea428ae21/go.mod h1:WEJXESKXqrMFLAArikQ79lpRibNeeE1C0VruxXYMF5M= nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q= nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= diff --git a/main.go b/main.go index 1c97d2f..4f91225 100644 --- a/main.go +++ b/main.go @@ -19,7 +19,7 @@ func main() { username string password string points int - acey bool + variant int quiet bool thinkTime time.Duration debug int @@ -28,7 +28,7 @@ func main() { flag.StringVar(&username, "username", "", "Username") flag.StringVar(&password, "password", "", "Password") flag.IntVar(&points, "points", 1, "Match points") - flag.BoolVar(&acey, "acey", false, "Create acey-deucey match") + flag.IntVar(&variant, "variant", 0, "Variant (0: Backgammon, 1: Acey-deucey, 2: Tabula)") flag.Float64Var(&tabula.WeightBlot, "weight-blot", tabula.WeightBlot, "Weight (multiplier) when scoring blots") flag.Float64Var(&tabula.WeightHit, "weight-hit", tabula.WeightHit, "Weight (multiplier) when scoring hits") flag.Float64Var(&tabula.WeightOppScore, "weight-score", tabula.WeightOppScore, "Weight (multiplier) when adding opponent score to overall score") @@ -47,7 +47,7 @@ func main() { }() } - c := bot.NewClient(serverAddress, username, password, points, acey, quiet, thinkTime) + c := bot.NewClient(serverAddress, username, password, points, int8(variant), quiet, thinkTime) go c.Connect() c.HandleEvents()