Составление шашек ⇐ Android
Составление шашек
Я создаю игру в шашки на Jetpack Compose Kotlin, но у меня возникла проблема: результат не отображается на экране. То есть чекер перемещается в логах, а не на экране.
перечисление класса Piece { ПУСТОЙ, ЧЕРНЫЙ, БЕЛЫЙ } @Композитный весело CheckersScreen (navHostController: NavHostController) { контекст val = LocalContext.current var selectedChecker, запомнив {mutableStateOf(null) } val board = помните {mutableStateOf(Array(8) { Array(8) { Piece.EMPTY } }) } var localSelectedChecker, запомнив {mutableStateOf(null) } для (я от 0 до 3) { для (j от 0 до 8) { если ((i + j) % 2 == 1) { board.value[j] = Piece.WHITE } } } для (я от 5 до 8) { для (j от 0 до 8) { если ((i + j) % 2 == 1) { board.value[j] = Piece.BLACK } } } Столбец( Модификатор .fillMaxSize() .padding(низ = 30.dp) ) { Коробка( модификатор = Модификатор .padding(верх = 152.dp) .fillMaxWidth() .padding(начало = 5.dp, конец = 5.dp) .size(400.dp) .shadow(4.dp, shape = RectangleShape) ) { Столбец { for (строка от 0 до 8) { Ряд( модификатор = Modifier.fillMaxWidth(), горизонтальное расположение = Расположение.Центр ) { for (столбец от 0 до 8) { цвет цвета = if ((строка + столбец) % 2 == 0) Color.White else Color(139, 69, 19) val isWhitePiece = board.value[строка][столбец] == Piece.WHITE val isBlackPiece = board.value[строка][столбец] == Piece.BLACK Коробка( модификатор = Модификатор .size(50.dp) .фоновый цвет) .кликабельный { если (isBlackPiece) { localSelectedChecker = Пара (строка, столбец) } Еще если (localSelectedChecker!= null) { val (fromRow, fromColumn) = localSelectedChecker!! если (!isValidMove( изРоу, из столбца, ряд, столбец, доска.значение ) ) { доска.значение[строка][столбец] = доска.значение[fromRow][fromColumn] доска.значение[fromRow][fromColumn] = Часть.ПУСТОЙ доска.значение[строка][столбец] = Часть.ЧЕРНЫЙ localSelectedChecker = ноль Лог.д( "пизда", "Состояние доски: ${ board.value.joinToString("\n") { it.joinToString(" ") } }" ) } } }, ) { val isSelected = selectedChecker == Пара(строка, столбец) val checkerImage = когда { isWhitePiece -> R.drawable.white_checker isBlackPiece -> R.drawable.black_checker еще -> 0 } если (checkerImage != 0) { Изображение( художник = PainterResource (id = checkerImage), ContentDescription = ноль, модификатор = Модификатор .size(40.dp) .align(Выравнивание.Центр) .затем( если (isSelected) { Модификатор.border(2.dp, Color.Red) } еще { Модификатор } ) ) } } } } } } } } } весело isValidMove( из строки: Int, из столбца: Int, toRow: Int, toColumn: Int, доска: Массив ): Логическое значение { val Piece = доска[fromRow][fromColumn] val targetPiece = доска[toRow][toColumn] Log.d("pizda", "fromColumn $fromColumn") Log.d("pizda", "fromRow $fromRow") Log.d("pizda", "toRow $toRow") Log.d("pizda", "toColumn $toColumn") val rowDiff = kotlin.math.abs(fromRow - toRow) val colDiff = kotlin.math.abs(fromColumn - toColumn) if (rowDiff != 1 || colDiff != 1) { Log.d("пизда", "здесь") вернуть ложь } если (targetPiece != Piece.EMPTY) { Log.d("пизда", "здесь1") вернуть ложь } if (piece == Piece.BLACK && toRow = fromRow) { Log.d("пизда", "здесь3") вернуть ложь } val rowDirection = if (toRow > fromRow) 1 еще -1 val colDirection = if (toColumn > fromColumn) 1 еще -1 val промежуточныйRow = fromRow + rowDirection val промежуточныйColumn = fromColumn + colDirection if (kotlin.math.abs(toRow - fromRow) == 2 && kotlin.math.abs(toColumn - fromColumn) == 2) { val middlePiece = доска[intermediateRow][intermediateColumn] if (middlePiece == Piece.EMPTY || middlePiece == кусок) { Log.d("пизда", "здесь4") вернуть ложь } Log.d("пизда", "здесь5") вернуть истину } Log.d("пизда", "здесь6") вернуть ложь }
Я создаю игру в шашки на Jetpack Compose Kotlin, но у меня возникла проблема: результат не отображается на экране. То есть чекер перемещается в логах, а не на экране.
перечисление класса Piece { ПУСТОЙ, ЧЕРНЫЙ, БЕЛЫЙ } @Композитный весело CheckersScreen (navHostController: NavHostController) { контекст val = LocalContext.current var selectedChecker, запомнив {mutableStateOf(null) } val board = помните {mutableStateOf(Array(8) { Array(8) { Piece.EMPTY } }) } var localSelectedChecker, запомнив {mutableStateOf(null) } для (я от 0 до 3) { для (j от 0 до 8) { если ((i + j) % 2 == 1) { board.value[j] = Piece.WHITE } } } для (я от 5 до 8) { для (j от 0 до 8) { если ((i + j) % 2 == 1) { board.value[j] = Piece.BLACK } } } Столбец( Модификатор .fillMaxSize() .padding(низ = 30.dp) ) { Коробка( модификатор = Модификатор .padding(верх = 152.dp) .fillMaxWidth() .padding(начало = 5.dp, конец = 5.dp) .size(400.dp) .shadow(4.dp, shape = RectangleShape) ) { Столбец { for (строка от 0 до 8) { Ряд( модификатор = Modifier.fillMaxWidth(), горизонтальное расположение = Расположение.Центр ) { for (столбец от 0 до 8) { цвет цвета = if ((строка + столбец) % 2 == 0) Color.White else Color(139, 69, 19) val isWhitePiece = board.value[строка][столбец] == Piece.WHITE val isBlackPiece = board.value[строка][столбец] == Piece.BLACK Коробка( модификатор = Модификатор .size(50.dp) .фоновый цвет) .кликабельный { если (isBlackPiece) { localSelectedChecker = Пара (строка, столбец) } Еще если (localSelectedChecker!= null) { val (fromRow, fromColumn) = localSelectedChecker!! если (!isValidMove( изРоу, из столбца, ряд, столбец, доска.значение ) ) { доска.значение[строка][столбец] = доска.значение[fromRow][fromColumn] доска.значение[fromRow][fromColumn] = Часть.ПУСТОЙ доска.значение[строка][столбец] = Часть.ЧЕРНЫЙ localSelectedChecker = ноль Лог.д( "пизда", "Состояние доски: ${ board.value.joinToString("\n") { it.joinToString(" ") } }" ) } } }, ) { val isSelected = selectedChecker == Пара(строка, столбец) val checkerImage = когда { isWhitePiece -> R.drawable.white_checker isBlackPiece -> R.drawable.black_checker еще -> 0 } если (checkerImage != 0) { Изображение( художник = PainterResource (id = checkerImage), ContentDescription = ноль, модификатор = Модификатор .size(40.dp) .align(Выравнивание.Центр) .затем( если (isSelected) { Модификатор.border(2.dp, Color.Red) } еще { Модификатор } ) ) } } } } } } } } } весело isValidMove( из строки: Int, из столбца: Int, toRow: Int, toColumn: Int, доска: Массив ): Логическое значение { val Piece = доска[fromRow][fromColumn] val targetPiece = доска[toRow][toColumn] Log.d("pizda", "fromColumn $fromColumn") Log.d("pizda", "fromRow $fromRow") Log.d("pizda", "toRow $toRow") Log.d("pizda", "toColumn $toColumn") val rowDiff = kotlin.math.abs(fromRow - toRow) val colDiff = kotlin.math.abs(fromColumn - toColumn) if (rowDiff != 1 || colDiff != 1) { Log.d("пизда", "здесь") вернуть ложь } если (targetPiece != Piece.EMPTY) { Log.d("пизда", "здесь1") вернуть ложь } if (piece == Piece.BLACK && toRow = fromRow) { Log.d("пизда", "здесь3") вернуть ложь } val rowDirection = if (toRow > fromRow) 1 еще -1 val colDirection = if (toColumn > fromColumn) 1 еще -1 val промежуточныйRow = fromRow + rowDirection val промежуточныйColumn = fromColumn + colDirection if (kotlin.math.abs(toRow - fromRow) == 2 && kotlin.math.abs(toColumn - fromColumn) == 2) { val middlePiece = доска[intermediateRow][intermediateColumn] if (middlePiece == Piece.EMPTY || middlePiece == кусок) { Log.d("пизда", "здесь4") вернуть ложь } Log.d("пизда", "здесь5") вернуть истину } Log.d("пизда", "здесь6") вернуть ложь }
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение