import java.util.Scanner;
public class TicTacToe {
public static void main(String[] args) {
char[][] board = {{'1','2','3'}, {'4','5','6'}, {'7', '8', '9'}};
// assign player to char value of X's only
int play;
char player = 'X';
char cpu = 'O';
int rowNumber;
int columnNumber;
int playerORow;
int playerOcolumn;
System.out.println("Welcome to tic, tac, toe!\n");
System.out.println("Do you wish to play? 1 for yes, 2 for no ");
Scanner input = new Scanner(System.in);
play = input.nextInt();
if(play != 1) {
System.out.print("Invalid input, game will now EXIT thanks for playing!");
System.exit(0);
} // end if
displayBoard(board);
System.out.println("You are limited to X's only, good luck!");
System.out.println("Please enter row (0-3) of your move: ");
rowNumber = input.nextInt();
System.out.println("Please enter column (1-3); of your move: ");
columnNumber = input.nextInt();
System.out.println("Please enter row (0-3) for player O: ");
playerORow = input.nextInt();
System.out.println("Please enter column (1-3); of your move: ");
playerOcolumn = input.nextInt();
if(board[rowNumber][columnNumber] != 'X' && board[rowNumber][columnNumber] != 'O') {
board[rowNumber][columnNumber] = player;
} // end if
else {
}
makeAMove(board, player);
hasWon(board, player);
boardFull(board);
} // end main method
// displays only the tic tac toe board
public static void displayBoard(char[][] board) {
// loop for each row
System.out.println(board[0][0] + " | " + board[0][1] + " | " + board[0][2] + "\n---------");
System.out.println(board[1][0] + " | " + board[1][1] + " | " + board[1][2] + "\n---------");
System.out.println(board[2][0] + " | " + board[2][1] + " | " + board[2][2] + "\n");
} // end display board method
// takes board array of values and updates it with valid row and column selected by player..does not return anything
public static void makeAMove(char[][] board, char player) {
displayBoard(board);
} // end makeAMove method
// compare each element in board to see if the char value of 'X' exists
// if exists then then return true, else return false
public static boolean hasWon(char[][] board, char player) {
// Check if the player has won by checking winning conditions.
if (board[0][0] == player && board[0][1] == player && board[0][2] == player || // 1st row
board[1][0] == player && board[1][1] == player && board[1][2] == player || // 2nd row
board[2][0] == player && board[2][1] == player && board[2][2] == player || // 3rd row
board[0][0] == player && board[1][0] == player && board[2][0] == player || // 1st col.
board[0][1] == player && board[1][1] == player && board[2][1] == player || // 2nd col.
board[0][2] == player && board[1][2] == player && board[2][2] == player || // 3rd col.
board[0][0] == player && board[1][1] == player && board[2][2] == player || // Diagonal \
board[2][0] == player && board[1][1] == player && board[0][2] == player) // Diagonal /
return true;
else {
return false;
}
} // end hasWon method
public static boolean boardFull(char [][] board) {
if (board[0][0] != '1' && board[0][1] != '2' && board[0][2] != '3' &&
board[1][0] != '4' && board[1][1] != '5' && board[1][2] != '6' &&
board[2][0] != '7' && board[2][1] != '8' && board[2][2] != '9')
return true;
else {
return false;
} // end else
} // end boardFull method
你只需要这样做:
board[rowNumber][columnNumber] = player;
当然,您必须事先检查该单元格是否已被占用。如果是,则再次请求用户输入。我想那不会那么难。
除此之外,我还建议您对代码进行一些改进:
enum Player {
X, O;
}
不需要用'1'、'2'、...
初始化数组。既然它们默认为null
。
与其将board
作为局部变量并在所有方法中传递它,不如将其作为类中的一个字段。
目前,您的代码只进行了一次移动。为什么?此外,您甚至没有使用haswon()
和boardfull()
方法的返回值。
我需要创建一个方法来检查tictactoe游戏是否在玩、DRAW、XWIN或owin。然而,我很难编写代码来检查X或O是否获胜,因为游戏板的大小和获胜所需的大小(sizeWin)会根据用户的输入而改变。我被迫使用一维阵列的游戏板。我根本不知道从这里到哪里去。我最近的想法是使用嵌套的for循环来检查是否按行、列或对角线获得胜利,但我不确定如何实现它。如果有人对如何处理这个问题有任何提示,或者有任何其
包含在程序启动时启动的线程。这个线程包含一个循环,每40毫秒更新一次游戏并重新绘制()board。 备选办法B: 板创建一个摆动计时器。这个计时器的动作监听器是板本身。actionPerformed()方法每40毫秒运行一次,并更新game+repaints Board()。 谢谢
问题内容: 下学期,我们有一个团队中的Java应用程序模块。该模块的要求是制作游戏。在圣诞节假期里,我一直在做一些练习,但是我想不出绘制图形的最佳方法。 我正在使用Java Graphics2D对象在屏幕上绘制形状,并每秒调用30次,但这非常闪烁。有没有更好的方法来绘制Java中的高性能2D图形? 问题答案: 您想要做的是创建一个带有BufferStrategy的canvas组件并对其进行渲染,下
问题内容: 我目前正在根据 主题医院 的想法编写一个非常基本的Java游戏。 我对Java还是很陌生,目前正在第一年就读于大学。我已经断断续续地做了Java两年了,但是我最终将自己的时间投入到一个不错的项目中。 我处于需要创建一个人(患者)才能入院的阶段。他们需要先到接待处,再到GP的办公室,然后再回到起始位置。 我已经研究过A *路径查找,但是对我来说似乎真的很复杂。我了解我的想法,但不确定如何
问题内容: 我正在尝试用Java制作2D游戏,但是当我在线程中调用repaint()方法时,会有一个奇怪的仅灰色窗口。 这是我到目前为止的源代码: Spaceshooter.java 播放器 预先感谢您的答复! 问题答案: 什么是EDT? Swing事件处理代码在称为事件调度线程的特殊线程上运行。大多数调用Swing方法的代码也都在此线程上运行。这是必需的,因为大多数Swing对象方法都不是“线程
我需要使用JavaSlick库创建一个固定大小的2D网格,例如20x20。目前我有一个包含符号(文本)的数组[]。这些符号代表棋盘上的不同瓷砖(正方形)。 我知道如何在屏幕上渲染/绘制单个图像,但不确定如何在网格上执行相同的操作(循环?对游戏来说渲染不是太多吗?)。我应该研究精灵表的概念吗? 理想情况下,我想创造 平铺对象:平铺、平铺、大小、图像(基于类型) 我不知道如何在屏幕上绘制/渲染它。我应