Reduce AI memory allocations
This commit is contained in:
parent
ab5692a2da
commit
5991cea645
25
ai.go
25
ai.go
|
@ -103,7 +103,7 @@ func (ai *Ai) GetBestQueue() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (board *Board) getMovesforMino(rotate int, move int, slide int, mino1 *Mino, mino2 *Mino) ([]rune, *Mino) {
|
func (board *Board) getMovesforMino(rotate int, move int, slide int, mino1 *Mino, mino2 *Mino) ([]rune, *Mino) {
|
||||||
queue := make([]rune, 0, 4)
|
queue := make([]rune, 0, rotate+move+slide+1)
|
||||||
mino := *mino1
|
mino := *mino1
|
||||||
|
|
||||||
if rotate%2 == 0 {
|
if rotate%2 == 0 {
|
||||||
|
@ -179,28 +179,29 @@ func (board *Board) getMovesforMino(rotate int, move int, slide int, mino1 *Mino
|
||||||
}
|
}
|
||||||
|
|
||||||
func (board *Board) boardStatsWithMinos(mino1 *Mino, mino2 *Mino) (fullLines int, holes int, bumpy int) {
|
func (board *Board) boardStatsWithMinos(mino1 *Mino, mino2 *Mino) (fullLines int, holes int, bumpy int) {
|
||||||
|
var i int
|
||||||
|
var j int
|
||||||
// fullLines
|
// fullLines
|
||||||
fullLinesY := make([]bool, board.height)
|
for j = 0; j < board.height; j++ {
|
||||||
for j := 0; j < board.height; j++ {
|
board.fullLinesY[j] = true
|
||||||
fullLinesY[j] = true
|
for i = 0; i < board.width; i++ {
|
||||||
for i := 0; i < board.width; i++ {
|
|
||||||
if board.colors[i][j] == blankColor && !mino1.isMinoAtLocation(i, j) && !mino2.isMinoAtLocation(i, j) {
|
if board.colors[i][j] == blankColor && !mino1.isMinoAtLocation(i, j) && !mino2.isMinoAtLocation(i, j) {
|
||||||
fullLinesY[j] = false
|
board.fullLinesY[j] = false
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if fullLinesY[j] {
|
if board.fullLinesY[j] {
|
||||||
fullLines++
|
fullLines++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// holes and bumpy
|
// holes and bumpy
|
||||||
indexLast := 0
|
indexLast := 0
|
||||||
for i := 0; i < board.width; i++ {
|
for i = 0; i < board.width; i++ {
|
||||||
index := board.height
|
index := board.height
|
||||||
indexOffset := 0
|
indexOffset := 0
|
||||||
for j := 0; j < board.height; j++ {
|
for j = 0; j < board.height; j++ {
|
||||||
if fullLinesY[j] {
|
if board.fullLinesY[j] {
|
||||||
indexOffset++
|
indexOffset++
|
||||||
} else {
|
} else {
|
||||||
if board.colors[i][j] != blankColor || mino1.isMinoAtLocation(i, j) || mino2.isMinoAtLocation(i, j) {
|
if board.colors[i][j] != blankColor || mino1.isMinoAtLocation(i, j) || mino2.isMinoAtLocation(i, j) {
|
||||||
|
@ -221,8 +222,8 @@ func (board *Board) boardStatsWithMinos(mino1 *Mino, mino2 *Mino) (fullLines int
|
||||||
indexLast = index + fullLines - indexOffset
|
indexLast = index + fullLines - indexOffset
|
||||||
|
|
||||||
index++
|
index++
|
||||||
for j := index; j < board.height; j++ {
|
for k := index; k < board.height; k++ {
|
||||||
if board.colors[i][j] == blankColor && !mino1.isMinoAtLocation(i, j) && !mino2.isMinoAtLocation(i, j) {
|
if board.colors[i][k] == blankColor && !mino1.isMinoAtLocation(i, k) && !mino2.isMinoAtLocation(i, k) {
|
||||||
holes++
|
holes++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
board.go
2
board.go
|
@ -44,6 +44,7 @@ func ChangeBoardSize(width int, height int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
board = newBoard
|
board = newBoard
|
||||||
|
board.fullLinesY = make([]bool, board.height)
|
||||||
board.previewMino = NewMino()
|
board.previewMino = NewMino()
|
||||||
board.currentMino = NewMino()
|
board.currentMino = NewMino()
|
||||||
}
|
}
|
||||||
|
@ -62,6 +63,7 @@ func (board *Board) Clear() {
|
||||||
board.rotation[i] = make([]int, board.height)
|
board.rotation[i] = make([]int, board.height)
|
||||||
copy(board.rotation[i], boards[board.boardsIndex].rotation[i])
|
copy(board.rotation[i], boards[board.boardsIndex].rotation[i])
|
||||||
}
|
}
|
||||||
|
board.fullLinesY = make([]bool, board.height)
|
||||||
board.previewMino = NewMino()
|
board.previewMino = NewMino()
|
||||||
board.currentMino = NewMino()
|
board.currentMino = NewMino()
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@ type (
|
||||||
previewMino *Mino
|
previewMino *Mino
|
||||||
currentMino *Mino
|
currentMino *Mino
|
||||||
dropDistance int
|
dropDistance int
|
||||||
|
fullLinesY []bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Boards holds all the boards
|
// Boards holds all the boards
|
||||||
|
|
Loading…
Reference in New Issue