我是Java的新手,我正在尝试构建一个简单的TicTactoE-game。我创建了checkforWin方法来检查棋盘上不同组合的胜者,它似乎很管用,但似乎很麻烦,我不确定它是否被认为是“好的编码”。这是我的代码:
import java.util.*;
public class TicTacToeNeu {
static public char playerPiece = 'X';
static public char computerPiece = 'O';
static char[] [] board = {{'_','|','_','|','_'},
{'_', '|', '_','|','_'},
{' ','|',' ','|',' '}};
static boolean gameOver = false;
/**
* @param args
*/
public static void main(String[] args) {
Scanner imputScanner = new Scanner(System.in);
System.out.println("Would you like to start?"); // "Would you like to start (Yes/No)"
String firstImput = imputScanner.nextLine(); // input user
boolean playersTurn = start(firstImput);
if (!playersTurn) { //it's the computers turn first
int rand = (int) (Math.random() * 4); //random number between 0 and 3
switch (rand) {
case 0:
board[0][0] = computerPiece;
break;
case 1:
board[0][4] = computerPiece;
break;
case 2:
board[2][0] = computerPiece;
break;
case 3:
board[2][4] = computerPiece;
break;
}
playersTurn = true;
}
while(true) {
if(playersTurn) {
printBoard(board);
System.out.println("Give a number from 1 to 9");
int secondImput = imputScanner.nextInt();
playerMove(board, secondImput);
boolean playerWinner = checkforWin(board);
if(playerWinner == true) {
gameOver = true;
System.out.println("You won!");
}
}
else {
computerMove(board);
boolean computerWinner = checkforWin(board);
if(computerWinner == true && gameOver == false) {
System.out.println("Computer won!");
}
}
playersTurn = !playersTurn;
}
}
public static boolean checkforWin(char [] [] board) {
for(int r = 0; r < 3; r ++) {
//check horizontal winner
if(board[r][0] == 'X' && board[r][2] == 'X' && board[r][4] == 'X') {
return true;
}
else if(board[r][0] == 'O' && board[r][2] == 'O' && board[r][4] == 'O') {
return true;
}
}
// check vertical winner
for(int c = 0; c <= 4; c += 2 ) {
if(board[0][c] == 'X' && board[1][c] == 'X' && board[2][c] == 'X') {
return true;
}
else if(board[0][c] == 'O' && board[1][c] == 'O' && board[2][c] == 'O') {
return true;
}
}
//check diagonal winner X (player)
if(board[1][2]=='X') {
for(int x = 0; x <= board.length; x ++){
if((board[0][0] == 'X' && board[2][4]=='X')||(board[0][4]=='X'&&board[2][0]=='X')) {
return true;
}
}
}
else if (board[1][2]=='O') { //check diagonal winner O (computer)
for(int x = 0; x <= board.length; x ++){
if((board[0][0] == 'O' && board[2][4]=='O')||(board[0][4]=='O'&&board[2][0]=='O')) {
return true;
}
}
}
else {
return false;
}
return false;
}
// public static boolean validateImputUser(String imputUser) {
//
// Scanner in = new Scanner(System.in);
// imputUser = in.nextLine();
// while (imputUser.length() != 2) {
// return false;
// System.out.println("Geben Ihr Eingabe wieder");
// imputUser = in.nextLine();
// }
// return true;
// }
public static void computerMove(char [] [] board) {
char character = 'O';
int position = (int)(Math.random() * 9);
boolean result = validateMove(position, board); // controls open space on the board
while(!result) {
position = (int) (Math.random() * 9);
result = validateMove(position, board);
}
switch (position){
case 1:
board[0][0] = character;
break;
case 2:
board[0][2] = character;
break;
case 3:
board[0][4] = character;
break;
case 4:
board[1][0] = character;
break;
case 5:
board[1][2] = character;
break;
case 6:
board[1][4] = character;
break;
case 7:
board[2][0] = character;
break;
case 8:
board[2][2] = character;
break;
case 9:
board[2][4] = character;
break;
default:
break;
}
}
public static boolean validateMove(int position, char[][] board) {
switch (position){
case 1:
if(board[0][0] == '_'){
return true;
} else{
return false;
}
case 2:
if(board[0][2] == '_'){
return true;
} else{
return false;
}
case 3:
if(board[0][4] == '_'){
return true;
} else{
return false;
}
case 4:
if(board[1][0] == '_'){
return true;
} else{
return false;
}
case 5:
if(board[1][2] == '_'){
return true;
} else{
return false;
}
case 6:
if(board[1][4] == '_'){
return true;
} else{
return false;
}
case 7:
if(board[2][0] == ' '){
return true;
} else{
return false;
}
case 8:
if(board[2][2] == ' '){
return true;
} else{
return false;
}
case 9:
if(board[2][4] == ' '){
return true;
} else{
return false;
}
default:
return false;
}
}
public static void playerMove(char [] [] board, int position) {
char character = 'X';
boolean result = validateMove(position, board);
while(!result) {
System.out.println("Invalid");
System.out.println("Give a number between 1 and 9");
Scanner scan = new Scanner(System.in);
position = scan.nextInt();
result = validateMove(position, board);
}
switch (position){
case 1:
board[0][0] = character;
break;
case 2:
board[0][2] = character;
break;
case 3:
board[0][4] = character;
break;
case 4:
board[1][0] = character;
break;
case 5:
board[1][2] = character;
break;
case 6:
board[1][4] = character;
break;
case 7:
board[2][0] = character;
break;
case 8:
board[2][2] = character;
break;
case 9:
board[2][4] = character;
break;
default:
break;
}
}
public static boolean start (String imput) {
if(imput.equals("Yes")) {
return true;
}
return false;
}
public static void printBoard(char [] [] board) {
for(char [] row: board) {
for(char column: row) {
System.out.print(column);
}
System.out.println();
}
}
}
问题是将checkforWin方法拆分为两个方法是否更好,一个用于播放机,一个用于计算机。此外,我不知道使用和if-else语句来检查板子上的对角线胜利是否是个好主意,开始两个检查中心位置(板子[1][2])。每一个改进这部分代码的提示都将非常感谢。
您可以使用以下方法检查对角线。
请注意:
主要对角线位置为:0,0
,1,1
,2,2
。
次要对角线位置为:0,2
,1,1
,2,0
。
public static int checkforDiagonalWin(char [][] board)
{
// If `player` wins : return 1
if (board[0][0] = 'X' && board[0][0] == board[1][1] && board[1][1] == board[2][2])
return 1;
if (board[0][2] = 'X' && board[0][2] == board[1][1] && board[1][1] == board[2][0])
return 1;
// If `computer` wins : return -1
if (board[0][0] = 'O' && board[0][0] == board[1][1] && board[1][1] == board[2][2])
return -1;
if (board[0][2] = 'O' && board[0][2] == board[1][1] && board[1][1] == board[2][0])
return -1;
return 0; // No one wins
}
-1表示计算机的
获胜。
1表示玩家的
获胜。
0表示未找到赢家。
我是Java的新手,我正在尝试构建一个简单的TicTactoE-game。我创建了checkforWin方法来检查棋盘上不同组合的胜者,它似乎很管用,但似乎很麻烦,我不确定它是否被认为是“好的编码”。这是我的代码: 问题是将checkforWin方法拆分为两个方法是否更好,一个用于播放机,一个用于计算机。此外,我不知道使用和if-else语句来检查板子上的对角线胜利是否是个好主意,开始两个检查中心
请原谅长标题。StackOverflow不会接受较短的。 我试图在科特林制作一个井字游戏。到目前为止,除了对角线检查之外,一切都运行得非常好。 基本上, 函数的作用是创建一个矩阵,其中包含井字棋棋盘中的所有容器,然后检查棋盘的行,列和对角线值是否相等。如果检测到获胜者,该函数会将文本设置为“您获胜”。行和列检查工作正常,但是如果我在对角线上有3个X-s,则没有任何反应。 代码对我来说似乎很好,所以
对角线从右到左 在这里,支票中奖者代码结束。
问题内容: 目前,我正在开发在8x8 2D阵列板上生成随机0和1的程序。我要做的是检查对角线上的所有数字是否都相同(从角开始,而不仅仅是对角线)。 例: 因此,如果偶然从左上角(0,0),(1,1)…(7,7)开始的所有数字均为0或1,那么我必须输出到扫描仪,指示“是0“的主要对角线(来自上面的示例)。 同样从该示例中,我们可以看到从右上角向左下角对角重复数字“ 1”,然后我还必须显示“有一个较小
有人给了我一个井字游戏的代码。我制作了代码来检查垂直方向是否会赢,并尝试检查对角线。我能够检查主对角线,但似乎无法确定如何检查辅助对角线。我以为我拥有的代码会起作用,但事实并非如此。我的问题从第172行开始
目录类 驱动程序类