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) && playerArrayList.contains(2) && playerArrayList.contains(3) ||
playerArrayList.contains(4) && playerArrayList.contains(5) && playerArrayList.contains(6) ||
playerArrayList.contains(7) && playerArrayList.contains(8) && playerArrayList.contains(9) ||
playerArrayList.contains(1) && playerArrayList.contains(4) && playerArrayList.contains(7) ||
playerArrayList.contains(2) && playerArrayList.contains(5) && playerArrayList.contains(8) ||
playerArrayList.contains(3) && playerArrayList.contains(6) && 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来检查胜利者。该函数在每个玩家在tictactoe游戏中查看获胜的点击单元格后调用。我不知道错误在哪里!事先谢谢你
我想你忘了检查斜线
添加
playerArrayList.contains(7) && playerArrayList.contains(5) && playerArrayList.contains(3) ||
playerArrayList.contains(1) && playerArrayList.contains(5) && playerArrayList.contains(9)
并确保按钮id以正确的顺序写入
我有以下代码: 我不希望字段ui有一个getter,但是kotlin在默认情况下会生成它,因为它是构造函数中定义的val。 在properties and fields文档中,我发现我可以用以下代码生成一个私有getter 但我在构造函数定义中找不到这样做的方法
问题内容: 我正在向Django的模板传递一个函数,该函数返回一些记录。我想调用此函数并遍历其结果。 那不行 我试图将函数的返回值设置为变量并遍历该变量,但是似乎没有办法在Django模板中设置变量。 有什么正常的方法吗? 问题答案: 你不能调用在模板中需要参数的函数。写一个模板标签或过滤器。
我想为实现接口的类中的函数参数使用默认值,如下所示: 现在这里是编译的,这里是不编译的: KO:不允许重写函数为其参数指定默认值 KO:类“LocalFileStoreService”不是抽象的,并且没有实现抽象成员公共抽象存储文件(路径:String,负载:InputStream,类型:MediaType):fqn中定义的单元。。。文件存储服务 好 啊: 这是预期的行为吗?有没有更好的方法来管理
我正试图将一个Android应用程序从Java转换为Kotlin。应用程序中有几个单人。我为没有构造函数参数的单例使用了一个伴生对象。还有另一个接受构造函数参数的单例。 Java代码:
我是kotlin的新手,我总是编写java。我尝试了kotlin以java方式编写的一些函数代码,但不起作用。 我将这些代码翻译成java,它就可以工作了。 即使FInter是java接口。它也不起作用。 使现代化 我尝试了一些不同的方法,现在它们都是工作。
我有一个用Kotlin编写的Android应用程序,带有一个扩展了DigitsKeyListener的类。我的最低SDK版本是。该类当前正在调用一个不推荐使用的构造函数。然而,新的构造器只能从API级别26及以上的版本中获得。如何根据API级别有条件地调用构造函数? 不久前,我基本上发布了Android的相同问题,但该解决方案在Kotlin中似乎不起作用。 在静态编程语言中,我的类现在看起来像这样