初级版五子棋

//五子棋改进:(电脑随机下棋,棋盘大小可随意更改)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int Menu(int choice)
{
 printf("=====================\n");
 printf("1    开始游戏!\n");
 printf("0    退出游戏!\n");
 printf("=====================\n");
 printf("请输入您的选择:\n");
 scanf("%d", &choice);
 return choice;
}
#define ROW 10
#define COL 10
char g_chess_board[ROW][COL];
void Init()
{
 for (int row = 0; row < ROW; ++row)
 {
  for (int col = 0; col < COL; ++col)
  {
   g_chess_board[row][col] = ' ';
  }
 }
}
void Display()
{
 for (int row = 0; row < ROW; ++row)
 {
  for (int col = 0; col < COL; ++col)
  {
   printf("| %c ", g_chess_board[row][col]);
  }
  printf("|\n");
  for (int col = 0; col < COL; ++col)
  {
   printf("____");
  }
  printf("\n");
 }
}
void Playermove()
{
 int row = 0;
 int col = 0;
 while (1)
 {
  printf("请玩家落子:(row,col)");
  scanf("%d %d", &row, &col);
  if (row < 0 || row >= ROW || col < 0 || col >= COL)
  {
   printf("输入有误,请重新输入:\n");
   continue;
  }
  if (g_chess_board[row][col] != ' ')
  {
   printf("此处有子,请重新输入:");
   continue;
  }
  g_chess_board[row][col] = 'x';
  break;
 }
}
void Computermove()
{
 printf("请电脑落子:\n");
 while (1)
 {
  int row = rand() % ROW;
  int col = rand() % COL;
  if (g_chess_board[row][col] == ' ')
  {
   g_chess_board[row][col] = 'o';
   break;
  }
 }
}
int Isfull()
{
 for (int row = 0; row < ROW; ++row)
 {
  for (int col = 0; col < COL; ++col)
  {
   if (g_chess_board[row][col] == ' ')
   {
    return 0;
   }
  }
 }
 return 1;
}
char Checkwinner(char winner)
{
 for (int row = 0; row < ROW; ++row)
 {
  for (int col = 2; col < COL - 2; ++col)
  {
   if (g_chess_board[row][col] == g_chess_board[row][col - 2] &&
    g_chess_board[row][col] == g_chess_board[row][col - 1] &&
    g_chess_board[row][col] == g_chess_board[row][col + 1] &&
    g_chess_board[row][col] == g_chess_board[row][col + 2] &&
    g_chess_board[row][col] != ' ')
   {
    return g_chess_board[row][col];
   }
  }
 }
 for (int col = 0; col < COL; ++col)
 {
  for (int row = 2; row < ROW - 2; ++row)
  {
   if (g_chess_board[row][col] == g_chess_board[row - 2][col] &&
    g_chess_board[row][col] == g_chess_board[row - 1][col] &&
    g_chess_board[row][col] == g_chess_board[row + 1][col] &&
    g_chess_board[row][col] == g_chess_board[row + 2][col] &&
    g_chess_board[row][col] != ' ')
   {
    return g_chess_board[row][col];
   }
  }
 }
 for (int row = 2; row < ROW - 2; ++row)
 {
  for (int col = 2; col < COL - 2; ++col)
  {
   if (row == col&&
    g_chess_board[row][col] == g_chess_board[row - 2][col + 2] &&
    g_chess_board[row][col] == g_chess_board[row - 1][col + 1] &&
    g_chess_board[row][col] == g_chess_board[row + 1][col - 1] &&
    g_chess_board[row][col] == g_chess_board[row + 2][col - 2] &&
    g_chess_board[row][col] != ' ')
   {
    return g_chess_board[row][col];
   }
  }
 }
 for (int row = 2; row < ROW - 2; ++row)
 {
  for (int col = 2; col < COL - 2; ++col)
  {
   if (row==col&&
    g_chess_board[row][col] == g_chess_board[row - 2][col - 2] &&
    g_chess_board[row][col] == g_chess_board[row - 1][col - 1] &&
    g_chess_board[row][col] == g_chess_board[row + 1][col + 1] &&
    g_chess_board[row][col] == g_chess_board[row + 2][col + 2] &&
    g_chess_board[row][col] != ' ')
   {
    return g_chess_board[row][col];
   }
  }
 }
 if (Isfull() == 1)
 {
  return 'p';
 }
 return ' ';
}
void Game()
{
 char winner = '0';
 Init();
 Display();
 //1, 定义二维数组表示棋盘
 //2,初始化数组
 //3,打印棋盘
 //4,请玩家落子
 //5,检查是否结束
 //6,请电脑落子
 //7,检查是否结束
 while (1)
 {
  
  Playermove();//玩家落子用x表示
  Display();
  winner = Checkwinner(winner);
  if (winner != ' ')
  {
   break;
  }
  Computermove();//电脑落子用o表示
  Display();
  winner = Checkwinner(winner);
  if (winner != ' ')
  {
   break;
  }
 }
 if (winner == 'x')
 {
  printf("玩家获胜!\n");
 }
 else if (winner == 'o')
 {
  printf("电脑获胜!\n");
 }
 else if (winner == 'p')
 {
  printf("平局!\n");
 }
}
int main()
{
 srand((unsigned int)time(0));
 int choice = 0;
 while (1)
 {
  choice = Menu(choice);
  if (choice == 1)
  {
   Game();
  }
  else
  {
   printf("Goodbye!\n");
   break;
  }
 }
 system("pause");
 return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43870213/article/details/86634737