#android #kotlin #tic-tac-toe
#Android #kotlin #крестики-нолики
Вопрос:
package com.begors.titactoe
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
var currentPlayer = 1
//Defining two lists of ids that each player will select
var playerOneClickedListId = ArrayList<Int>()
var playerTwoClickedListId = ArrayList<Int>()
fun buClick(view: View) {
//getting id of the current clicked button
var clickedButton = view as Button
var clickedButtonId = clickedButton.id.toString().toInt()
//Playing game
if (currentPlayer == 1){
playerOneClickedListId.add(clickedButtonId)
clickedButton.setText("X")
clickedButton.isEnabled=false
checkWinner(playerOneClickedListId,currentPlayer) // All works perfectly except this line!!!!!!!
currentPlayer=2
}else{
playerTwoClickedListId.add(clickedButtonId)
clickedButton.setText("O")
clickedButton.isEnabled=false
checkWinner(playerTwoClickedListId,currentPlayer)// All works perfectly except this line!!!!!!!
currentPlayer=1
}
}
//Function that checks for the winner based on their selection - DOES NOT WORK
fun checkWinner(playerArrayList: ArrayList<Int>, currentPlayer : Int){
if (playerArrayList.contains(1) amp;amp; playerArrayList.contains(2) amp;amp; playerArrayList.contains(3) ||
playerArrayList.contains(4) amp;amp; playerArrayList.contains(5) amp;amp; playerArrayList.contains(6) ||
playerArrayList.contains(7) amp;amp; playerArrayList.contains(8) amp;amp; playerArrayList.contains(9) ||
playerArrayList.contains(1) amp;amp; playerArrayList.contains(4) amp;amp; playerArrayList.contains(7) ||
playerArrayList.contains(2) amp;amp; playerArrayList.contains(5) amp;amp; playerArrayList.contains(8) ||
playerArrayList.contains(3) amp;amp; playerArrayList.contains(6) amp;amp; playerArrayList.contains(9))
{
Toast.makeText(this, "Winner is player $currentPlayer", Toast.LENGTH_LONG).show()
}
}
// Button event that will reset the game
fun resetGame(view : View){
bu1.isEnabled=true
bu1.setText("")
bu2.isEnabled=true
bu2.setText("")
bu3.isEnabled=true
bu3.setText("")
bu4.isEnabled=true
bu4.setText("")
bu5.isEnabled=true
bu5.setText("")
bu6.isEnabled=true
bu6.setText("")
bu7.isEnabled=true
bu7.setText("")
bu8.isEnabled=true
bu8.setText("")
bu9.isEnabled=true
bu9.setText("")
playerOneClickedListId.clear()
playerTwoClickedListId.clear()
}
}
Привет, я написал этот пример кода для игры tictactoe, все работает, кроме функции checkWinner, которая принимает два параметра ArrayList и CurrentPlayer для проверки победителя.
эта функция вызывается после каждого хода игрока, чтобы проверить наличие выигрышных щелкающих ячеек в игре в крестики-нолики.
Я не знаю, где ошибка!
Заранее благодарю вас
Ответ №1:
Я полагаю, вы забыли проверить
добавление slants
playerArrayList.contains(7) amp;amp; playerArrayList.contains(5) amp;amp; playerArrayList.contains(3) ||
playerArrayList.contains(1) amp;amp; playerArrayList.contains(5) amp;amp; playerArrayList.contains(9)
выполните ваше условие if
и убедитесь, что идентификаторы кнопок написаны в правильном порядке
Комментарии:
1. Большое вам спасибо! Проблема была с идентификаторами, я должен был объявить их как строки, а не как Int