Support playing tabula games
This commit is contained in:
parent
f9ffd6d518
commit
4b782c6de3
4 changed files with 23 additions and 27 deletions
|
@ -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 {
|
||||
|
|
6
go.mod
6
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
|
||||
|
|
12
go.sum
12
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=
|
||||
|
|
6
main.go
6
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()
|
||||
|
|
Loading…
Reference in a new issue