//三子棋
//1.打印棋盤
//2.電腦落子,判斷是否結束
//3.玩家落子,判斷遊戲是否結束
//4.重複以上
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <time.h> //
#define ROW 3
#define COL 3
char g_board[ROW][COL];
int row, col;
//對二維數組進行初始化,使每一個元素爲 ''
void Init(){
srand((unsigned int)time(0)); //放在代碼最開始
for (row = 0; row < ROW; ++row){
for (col = 0; col < COL; ++col)
g_board[row][col] = ' ';
}
}
void Print(){
printf(" --- --- ---\n");
for (row = 0; row < ROW; ++row){
printf("| %c | %c | %c |\n", g_board[row][0], g_board[row][1]
, g_board[row][2]);
printf(" --- --- ---\n");
}
}
void PlayerMove(){
printf("請輸入一個座標,並用空格隔開\n");
while (1){
scanf("%d %d", &row, &col);
row--; col--;
if (row<0 || row>=ROW || col<0 || col>=COL){
printf("您輸入的座標非法,請重新輸入:\n");
continue;
}
if (g_board[row][col] != ' '){
printf("您輸入的座標已經有其他子了,請重新輸入:\n");
continue;
}
g_board[row][col] = 'x';
break;
}
}
void ComputerMove(){
printf("請電腦落子:\n");
while(1){
int row = rand() % ROW;
int col = rand() % COL;
if (g_board[row][col] != ' '){
continue;
}
g_board[row][col] = 'o';
break;
}
}
char CheckWinner(){
//檢查行
for (row = 0; row < ROW; ++row){
if (g_board[row][0] == g_board[row][1] &&
g_board[row][0] == g_board[row][2] &&
g_board[row][0] != ' ')
return g_board[row][0];
}
//檢查列
for (col = 0; col < COL; ++col){
if (g_board[0][col] == g_board[1][col] &&
g_board[0][col] == g_board[2][col] &&
g_board[0][col] != ' ')
return g_board[0][col];
}
//檢查對角線
if (g_board[0][0] == g_board[2][2] &&
g_board[0][0] == g_board[1][1] &&
g_board[0][0] != ' ')
return g_board[0][0];
if (g_board[0][2] == g_board[1][1] &&
g_board[0][2] == g_board[2][0] &&
g_board[0][2] != ' ')
return g_board[0][2];
for (row = 0; row < ROW; ++row){
for (col = 0; col < COL; ++col){
if (g_board[row][col] == ' ')
return ' ';
}
}
return 'q';
}
int main()
{
char winner;
Init();
while (1){
////1.打印棋盤
Print();
////2.玩家落子,判斷遊戲是否結束
PlayerMove();
winner = CheckWinner();
if (winner != ' ')
break;
////3.電腦落子,判斷遊戲是否結束
ComputerMove();
winner = CheckWinner();
if (winner != ' ')
break;
}
Print();
if (winner == 'x')
printf("玩家勝\n");
if (winner == 'o')
printf("電腦勝\n");
if (winner == 'q')
printf("和棋\n");
////4.重複進行
system("pause");
return 0;
}
三子棋C語言實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.