这是我的游戏获胜逻辑的代码,我做了它,使它可以水平,垂直和对角.代码可能是错的,但我就是这么做的.我正在试着做一个对话,当你赢了,你赢了,当然,我不知道怎么做,聊天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
        }
    }
}

推荐答案

您所需要做的就是添加一个包含在if中的AlertDialog语句,该语句判断您的组合中的winMessageState.isVisible.value.有关AlertDialog的更多信息,请查看其documentation.简单的例子:

    if (winMessageState.isVisible.value) {
        AlertDialog(
            onDismissRequest = { winMessageState.isVisible.value = false },
            confirmButton = {
                Button(onClick = { winMessageState.isVisible.value = false }) {
                    Text("Close")
                }
            },
            text = {
                Text(text = "You won!")
            },
        )
    }

Android相关问答推荐

view喷气背包中找不到模型组成

如何使用视图模型触发可变状态?

如何完全隐藏的元素堆叠在CardView?

Android 14无法删除已配置的文件

无法将非静态方法与Frida挂钩

DocumentFile.canWrite()、DocumentFile.Existes()-使用本地内置手机存储(而不是云)时性能较差(占用太多CPU时间)

如果我的圆形图像的顶部居中于卡片内部,我如何在其下方画一条弧线?

如何在Jetpack Compose中实现前后动画?

我们可以使用KSP读取类中变量的值吗?

如何使用其他组件的位置来定位自定义弹出窗口

Android Studio 在 list 文件中已经声明了活动类,但仍出现无法找到明确的活动类的错误

可从 Play store 下载链接访问未发布的应用

Android AGP 8 + Gradle 8 + Kotlin 1.8 导致 Kapt 出错

Electric Eel 后 Gradle 项目同步失败 | 2022.1.1更新

如何在最后一个可见项目之后计算惰性列中的空白空间

Android 12 通过包管理器中断 APK 安装?

Kotlin:如何在另一个变量的名称中插入一个变量的值

如何使用 Jetpack Compose 在应用程序中实现本地化

更新应用程序是否会取消对应用程序特定文件的权限?

为什么使用 React Native 和 expo 创建的 APK 体积这么大?