package tictactoe
func (b Board) Evaluate() int {
for row := range b {
for col := range b[row] {
if b.checkRow(row, col, WinSize, P_1) == WinSize {
return +10
} else if b.checkRow(row, col, WinSize, P_2) == WinSize {
return -10
}
if b.checkCol(row, col, WinSize, P_1) == WinSize {
return +10
} else if b.checkCol(row, col, WinSize, P_2) == WinSize {
return -10
}
if b.checkDiagLR(row, col, WinSize, P_1) == WinSize {
return +10
} else if b.checkDiagLR(row, col, WinSize, P_2) == WinSize {
return -10
}
if b.checkDiagRL(row, col, WinSize, P_1) == WinSize {
return +10
} else if b.checkDiagRL(row, col, WinSize, P_2) == WinSize {
return -10
}
}
}
return 0
}
func (b Board) checkRow(row, col, winsize int, player rune) (goodness int) {
for i := 0; i < winsize; i++ {
if row+i < len(b[col]) {
if b[row+i][col] == player {
goodness++
} else {
return goodness
}
}
}
return goodness
}
func (b Board) checkCol(row, col, winsize int, player rune) (goodness int) {
for j := 0; j < winsize; j++ {
if col+j < len(b[row]) {
if b[row][col+j] == player {
goodness++
} else {
return goodness
}
}
}
return goodness
}
func (b Board) checkDiagLR(row, col, winsize int, player rune) (goodness int) {
for k := 0; k < winsize; k++ {
if row+k < len(b[col]) && col+k < len(b[row]) {
if b[row+k][col+k] == player {
goodness++
} else {
return goodness
}
}
}
return goodness
}
func (b Board) checkDiagRL(row, col, winsize int, player rune) (goodness int) {
for k := 0; k < winsize; k++ {
if row+k < len(b[col]) && col-k >= 0 {
if b[row+k][col-k] == player {
goodness++
} else {
return goodness
}
}
}
return goodness
}