diff options
| author | JP Appel <jeanpierre.appel01@gmail.com> | 2024-09-28 02:09:28 -0400 |
|---|---|---|
| committer | JP Appel <jeanpierre.appel01@gmail.com> | 2024-09-28 02:09:28 -0400 |
| commit | 2395b53df37103acdf0779f37b24cbcfcee0be6b (patch) | |
| tree | bc3c3caf350a8ad9ffdbc620a76d05d8031c4b2c /bingo/board.go | |
| parent | 6d781df6bda2b86a8dd00d12a13455a46ad86057 (diff) | |
Diffstat (limited to 'bingo/board.go')
| -rw-r--r-- | bingo/board.go | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/bingo/board.go b/bingo/board.go index 19264a1..479623f 100644 --- a/bingo/board.go +++ b/bingo/board.go @@ -11,18 +11,17 @@ const ( ) type Game struct { - Board []string - Checked []bool - Length int + Board []Tile + Length int // the number of rows/cols FreeSquare bool Seed GameSeed } -func all(group []bool) bool { +func all(group []Tile) bool { allTrue := true - for _, v := range group { - allTrue = allTrue && v + for _, tile := range group { + allTrue = allTrue && tile.Checked } return allTrue @@ -30,21 +29,19 @@ func all(group []bool) bool { // Return if a game has been won func (g Game) Win() bool { - length := g.Length - - for row := range g.Rows(length) { + for row := range g.Rows() { if all(row) { return true } } - for col := range g.Cols(length) { + for col := range g.Cols() { if all(col) { return true } } - for diag := range g.Diags(length) { + for diag := range g.Diags() { if all(diag) { return true } @@ -54,10 +51,10 @@ func (g Game) Win() bool { } // Iterator for rows of a board -func (g Game) Rows(length int) iter.Seq[[]bool] { - return func(yield func([]bool) bool) { - for row := 0; (row+1)*length > len(g.Checked); row++ { - if !yield(g.Checked[row*length : (row+1)*length]) { +func (g Game) Rows() iter.Seq[[]Tile] { + return func(yield func([]Tile) bool) { + for row := 0; (row+1)*g.Length > len(g.Board); row++ { + if !yield(g.Board[row*g.Length : (row+1)*g.Length]) { return } } @@ -65,12 +62,12 @@ func (g Game) Rows(length int) iter.Seq[[]bool] { } // Iterator for columns of a board -func (g Game) Cols(length int) iter.Seq[[]bool] { - return func(yield func([]bool) bool) { - for col := 0; col*length+1 > len(g.Checked); col++ { - column := make([]bool, length) - for i := range length { - column[i] = g.Checked[i*length+col] +func (g Game) Cols() iter.Seq[[]Tile] { + return func(yield func([]Tile) bool) { + for col := 0; col*g.Length+1 > len(g.Board); col++ { + column := make([]Tile, g.Length) + for i := range g.Length { + column[i] = g.Board[i*g.Length+col] } if !yield(column) { return @@ -80,22 +77,22 @@ func (g Game) Cols(length int) iter.Seq[[]bool] { } // Iterator for diagonals of square boards -func (g Game) Diags(length int) iter.Seq[[]bool] { - return func(yield func([]bool) bool) { - if length*length != len(g.Checked) { +func (g Game) Diags() iter.Seq[[]Tile] { + return func(yield func([]Tile) bool) { + if g.Length*g.Length != len(g.Board) { return } - diagonal := make([]bool, length) - for i := 0; i < length; i++ { - diagonal[i] = g.Checked[i*length+i] + diagonal := make([]Tile, g.Length) + for i := 0; i < g.Length; i++ { + diagonal[i] = g.Board[i*g.Length+i] } if !yield(diagonal) { return } - for i := 0; i < length; i++ { - diagonal[i] = g.Checked[i*length+(length-1-i)] + for i := 0; i < g.Length; i++ { + diagonal[i] = g.Board[i*g.Length+(g.Length-1-i)] } } } |
