From 5991cea64517ed73895fd230511010c518325552 Mon Sep 17 00:00:00 2001 From: MichaelS11 Date: Fri, 11 Jan 2019 18:39:41 -0800 Subject: [PATCH] Reduce AI memory allocations --- ai.go | 25 +++++++++++++------------ board.go | 2 ++ globals.go | 1 + 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/ai.go b/ai.go index a11f897..6cefefe 100644 --- a/ai.go +++ b/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) { - queue := make([]rune, 0, 4) + queue := make([]rune, 0, rotate+move+slide+1) mino := *mino1 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) { + var i int + var j int // fullLines - fullLinesY := make([]bool, board.height) - for j := 0; j < board.height; j++ { - fullLinesY[j] = true - for i := 0; i < board.width; i++ { + for j = 0; j < board.height; j++ { + board.fullLinesY[j] = true + for i = 0; i < board.width; i++ { if board.colors[i][j] == blankColor && !mino1.isMinoAtLocation(i, j) && !mino2.isMinoAtLocation(i, j) { - fullLinesY[j] = false + board.fullLinesY[j] = false break } } - if fullLinesY[j] { + if board.fullLinesY[j] { fullLines++ } } // holes and bumpy indexLast := 0 - for i := 0; i < board.width; i++ { + for i = 0; i < board.width; i++ { index := board.height indexOffset := 0 - for j := 0; j < board.height; j++ { - if fullLinesY[j] { + for j = 0; j < board.height; j++ { + if board.fullLinesY[j] { indexOffset++ } else { 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 index++ - for j := index; j < board.height; j++ { - if board.colors[i][j] == blankColor && !mino1.isMinoAtLocation(i, j) && !mino2.isMinoAtLocation(i, j) { + for k := index; k < board.height; k++ { + if board.colors[i][k] == blankColor && !mino1.isMinoAtLocation(i, k) && !mino2.isMinoAtLocation(i, k) { holes++ } } diff --git a/board.go b/board.go index 50340ac..576f41b 100644 --- a/board.go +++ b/board.go @@ -44,6 +44,7 @@ func ChangeBoardSize(width int, height int) { } board = newBoard + board.fullLinesY = make([]bool, board.height) board.previewMino = NewMino() board.currentMino = NewMino() } @@ -62,6 +63,7 @@ func (board *Board) Clear() { board.rotation[i] = make([]int, board.height) copy(board.rotation[i], boards[board.boardsIndex].rotation[i]) } + board.fullLinesY = make([]bool, board.height) board.previewMino = NewMino() board.currentMino = NewMino() } diff --git a/globals.go b/globals.go index befc3c6..04a2e84 100644 --- a/globals.go +++ b/globals.go @@ -57,6 +57,7 @@ type ( previewMino *Mino currentMino *Mino dropDistance int + fullLinesY []bool } // Boards holds all the boards