/* ============================================================================ Name : tictactoe.c Author : Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include #include /* * 0 - nobody wins * 1 - circles win * 2 - crosses win */ int testForWin(int* board) { // TODO make the code clean // circles horizontal if (board[0] == 1 && board[1] == 1 && board[2] == 1) return 1; // circles in 1st line if (board[3] == 1 && board[4] == 1 && board[5] == 1) return 1; // circles in 2nd line if (board[6] == 1 && board[7] == 1 && board[8] == 1) return 1; // circles in 3rd line // circle vertical if (board[0] == 1 && board[3] == 1 && board[6] == 1) return 1; // circles in 1st line if (board[1] == 1 && board[4] == 1 && board[7] == 1) return 1; // circles in 2nd line if (board[2] == 1 && board[5] == 1 && board[8] == 1) return 1; // circles in 3rd line // circle diagonal if (board[0] == 1 && board[4] == 1 && board[8] == 1) return 1; // circles in 1st line if (board[2] == 1 && board[4] == 1 && board[6] == 1) return 1; // circles in 2nd line // crosses horizontal if (board[0] == 2 && board[1] == 2 && board[2] == 2) return 2; // crosses in 1st line if (board[3] == 2 && board[4] == 2 && board[5] == 2) return 2; // crosses in 2nd line if (board[6] == 2 && board[7] == 2 && board[8] == 2) return 2; // crosses in 3rd line // crosses vertical if (board[0] == 2 && board[3] == 2 && board[6] == 2) return 2; // crosses in 1st line if (board[1] == 2 && board[4] == 2 && board[7] == 2) return 2; // crosses in 2nd line if (board[2] == 2 && board[5] == 2 && board[8] == 2) return 2; // crosses in 3rd line // crosses diagonal if (board[0] == 2 && board[4] == 2 && board[8] == 2) return 2; // crosses in 1st line if (board[2] == 2 && board[4] == 2 && board[6] == 2) return 2; // crosses in 2nd line return 0; } void printBoard(int* board) { // TODO make this function smaller, and clean printf("%c | %c | %c\n", board[0] == 1 ? 'O' : (board[0] == 2 ? 'X' : ' '), board[1] == 1 ? 'O' : (board[1] == 2 ? 'X' : ' '), board[2] == 1 ? 'O' : (board[2] == 2 ? 'X' : ' ')); printf("------------\n"); printf("%c | %c | %c\n", board[3] == 1 ? 'O' : (board[3] == 2 ? 'X' : ' '), board[4] == 1 ? 'O' : (board[4] == 2 ? 'X' : ' '), board[5] == 1 ? 'O' : (board[5] == 2 ? 'X' : ' ')); printf("------------\n"); printf("%c | %c | %c\n", board[6] == 1 ? 'O' : (board[6] == 2 ? 'X' : ' '), board[7] == 1 ? 'O' : (board[7] == 2 ? 'X' : ' '), board[8] == 1 ? 'O' : (board[8] == 2 ? 'X' : ' ')); } int main(void) { int board[9]; for (int i = 0; i < 9; i++) board[i] = 0; board[0] = 1; board[4] = 1; board[8] = 1; // clean board printBoard(board); // logic while (1) { // TODO REMARK, if there is no reading an input // from the user there will be here inf loop // 1. TODO ask user for the move // TODO validate the move (field has to be empty) // TODO check if user wins, then print and exit // the loop // 2. TODO computer makes the move // TODO the computer's move does not have to // clever, but it has to be correct // 3. TODO print the board // 4. check if there is a winner, if there is a // winner then exit the loop int result = testForWin(board); if (result != 0) { printf("%s WINS!\n", result == 1 ? "circles" : "crosses"); break; } } puts("TicTacToe finished"); return EXIT_SUCCESS; }