Функция с параметрами не вызывается в Kotlin — Android

#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