三子棋 C语言

#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];
void Init(){
 srand((unsigned int)time(0));
 for (int row = 0; row < ROW; row++){
  for (int col = 0; col < COL; col++){
   g_board[row][col] = ' ';
  }
 }
}
void Print(){
 printf(" - - - \n");
 for (int 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){
  printf("请输入坐标(x y):");
  int x, y;
  scanf("%d %d", &x, &y);
  int row = x - 1;
  int col = y - 1;
  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() % 3;
  int col = rand() % 3;
  if (g_board[row][col] != ' '){
   continue;
  }
  g_board[row][col] = 'O';
  break;
 }
}
int Check_full(){
 int row, col;
 for (row = 0; row < ROW; row++){
  for (col = 0; col < COL; col++){
   if (g_board[row][col] == ' '){
    return 0;
   }
  }
 }
 return 1;
}
char CheckWinner(){
 for (int 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 (int 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[1][1]
  &&g_board[0][0] == g_board[2][2]
  &&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];
 }
 if (Check_full()){
  return 'G';
 }
 return ' ';
}
int main(){
 Init();
 char winner;
 while (1){
  Computermove();
  Print();
  winner = CheckWinner();
  if (winner != ' '){
   break;
  }
  Playermove();
  winner = CheckWinner();
  if (winner != ' '){
   break;
  }
 }
 Print();
 if (winner == 'X'){
  printf("恭喜玩家胜!\n");
 }
 if (winner == 'O'){
  printf("小菜鸡,连个电脑都下不赢!\n");
 }
 if (winner == 'G'){
  printf("和棋\n");
 }
 system("pause");
 return 0;
} 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值