Add quiet flag

This commit is contained in:
Trevor Slocum 2023-12-05 00:31:50 -08:00
parent 55baea3f17
commit 7484d56da1
4 changed files with 39 additions and 30 deletions

View file

@ -36,10 +36,11 @@ type Client struct {
sentGreeting bool
rolled bool
lastActivity time.Time
quiet bool
thinkTime time.Duration
}
func NewClient(address string, username string, password string, points int, thinkTime time.Duration) *Client {
func NewClient(address string, username string, password string, points int, quiet bool, thinkTime time.Duration) *Client {
const bufferSize = 10
c := &Client{
Address: address,
@ -48,14 +49,15 @@ func NewClient(address string, username string, password string, points int, thi
Events: make(chan interface{}, bufferSize),
Out: make(chan []byte, bufferSize),
points: points,
quiet: quiet,
thinkTime: thinkTime,
}
go c.handleTimeout()
return c
}
func NewLocalClient(conn net.Conn, address string, username string, password string, points int, thinkTime time.Duration) {
c := NewClient(address, username, password, points, thinkTime)
func NewLocalClient(conn net.Conn, address string, username string, password string, points int, quiet bool, thinkTime time.Duration) {
c := NewClient(address, username, password, points, quiet, thinkTime)
c.connecting = true
go c.connectTCP(conn)
c.HandleEvents()
@ -405,13 +407,6 @@ func (c *Client) HandleEvents() {
continue
}
var t time.Time
if c.thinkTime != 0 {
t = time.Now()
}
log.Println("==========")
log.Println("Legal moves:", Game.Available)
b := Game.Board
var roll1, roll2, roll3, roll4 int8
roll1, roll2 = int8(Game.Roll1), int8(Game.Roll2)
@ -420,31 +415,42 @@ func (c *Client) HandleEvents() {
}
boardState := tabula.Board{int8(b[0]), int8(b[1]), int8(b[2]), int8(b[3]), int8(b[4]), int8(b[5]), int8(b[6]), int8(b[7]), int8(b[8]), int8(b[9]), int8(b[10]), int8(b[11]), int8(b[12]), int8(b[13]), int8(b[14]), int8(b[15]), int8(b[16]), int8(b[17]), int8(b[18]), int8(b[19]), int8(b[20]), int8(b[21]), int8(b[22]), int8(b[23]), int8(b[24]), int8(b[25]), int8(b[26]), int8(b[27]), roll1, roll2, roll3, roll4}
var t time.Time
if c.thinkTime != 0 {
t = time.Now()
}
result := boardState.Analyze(1, Game.Available)
if len(result) == 0 {
log.Printf("Legal moves: %+v", Game.Available)
log.Fatalf("NO PLAYABLE MOVES RETURNED: %+v", result)
}
log.Println("Past:", result[0].Past)
builder := &strings.Builder{}
builder.Write([]byte("Board: "))
for i := range boardState {
if i != 0 {
builder.WriteByte(',')
if !c.quiet {
log.Println("==========")
log.Println("Legal moves:", Game.Available)
log.Println("Past:", result[0].Past)
builder := &strings.Builder{}
builder.Write([]byte("Board: "))
for i := range boardState {
if i != 0 {
builder.WriteByte(',')
}
builder.Write([]byte(strconv.Itoa(int(boardState[i]))))
}
builder.Write([]byte(strconv.Itoa(int(boardState[i]))))
}
log.Println(builder.String())
log.Println(builder.String())
const padding = 3
w := tabwriter.NewWriter(os.Stderr, 0, 0, padding, ' ', 0)
fmt.Fprintln(w, "Moves\tScore\tPlayer Score\tPips\tBlots\tHits\tOpponent Score\tPips\tBlots\tHits\t")
for _, r := range result {
fmt.Fprintf(w, "%s\t%.2f\t%.2f\t%d\t%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t\n", fmt.Sprint(r.Moves), r.Score, r.PlayerScore, r.Pips, r.Blots, r.Hits, r.OppScore, r.OppPips, r.OppBlots, r.OppHits)
const padding = 3
w := tabwriter.NewWriter(os.Stderr, 0, 0, padding, ' ', 0)
fmt.Fprintln(w, "Moves\tScore\tPlayer Score\tPips\tBlots\tHits\tOpponent Score\tPips\tBlots\tHits\t")
for _, r := range result {
fmt.Fprintf(w, "%s\t%.2f\t%.2f\t%d\t%d\t%d\t%.2f\t%.2f\t%.2f\t%.2f\t\n", fmt.Sprint(r.Moves), r.Score, r.PlayerScore, r.Pips, r.Blots, r.Hits, r.OppScore, r.OppPips, r.OppBlots, r.OppHits)
}
w.Flush()
log.Println("==========")
}
w.Flush()
log.Println("==========")
for _, move := range result[0].Moves {
if move[0] == 0 || move[0] == 25 {
@ -453,6 +459,7 @@ func (c *Client) HandleEvents() {
c.Out <- []byte(fmt.Sprintf("mv %d/%d", move[0], move[1]))
}
}
if c.thinkTime != 0 {
s := time.Since(t)
if s < c.thinkTime {

2
go.mod
View file

@ -4,6 +4,6 @@ go 1.17
require (
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231203064241-5abce61fabb1
code.rocket9labs.com/tslocum/tabula v0.0.0-20231204061923-851c1f6fc691
code.rocket9labs.com/tslocum/tabula v0.0.0-20231205082741-1703a504b560
nhooyr.io/websocket v1.8.10
)

4
go.sum
View file

@ -1,6 +1,6 @@
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231203064241-5abce61fabb1 h1:DU4h2XiS2bz4FdaeHRfYTBNwhWuaYGmnb/NA0VgsVMc=
code.rocket9labs.com/tslocum/bgammon v0.0.0-20231203064241-5abce61fabb1/go.mod h1:u3nbSwxWnwOXbCNPQD4s3abGTfvA4/gi9U626f7ZN9Q=
code.rocket9labs.com/tslocum/tabula v0.0.0-20231204061923-851c1f6fc691 h1:+jMc7BBO73CiPUG3DwgOzziyy+SdzEyiVdZSSQT2I1E=
code.rocket9labs.com/tslocum/tabula v0.0.0-20231204061923-851c1f6fc691/go.mod h1:XtS6M8qcK0fnUn4k5I7h4JcZ2sz2WEAXOcF2DLaQBME=
code.rocket9labs.com/tslocum/tabula v0.0.0-20231205082741-1703a504b560 h1:P8pumjibx2We8C1+6gUQQEDxMozK4RJW+IwmI+vkU0o=
code.rocket9labs.com/tslocum/tabula v0.0.0-20231205082741-1703a504b560/go.mod h1:XtS6M8qcK0fnUn4k5I7h4JcZ2sz2WEAXOcF2DLaQBME=
nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q=
nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c=

View file

@ -18,6 +18,7 @@ func main() {
username string
password string
points int
quiet bool
thinkTime time.Duration
debug int
)
@ -28,6 +29,7 @@ func main() {
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")
flag.BoolVar(&quiet, "quiet", false, "Disable logging")
flag.DurationVar(&thinkTime, "think", 0, "Minimum think time")
flag.IntVar(&debug, "debug", 0, "Port to serve debug information on (pprof)")
flag.Parse()
@ -38,7 +40,7 @@ func main() {
}()
}
c := bot.NewClient(serverAddress, username, password, points, thinkTime)
c := bot.NewClient(serverAddress, username, password, points, quiet, thinkTime)
go c.Connect()
c.HandleEvents()