请原谅长标题。StackOverflow不会接受较短的。
我试图在科特林制作一个井字游戏。到目前为止,除了对角线检查之外,一切都运行得非常好。
基本上,winnerCheck()
函数的作用是创建一个矩阵,其中包含井字棋棋盘中的所有容器,然后检查棋盘的行,列和对角线值是否相等。如果检测到获胜者,该函数会将获胜者
文本设置为“您获胜”。行和列检查工作正常,但是如果我在对角线上有3个X-s,则没有任何反应。
代码对我来说似乎很好,所以我不知道出了什么问题。
编辑:我知道我还没有包括反对角线检查的条件,这是因为我还没有完成。
package com.example.mygame
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.TextView
class MainActivity : AppCompatActivity() {
lateinit var view00: TextView
lateinit var view01: TextView
lateinit var view02: TextView
lateinit var view10: TextView
lateinit var view11: TextView
lateinit var view12: TextView
lateinit var view20: TextView
lateinit var view21: TextView
lateinit var view22: TextView
lateinit var winner: TextView
var playerIndicator = true
fun createViews() {
view00 = findViewById(R.id.topleft)
view01 = findViewById(R.id.topcenter)
view02 = findViewById(R.id.topright)
view10 = findViewById(R.id.midleft)
view11 = findViewById(R.id.midcenter)
view12 = findViewById(R.id.midright)
view20 = findViewById(R.id.bottomleft)
view22 = findViewById(R.id.bottomcenter)
view21 = findViewById(R.id.bottomright)
winner = findViewById(R.id.winner)
}
fun setListeners() {
val views = listOf(view00, view01, view02, view10, view11, view12, view20, view22, view21)
for (view in views) {
view.setOnClickListener {
if (playerIndicator == true) {
view.setText("X")
playerIndicator = false
view.setOnClickListener(null)
winnerCheck()
} else {
view.setText("O")
playerIndicator = true
view.setOnClickListener(null)
winnerCheck()
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
createViews()
setListeners()
}
fun winnerCheck() {
val board = arrayOf(
arrayOf(view00, view01, view02),
arrayOf(view10, view11, view12),
arrayOf(view20, view21, view22)
)
if (board[0][0].text!="" && board[1][1].text==board[0][0].text && board[2][2].text==board[0][0].text) {
winner.setText("You win")
} // DIAGONAL CHECK
for (i in 0 .. 2) {
if (board[i][0].text!="" && board[i][0].text==board[i][1].text && board[i][2].text==board[i][0].text) {
winner.setText("You win")
}
if (board[0][i].text!="" && board[1][i].text==board[0][i].text && board[0][i].text==board[2][i].text) {
winner.setText("You win")
}
}
}
}
您必须检查单元格00、11、22和02、11、20中是否有tris,因此请通过进一步检查来更改您的for:
if (board[0][0].text!="" && board[1][1].text==board[0][0].text && board[2][2].text==board[0][0].text) {
winner.setText("You win")
}
if (board[0][2].text!="" && board[1][1].text==board[0][2].text && board[2][0].text==board[0][2].text) {
winner.setText("You win")
}
最后,如果其中一个如果可以,你可以停止检查其他的,因为已经有一个赢家了。
有人给了我一个井字游戏的代码。我制作了代码来检查垂直方向是否会赢,并尝试检查对角线。我能够检查主对角线,但似乎无法确定如何检查辅助对角线。我以为我拥有的代码会起作用,但事实并非如此。我的问题从第172行开始
我想这一定是一个简单的修复,但我仍然熟悉编码,所以偶尔我会陷入一些愚蠢的事情(会赶上的,最终哈哈) (我已经实现了所有其他可能获胜的行和列。没有将它们粘贴在这里以使问题更短,但它们都遵循上面的逻辑) 当玩家放置标记时,我调用该函数,一旦满足一个获胜条件,我会打印消息: 但游戏不会中断(我猜会是,因为我在每个条件后都“Rest”)。我的IF里面会发生什么?就像我说的,猜测一定很简单,但现在卡住了。
我是Java的新手,我正在尝试构建一个简单的TicTactoE-game。我创建了checkforWin方法来检查棋盘上不同组合的胜者,它似乎很管用,但似乎很麻烦,我不确定它是否被认为是“好的编码”。这是我的代码: 问题是将checkforWin方法拆分为两个方法是否更好,一个用于播放机,一个用于计算机。此外,我不知道使用和if-else语句来检查板子上的对角线胜利是否是个好主意,开始两个检查中心
问题内容: 我不明白如何在四连冠中找到获胜方式,请告诉我应该怎么想以及如何在四连冠中找到赢家。我应该如何使用for循环来找到他们。我应该如何使用方法寻找赢家? 问题答案: 在一个简短的Google之后,会弹出以下代码:https : //codereview.stackexchange.com/questions/100917/connect- four-game-in- java 或http:/
我将我的应用程序迁移到Android P(28级),并在运行Android P的模拟器上进行了测试。许可证检查结果显示错误“无法连接到服务器”。在Logcat中,我发现了“不允许清除文本流量”的消息。 我添加了一个配置文件network-security-config.xml:cleartextTraffePermit="true",并在清单中的标签“应用程序”下添加了android: netwo
问题内容: 有没有一种方法可以检查垃圾收集器是否可以提取对象? 在我的代码中的某个地方,我有一个对象的引用: 然后,通过Eclipse Debugger,获得对象的存储位置。之后,我将引用设置为null: 有什么方法可以检查以前引用的对象现在是否适合垃圾回收,或者是否有其他引用? 非常感谢, 斯特凡 问题答案: 您无法在运行时使用任意对象执行此操作,实际上,不可能完全确定地执行此操作。但是,有两种