char board[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} };
char currentPlayer = 'X';
int moves = 0;
void setup() {
Serial.begin(9600);
printBoard();
Serial.println("Player X, enter a position (1-9):");
}
void loop() {
if (Serial.available() > 0) {
char input = Serial.read();
if (input >= '1' && input <= '9') {
int pos = input - '1';
int row = pos / 3;
int col = pos % 3;
if (board[row][col] != 'X' && board[row][col] != 'O') {
board[row][col] = currentPlayer;
moves++;
printBoard();
if (checkWin()) {
Serial.print("Player "); Serial.print(currentPlayer); Serial.println(" wins!");
resetGame();
} else if (moves == 9) {
Serial.println("It's a draw!");
resetGame();
} else {
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
Serial.print("Player "); Serial.print(currentPlayer); Serial.println(", your turn:");
}
}
}
}
}
void printBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
Serial.print(board[i][j]);
if (j < 2) Serial.print(" | ");
}
Serial.println();
if (i < 2) Serial.println("---------");
}
}
bool checkWin() {
for (int i = 0; i < 3; i++) {
if (board[i][0] == board[i][1] && board[i][1] == board[i][2]) return true; // Rows
if (board[0][i] == board[1][i] && board[1][i] == board[2][i]) return true; // Cols
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2]) return true; // Diagonals
if (board[0][2] == board[1][1] && board[1][1] == board[2][0]) return true;
return false;
}
void resetGame() {
char start = '1';
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) board[i][j] = start++;
}
moves = 0;
currentPlayer = 'X';
Serial.println("\nNew Game! Player X start:");
printBoard();
}