پیاده سازی بازی Tic Tac Toe یا دوز
پیاده سازی بازی Tic Tac Toe یا دوز
مقدمه
بازی Tic Tac Toe یک بازی دو نفره است که در یک ماتریس ۳x۳ انجام میشود. دو بازیکن به ترتیب علامتهای X و O را در خانههای خالی ماتریس قرار میدهند. هدف هر بازیکن این است که سه علامت خود را به صورت افقی، عمودی یا قطری در یک ردیف قرار دهد. اگر تمام خانههای ماتریس پر شوند و هیچ بازیکنی نتواند سه علامت خود را در یک ردیف قرار دهد، بازی مساوی خواهد شد.
روش حل
برای پیادهسازی این بازی، مراحل زیر را دنبال میکنیم:
-
تعریف ماتریس بازی: یک ماتریس ۳x۳ برای نمایش وضعیت بازی استفاده میشود.
-
چرخش نوبت بازیکنان: بازیکنان به نوبت علامتهای خود را در خانههای خالی ماتریس قرار میدهند.
-
بررسی وضعیت بازی: پس از هر حرکت، بررسی میشود که آیا بازیکن فعلی برنده شده است یا خیر.
-
بررسی مساوی بودن بازی: اگر تمام خانههای ماتریس پر شوند و هیچ بازیکنی برنده نشده باشد، بازی مساوی اعلام میشود.
-
پایان بازی: بازی تا زمانی که یکی از بازیکنان برنده شود یا بازی مساوی شود، ادامه مییابد.
شبه کد
در ادامه با کمک یک شبه کد روند برنامه بازی Tic Tac Toe را برای شما شرح خواهیم داد:
1. Initialize a 3x3 matrix with empty cells
2. Set current_player to 'X'
3. While True:
4. Display the current state of the matrix
5. Ask current_player to enter row and column
6. If the selected cell is empty:
7. Place current_player's mark in the selected cell
8. If check_win(current_player) is True:
9. Display "current_player wins!"
10. Break the loop
11. If check_draw() is True:
12. Display "It's a draw!"
13. Break the loop
14. Switch current_player to the other player
15. Else:
16. Display "Cell is already occupied. Try again."
پیاده سازی در زبانهای مختلف
بعد از این که الگوریتم این بازی برای شما شرح داده شده و شبه کد آن را برای شما نمایش دادیم نوبت پیاده سازی این بازی می رسد. بازی Tic Tac Toe از آنجایی که نیزمند تسلط به ماتریس ها توابع و پارامترهای آنها، شرط ها حلقهها و حلقههای تودرتو دارد یکی از پروژه های ثابت در مراحل آموزش تمام زبان های برنامه نویسی میباشد. لذا در ادامه سعی می کنیم این بازی را در زبان های پرکاربردی همچون Python, java, Cpp پیاده سازی نماییم:
پیاده سازی در ++C :
#include
using namespace std;
char board[3][3] = {{' ', ' ', ' '}, {' ', ' ', ' '}, {' ', ' ', ' '}};
char currentPlayer = 'X';
void displayBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << board[i][j];
if (j < 2) cout << "|";
}
cout << endl;
if (i < 2) cout << "-----" << endl;
}
}
bool checkWin(char player) {
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) return true;
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) return true;
}
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) return true;
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) return true;
return false;
}
bool checkDraw() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') return false;
}
}
return true;
}
int main() {
int row, col;
while (true) {
displayBoard();
cout << "Player " << currentPlayer << ", enter row (0-2) and column (0-2): ";
cin >> row >> col;
if (board[row][col] == ' ') {
board[row][col] = currentPlayer;
if (checkWin(currentPlayer)) {
displayBoard();
cout << "Player " << currentPlayer << " wins!" << endl;
break;
}
if (checkDraw()) {
displayBoard();
cout << "It's a draw!" << endl;
break;
}
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
} else {
cout << "Cell is already occupied. Try again." << endl;
}
}
return 0;
}
در برنامه بالا تابع displayBoard وظیفه ترسیم ماتریس در خروجی را برعهده دارد، با کمک تابع checkWin وضعیت برد بازیکن مورد نظر را بررسی می کنیم که آیا در وضعیت برد قرار دارد یا خیر، در نهایت تابع checkDraw بررسی می کند که آیا تمام خانه ها پرشده اند یا خیر.
پیاده سازی در Python :
board = [[' ' for _ in range(3)] for _ in range(3)]
current_player = 'X'
def display_board():
for row in board:
print("|".join(row))
print("-" * 5)
def check_win(player):
for i in range(3):
if all([cell == player for cell in board[i]]): return True
if all([board[j][i] == player for j in range(3)]): return True
if all([board[i][i] == player for i in range(3)]): return True
if all([board[i][2 - i] == player for i in range(3)]): return True
return False
def check_draw():
return all([cell != ' ' for row in board for cell in row])
while True:
display_board()
row, col = map(int, input(f"Player {current_player}, enter row (0-2) and column (0-2): ").split())
if board[row][col] == ' ':
board[row][col] = current_player
if check_win(current_player):
display_board()
print(f"Player {current_player} wins!")
break
if check_draw():
display_board()
print("It's a draw!")
break
current_player = 'O' if current_player == 'X' else 'X'
else:
print("Cell is already occupied. Try again.")
پیاده سازی در Java :
import java.util.Scanner;
public class TicTacToe {
private static char[][] board = new char[3][3];
private static char currentPlayer = 'X';
public static void main(String[] args) {
initializeBoard();
Scanner scanner = new Scanner(System.in);
while (true) {
displayBoard();
System.out.print("Player " + currentPlayer + ", enter row (0-2) and column (0-2): ");
int row = scanner.nextInt();
int col = scanner.nextInt();
if (board[row][col] == ' ') {
board[row][col] = currentPlayer;
if (checkWin(currentPlayer)) {
displayBoard();
System.out.println("Player " + currentPlayer + " wins!");
break;
}
if (checkDraw()) {
displayBoard();
System.out.println("It's a draw!");
break;
}
currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
} else {
System.out.println("Cell is already occupied. Try again.");
}
}
scanner.close();
}
private static void initializeBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = ' ';
}
}
}
private static void displayBoard() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(board[i][j]);
if (j < 2) System.out.print("|");
}
System.out.println();
if (i < 2) System.out.println("-----");
}
}
private static boolean checkWin(char player) {
for (int i = 0; i < 3; i++) {
if (board[i][0] == player && board[i][1] == player && board[i][2] == player) return true;
if (board[0][i] == player && board[1][i] == player && board[2][i] == player) return true;
}
if (board[0][0] == player && board[1][1] == player && board[2][2] == player) return true;
if (board[0][2] == player && board[1][1] == player && board[2][0] == player) return true;
return false;
}
private static boolean checkDraw() {
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') return false;
}
}
return true;
}
}
دیدگاهتان را بنویسید