三子棋C語言實現

//三子棋
//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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章