三子棋游戏的

产生一个三子棋
在这里插入图片描述
代码如下:
玩家落子

void UsePlay()
{
 while (1)
 {
  printf("请输入一个坐标");
  int row;
  int col;
  scanf("%d %d", &row, &col);
  if (row > ROW -1|| row<0 || col>COL-1 || col < 0 || g_chess_board[row][col] != ' ')
  {
   printf("输入有误,请重新输入\n");
  }
  else
  {
   g_chess_board[row][col] = 'x';
   Print();
   break;
  }
 }
}

电脑落子

void  ComputerPlay()
{
 srand(time(NULL));
 while (1)
 {
  int row = rand() % 3;
  int col = rand() % 3;
  if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
  {
   g_chess_board[row][col] = 'o';
   Print();
   break;
  }
 }
}

玩家胜利//电脑胜利类似

int UseWin()
{
 int row;
 int col;
 for (row = 0; row <ROW; row++)
 {
  if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'x')
   return 1;
 }
 for (col = 0; col <COL; col++)
 {
  if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'x ')
   return 1;
 }
 if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] &&g_chess_board[0][0] == 'x')
 {
  return 1;
 }
 if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'x')
 {
  return 1;
 }
  return 0;
}

和棋

int DrawChess()
{
 int row;
 int col;
 for (row = 0; row < ROW; row++)
 for (col = 0; col < COL; col++)
 {
  if (g_chess_board[row][col] == ' ')
  {
   return 0;
  }
 }
 return 1;
}
 //5.电脑落子,电脑落子用o表示
 //产生两个随机数作为电脑落子的坐标
 //判断电脑产生的坐标,如果该坐标比零小或者比三大或者坐标已被占用,
 //电脑重新产生两个坐标,直到产生的坐标合理
 //如果坐标合理,该坐标被赋值o,出循环
 //打印
void  ComputerPlay()
{
 srand(time(NULL));
 while (1)
 {
  int row = rand() % 3;
  int col = rand() % 3;
  if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
  {
   g_chess_board[row][col] = 'o';
   Print();
   break;
  }
 }
}

完整代码如下

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define ROW 3
#define COL 3
//三子棋
//1.定义一个3*3的全局变量二维数组,
char g_chess_board[ROW][COL];
//打印
void Print()
{
  for (int row = 0; row < ROW; row++)
  {
   printf("%c|%c|%c \n", g_chess_board[row][0], g_chess_board[row][1], g_chess_board[row][2]);
   if (row != 2)
   {
    printf("-|-|-\n");
   }
  }
}
//初始化
void Init()
{
 for (int row = 0; row < ROW; row++)
 for (int col = 0; col < COL; col++)
 {
  g_chess_board[row][col] = ' ';
 }
 Print();
}
//2.玩家落子,玩家的棋用x表示
//提示玩家落子
//判断玩家输入的坐标,如果坐标比三大或者比零小或者坐标位置已被占用,则提示玩家输入错误,
//玩家重新输入坐标,直到输入的坐标合理,
//如果输入的坐标合理,该坐标就被赋值x,跳出循环,
//打印
void UsePlay()
{
 while (1)
 {
  printf("请输入一个坐标");
  int row;
  int col;
  scanf("%d %d", &row, &col);
  if (row > ROW -1|| row<0 || col>COL-1 || col < 0 || g_chess_board[row][col] != ' ')
  {
   printf("输入有误,请重新输入\n");
  }
  else
  {
   g_chess_board[row][col] = 'x';
   Print();
   break;
  }
 }
}
//3.判断玩家是否胜利
//如果有一行或者一列是x,或者对角线所在的位置是x,则玩家胜利,跳出循环
//否则继续执行下一条语句
int UseWin()
{
 int row;
 int col;
 for (row = 0; row <ROW; row++)
 {
  if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'x')
   return 1;
 }
 for (col = 0; col <COL; col++)
 {
  if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'x ')
   return 1;
 }
 if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] &&g_chess_board[0][0] == 'x')
 {
  return 1;
 }
 if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'x')
 {
  return 1;
 }
  return 0;
}
//4.和棋1
//如果棋盘是满的,那么那么最后一个落子的是玩家,所以在判断完玩家赢之前,就应该检查是否是和棋
//如果棋盘已满,则上方打成平局,和棋,跳出循环
int DrawChess()
{
 int row;
 int col;
 for (row = 0; row < ROW; row++)
 for (col = 0; col < COL; col++)
 {
  if (g_chess_board[row][col] == ' ')
  {
   return 0;
  }
 }
 return 1;
}
 //5.电脑落子,电脑落子用o表示
 //产生两个随机数作为电脑落子的坐标
 //判断电脑产生的坐标,如果该坐标比零小或者比三大或者坐标已被占用,
 //电脑重新产生两个坐标,直到产生的坐标合理
 //如果坐标合理,该坐标被赋值o,出循环
 //打印
void  ComputerPlay()
{
 srand(time(NULL));
 while (1)
 {
  int row = rand() % 3;
  int col = rand() % 3;
  if (row < ROW && row >= 0 && col >= 0 && col<COL && g_chess_board[row][col] == ' ')
  {
   g_chess_board[row][col] = 'o';
   Print();
   break;
  }
 }
}
//6.判断电脑是否胜利
//如果有一行或者一列是o,或者对角线所在的位置是o,则玩家胜利,跳出循环
//否则继续执行下一条语句
int ComputerWin()
{
 int row;
 int col;
 for (row = 0; row <ROW; row++)
 {
  if (g_chess_board[row][1] == g_chess_board[row][2] && g_chess_board[row][0] == g_chess_board[row][2] && g_chess_board[row][0] == 'o')
   return 1;
 }
 for (col = 0; col <COL; col++)
 {
  if (g_chess_board[1][col] == g_chess_board[2][col] && g_chess_board[0][col] == g_chess_board[1][col] && g_chess_board[1][col] == 'o ')
   return 1;
 }
 if (g_chess_board[0][0] == g_chess_board[1][1] && g_chess_board[0][0] == g_chess_board[2][2] && g_chess_board[0][0] == 'o')
 {
  return 1;
 }
 if (g_chess_board[0][2] == g_chess_board[1][1] && g_chess_board[0][2] == g_chess_board[2][0] && g_chess_board[0][2] == 'o')
 {
  return 1;
 }
 return 0;
}
int main()
{
 Init();
 while (1)
 {
  UsePlay();
  if (UseWin(g_chess_board))
  {
   printf("玩家胜利\n");
   break;
  }
  if (DrawChess(g_chess_board))
  {
   printf("和棋\n");
   break;
  }
  ComputerPlay();
  if (ComputerWin(g_chess_board))
  {
   printf("电脑胜利\n");
   break;
  }
 }
 system("pause");
 return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43240245/article/details/83280684