这是我的游戏获胜逻辑的代码,我做了它,使它可以水平,垂直和对角.代码可能是错的,但我就是这么做的.我正在试着做一个对话,当你赢了,你赢了,当然,我不知道怎么做,聊天GPT提供的代码总是错误的,或者让我的应用程序崩溃:
fun checkForWin(board: List<List<Color>>, colorToCheck: Color): Boolean {
for (boardHeight in 0 until board.size) {
for (boardWidth in 0 until board[0].size) {
// Check horizontally
if (boardWidth + 3 < board[0].size &&
board[boardHeight][boardWidth] == colorToCheck &&
board[boardHeight][boardWidth + 1] == colorToCheck &&
board[boardHeight][boardWidth + 2] == colorToCheck &&
board[boardHeight][boardWidth + 3] == colorToCheck
) {
return true
}
// Check vertically
if (boardHeight + 3 < board.size &&
board[boardHeight][boardWidth] == colorToCheck &&
board[boardHeight + 1][boardWidth] == colorToCheck &&
board[boardHeight + 2][boardWidth] == colorToCheck &&
board[boardHeight + 3][boardWidth] == colorToCheck
) {
return true
}
// Check diagonally (from top-left to bottom-right)
if (boardHeight + 3 < board.size && boardWidth + 3 < board[0].size &&
board[boardHeight][boardWidth] == colorToCheck &&
board[boardHeight + 1][boardWidth + 1] == colorToCheck &&
board[boardHeight + 2][boardWidth + 2] == colorToCheck &&
board[boardHeight + 3][boardWidth + 3] == colorToCheck
) {
return true
}
// Check diagonally (from bottom-left to top-right)
if (boardHeight - 3 >= 0 && boardWidth + 3 < board[0].size &&
board[boardHeight][boardWidth] == colorToCheck &&
board[boardHeight - 1][boardWidth + 1] == colorToCheck &&
board[boardHeight - 2][boardWidth + 2] == colorToCheck &&
board[boardHeight - 3][boardWidth + 3] == colorToCheck
) {
return true
}
}
}
return false
}
fun handleCellClick(boardWidth: Int) {
val emptyRow = findLowestEmpty(_state.value.board, boardWidth)
if (emptyRow != -1) {
val updateBoard = _state.value.board.map { it.toMutableList().toList() }.toMutableList()
updateBoard[emptyRow] =
updateBoard[emptyRow].toMutableList().apply {
set(boardWidth, if (_state.value.isRedTurn) Color.Red else Color.Yellow)
}.toList()
_state.value = _state.value.copy(board = updateBoard, isRedTurn = !_state.value.isRedTurn)
val currentColor = if (_state.value.isRedTurn) Color.Red else Color.Yellow
if (checkForWin(updateBoard, currentColor)) {
winMessageState.winnerColor.value = currentColor
winMessageState.isVisible.value = true
}
}
}