因此,今天我出于学习目的制作TicTacToe,直到我自己尝试玩为止,一切似乎都很不错-在某些情况下,游戏应该在应该结束之前完成。假设这是我的tictactoe网格:
1|2|3
4|5|6
7|8|9
因此,举例来说,当我将X设置为2且O游戏突然结束时,该玩家2(O用户)获胜。
这是我的功能,用于确定是否有人获胜。我做这样的计算可能很愚蠢,但是我真的不知道找到别人何时获胜并确定谁是获胜者的其他方法。简单的8 if陈述包括获胜者在内的所有可能结果。
(plr1,plr2-值为“ X”和“ O”的字符串,text1,2,3是X和O的文本视图,它们的排列方式与上面的网格相同)
if(text1.getText().toString() == text2.getText().toString() && text2.getText().toString() == text3.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text4.getText().toString() == text5.getText().toString() && text5.getText().toString() == text6.getText().toString()) {
if(text4.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text7.getText().toString() == text8.getText().toString() && text8.getText().toString() == text9.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text1.getText().toString() == text4.getText().toString() && text4.getText().toString() == text7.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text2.getText().toString() == text5.getText().toString() && text5.getText().toString() == text8.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text3.getText().toString() == text6.getText().toString() && text6.getText().toString() == text9.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text1.getText().toString() == text5.getText().toString() && text5.getText().toString() == text9.getText().toString()) {
if(text7.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text7.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
else if(text3.getText().toString() == text5.getText().toString() && text5.getText().toString() == text7.getText().toString()) {
if(text1.getText().toString() == plr1) {
status.setText("Player 1 won!");
gameRunning = false;
}
else if(text1.getText().toString() == plr2){
status.setText("Player 2 won!");
gameRunning = false;
}
}
从逻辑上讲,问题应该在if语句上,但是对我来说,它们似乎还可以,也许我错过了一些东西,因为当前在这里是午夜。
最佳答案
比较从TextView
获得的字符串是性能瓶颈(即使仅执行了几次),并且更普遍地讲,它不是很好的实践。如您所展示的,您的TicTacToe网格可以适合3x3数组,可以这样定义:byte[][] grid = new byte[3][3];
。 byte
就足够了,因为网格正方形只能具有3种状态:空(例如0
),X(1
)和O(2
)。
这样,更容易,更清洁,更快捷地检查获胜者:
检查横向胜利
for (int i = 0; i < 3; i++) {
if ((grid[0][i] == grid[1][i]) && (grid[1][i] == grid[2][i])) {
...
}
}
检查垂直获胜(每列...)
检查2个对角线获胜(可以循环,但对于固定的3×3板不值得)
在每种情况下,只要从获胜线中获取任何值即可确定谁获胜。
关于java - Android TicTacToe-随机游戏结局,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24600174/