#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MAX_ROW 3
#define MAX_COL 3
//空間剩余
int IsFull(char CheckerBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
if (CheckerBoard[row][col] == ' ') {
return 0;
}
}
}
return 1;
}
//判斷勝負
//'x'贏,'o'輸,' '勝負未分,'L'和棋
char IsWin(char CheckerBoard[MAX_ROW][MAX_COL]) {
//判斷行
for (int row = 0; row < MAX_ROW; row++) {
if (CheckerBoard[row][0] != ' '
&&CheckerBoard[row][0] == CheckerBoard[row][1]
&&CheckerBoard[row][0] == CheckerBoard[row][2]) {
return CheckerBoard[row][0];
}
}
//判斷列
for (int col = 0; col < MAX_COL; col++) {
if (CheckerBoard[0][col] != ' '
&&CheckerBoard[0][col] == CheckerBoard[1][col]
&&CheckerBoard[0][col] == CheckerBoard[2][col]) {
return CheckerBoard[0][col];
}
}
//判斷對角線
if (CheckerBoard[0][0] != ' '
&&CheckerBoard[0][0] == CheckerBoard[1][1]
&&CheckerBoard[0][0] == CheckerBoard[2][2]) {
return CheckerBoard[0][0];
}
if (CheckerBoard[0][2] != ' '
&&CheckerBoard[0][2] == CheckerBoard[1][1]
&&CheckerBoard[0][2] == CheckerBoard[2][0]) {
return CheckerBoard[0][2];
}
//判斷是否和棋
//是否有剩余空間
if (IsFull(CheckerBoard)) {
return ' L';
}
return ' ';
}
//電腦落子
void ComputerGamers(char CheckerBoard[MAX_ROW][MAX_COL]) {
//電腦隨機產生一組行列坐標
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (CheckerBoard[row][col] != ' ') {
continue;
}
CheckerBoard[row][col] = 'o';
break;
}
}
//玩家落子
void Gamers(char CheckerBoard[MAX_ROW][MAX_COL]) {
while (1) {
printf("請玩家輸入坐標(row col):");
int row;
int col;
scanf("%d %d", &row, &col);
//檢驗落子位置是否合法
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
printf("您輸入的坐標不在合法范圍內[0,2]\n");
continue;
}
//檢驗落子位置是否已經有子
if (CheckerBoard[row][col] != ' ') {
printf("您在該位置已經落子,請重新輸入一個坐標\n");
continue;
}
//真正落子
CheckerBoard[row][col] = 'x';
break;
}
}
//列印
void Printing(char CheckerBoard[MAX_ROW][MAX_COL]) {
printf("+---+---+---+\n");
for (int row = 0; row < MAX_ROW; row++) {
printf("| %c | %c | %c |\n",CheckerBoard[row][0], CheckerBoard[row][1],
CheckerBoard[row][2]);
printf("+---+---+---+\n");
}
}
//初始化
void Init(char CheckerBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
CheckerBoard[row][col] = ' ';
}
}
}
//游戲邏輯
void game() {
//創建棋盤
//初始化棋盤
//列印棋盤
//玩家落子
//判斷勝負
//電腦落子
//判斷勝負
char CheckerBoard[MAX_ROW][MAX_COL] = { 0 };
char winner = ' ';
Init(CheckerBoard);
while (1) {
Printing(CheckerBoard);
Gamers(CheckerBoard);
winner = IsWin(CheckerBoard);
if (winner != ' ') {
break;
}
ComputerGamers(CheckerBoard);
winner = IsWin(CheckerBoard);
if (winner != ' ') {
break;
}
}
Printing(CheckerBoard);
if (winner == 'x') {
printf("恭喜您,您贏了智障劉喆\n");
}
else if (winner == 'o') {
printf("你連智障劉喆都贏不了!!\n");
}
else {
printf("不好意思,你和智障劉喆五五開\n");
}
}
//創建選單
int Menu() {
printf("-------------------------\n");
printf("-------1.進入游戲--------\n");
printf("-------0.退出游戲--------\n");
printf("-------------------------\n");
printf("請輸入您的選擇:");
int choice;
scanf("%d", &choice);
return choice;
}
int main() {
//隨機種子
srand((unsigned int)time(0));
while (1) {
int choice = Menu();
if (choice == 1) {
game();
}
else if (choice == 0) {
printf("您以退出游戲\n");
break;
}
else {
printf("你咋跟劉喆一樣蠢,重新輸入\n");
}
}
system("pause");
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/226968.html
標籤:其他
