Chuẩn bị
- Visual Studio 2019.
- Loại project: console C++.
- Ngôn ngữ lập trình: C++.
Thành phẩm
Code đầy đủ
#include <iostream> using namespace std; #define SIZE 3 char board[SIZE][SIZE] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} }; int player = 1; bool isGameOver = false; bool isTie = false; void printBoard() { cout << "-------------" << endl; for (unsigned int i = 0; i < SIZE; i++) { for (unsigned int j = 0; j < SIZE; j++) { cout << "| " << board[i][j] << " "; } cout << "|" << endl; cout << "-------------" << endl; } } void update() { char mark; player = (player % 2) ? 1 : 2; mark = (player == 1) ? 'X' : 'O'; int x, y; do { cout << "Player " << player << ", please input position you choice: "; cin >> x >> y; } while (x > 2 || y > 2 || board[x][y] != ' '); if (board[x][y] == ' ') board[x][y] = mark; player++; } bool checkBoard() { if (board[0][0] != ' ' && board[0][0] == board[0][1] && board[0][1] == board[0][2]) return true; else if (board[1][0] != ' ' && board[1][0] == board[1][1] && board[1][1] == board[1][2]) return true; else if (board[2][0] != ' ' && board[2][0] == board[2][1] && board[2][1] == board[2][2]) return true; else if (board[0][0] != ' ' && board[0][0] == board[1][0] && board[1][0] == board[2][0]) return true; else if (board[0][1] != ' ' && board[0][1] == board[1][1] && board[1][1] == board[2][1]) return true; else if (board[0][2] != ' ' && board[0][2] == board[1][2] && board[1][2] == board[2][2]) return true; else if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) return true; else if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) return true; else if (board[0][0] != ' ' && board[0][1] != ' ' && board[0][2] != ' ' && board[1][0] != ' ' && board[1][1] != ' ' && board[1][2] != ' ' && board[2][0] != ' ' && board[2][1] != ' ' && board[2][2] != ' ') { isTie = true; return true; } return false; } int main() { cout << "\tGAME TICTACTOE C++" << endl; cout << "PLAYER 1 - [X] \t PLAYER 2 = [O]\n" << endl; while (!isGameOver) { update(); printBoard(); isGameOver = checkBoard(); if (isGameOver) { if (isTie) cout << "-----Both players are tie-----"; else cout << "-----Player " << -- player << " is winner-----" << endl; } } }
Giải thích
#include <iostream> using namespace std;
Khai báo thư viện nhập - xuất trên cửa sổ Console
#define SIZE 3 char board[SIZE][SIZE] = { {' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '} }; int player = 1; bool isGameOver = false; bool isTie = false;
Khai báo bàn cờ với kích thước 3x3, và các biến liên quan đến game
void printBoard() { cout << "-------------" << endl; for (unsigned int i = 0; i < SIZE; i++) { for (unsigned int j = 0; j < SIZE; j++) { cout << "| " << board[i][j] << " "; } cout << "|" << endl; cout << "-------------" << endl; } }
Hàm printBoard()
dùng để in bàn cờ ra cửa sổ Console của game
void update() { char mark; player = (player % 2) ? 1 : 2; mark = (player == 1) ? 'X' : 'O'; int x, y; do { cout << "Player " << player << ", please input position you choice: "; cin >> x >> y; } while (x > 2 || y > 2 || board[x][y] != ' '); if (board[x][y] == ' ') board[x][y] = mark; player++; }
Hàm update()
dùng để cập nhật thông tin thứ tự người chơi, cập nhật vị trí người chơi đã đi trên bàn cờ.
Đoạn code do-while
dùng để kiểm tra xem người chơi có nhập vị trí ngoài khu vực bàn cờ hay nhập trùng vị trí đã đi rồi trên bàn cờ hay ko, nếu có thì người chơi phải nhập lại vị trí
bool checkBoard() { if (board[0][0] != ' ' && board[0][0] == board[0][1] && board[0][1] == board[0][2]) return true; // Kiểm tra hàng ngang thứ 1 trên bàn cờ else if (board[1][0] != ' ' && board[1][0] == board[1][1] && board[1][1] == board[1][2]) return true ;// Kiểm tra hàng ngang thứ 2 trên bàn cờ else if (board[2][0] != ' ' && board[2][0] == board[2][1] && board[2][1] == board[2][2]) return true; // Kiểm tra hàng ngang thứ 3 trên bàn cờ else if (board[0][0] != ' ' && board[0][0] == board[1][0] && board[1][0] == board[2][0]) return true; // Kiểm tra hàng dọc thứ 1 trên bàn cờ else if (board[0][1] != ' ' && board[0][1] == board[1][1] && board[1][1] == board[2][1]) return true; // Kiểm tra hàng dọc thứ 2 trên bàn cờ else if (board[0][2] != ' ' && board[0][2] == board[1][2] && board[1][2] == board[2][2]) return true; // Kiểm tra hàng dọc thứ 3 trên bàn cờ else if (board[0][0] != ' ' && board[0][0] == board[1][1] && board[1][1] == board[2][2]) return true; // Kiểm tra hàng chéo thứ 1 trên bàn cờ else if (board[0][2] != ' ' && board[0][2] == board[1][1] && board[1][1] == board[2][0]) return true; // Kiểm tra hàng chéo thứ 2 trên bàn cờ else if (board[0][0] != ' ' && board[0][1] != ' ' && board[0][2] != ' ' && board[1][0] != ' ' && board[1][1] != ' ' && board[1][2] != ' ' && board[2][0] != ' ' && board[2][1] != ' ' && board[2][2] != ' ') { // Trường hợp hai người chơi hòa nhau isTie = true; return true; } return false; }
Hàm checkBoard()
dùng để kiểm tra xem có trường hợp nào thắng cuộc hay không. Hàm được gọi sau khi bất kỳ người chơi nào nhập vị trí muốn đi vào bàn cờ.
int main() { cout << "\tGAME TICTACTOE C++" << endl; cout << "PLAYER 1 - [X] \t PLAYER 2 = [O]\n" << endl; while (!isGameOver) { update(); printBoard(); isGameOver = checkBoard(); if (isGameOver) { if (isTie) cout << "-----Both players are tie-----"; else cout << "-----Player " << -- player << " is winner-----" << endl; } } return 0; }
Hàm này là hàm chính của chương trình. Đoạn code trong vòng lặp while
sẽ được lặp cho tới khi trò chơi kết thúc tìm ra kết quả hòa hoặc người chơi thắng cuộc.