三子棋 (C语言)【超详解】

简介: 三子棋 (C语言)【超详解】

项目的创建:

test.c:用于代码的测试;

game.h:用于宏定义,头文件,和函数声明;

game.c:用于函数功能的实现;

(1)菜单的实现:

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
  printf("***************************************\n");
  printf("*********1.PLAY      0.EXIT   *********\n");
  printf("***************************************\n");
  printf("***************************************\n");
}
int main()
{
  int input = 0;
  do
  {
    menu();
    srand((unsigned int)time(NULL));
    printf("请选择:>");
    scanf_s("%d", &input);
    switch (input)
    {
      case 1:
        game();
        break;
      case 0:
        printf("游戏退出!");
        break;
      default:
        printf("输入错误,请重新输入!");
        break;
    }
  } while (input);
  return 0;
}

使用do - while switch语句实现一个简单的菜单显示;

效果如下:


(2)game函数的实现:

1.棋盘的打印:

代码:

//打印棋盘
void display(char arr[ROW][COL], int row, int col)
{
  for (int i = 0; i < row; i++)
  {
    for (int j = 0; j < col; j++)
    {
      printf(" %c ", arr[i][j]);
      if (j < col - 1)
        printf("|");
    }
    printf("\n");
    if (i < row - 1)
    {
      for (int j = 0; j < col; j++)
      {
        printf("---");
        if (j < col - 1)
          printf("|");
      }
      printf("\n");
    }
  }
}

运行效果:

2.玩家下棋:

代码:

首先判定x y的合法性,和坐标是否有被落子,如果均符合要求 ,玩家就落子,否则重新输入坐标。      

//玩家下棋
void player(char arr[ROW][COL])
{
  int x = 0, y = 0;
  while (1)
  {
    printf("输入坐标:>");
    scanf_s("%d %d", &x, &y);
    if (x <= ROW && y <= COL && x > 0 && y > 0  && arr[x - 1][y - 1] == ' ')
    {
      arr[x - 1][y - 1] = '*';
      break;
    }
    else 
    {
      printf("输入错误,请重新输入:\n");
    }
  }
}

运行效果:

3.电脑下棋

代码:

使用随机数生成函数生成电脑的即将要落子的坐标;

//电脑下棋
void computer(char arr[ROW][COL])
{
  while (1)
  {
    int x = rand() % 3;
    int y = rand() % 3;
    if (arr[x][y] == ' ' && arr[x][y] != '*')
    {
      arr[x][y] = '#';
      break;
    }
  }
}

运行效果:

4.判断胜负:

代码:

其中要对每一行,每一列,斜线进行判断,是玩家赢还是电脑赢,如果棋子落满都没有分出胜负就判断为平局;

//判断输赢
int dgame(char arr[ROW][COL])//和局
{
  for (int i = 0; i < ROW; i++)
  {
    for (int j = 0; j < COL; j++)
    {
      if (arr[i][j] == ' ')
        return 0;
    }
  }
  return 1;
}
int judge(char arr[ROW][COL])
{
  //判断行
  for (int i = 0; i < ROW; i++)
  {
    if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '*')
    {
      printf("玩家赢!\n");
      return 1;
      break;
    }
    if (arr[i][0] == arr[i][1] && arr[i][1] == arr[i][2] && arr[i][0] == '#')
    {
      printf("电脑赢!\n");
      return 1;
      break;
    }
  }
  //判断列
   for (int i = 0; i < COL; i++)
  {
    if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '*')
    {
      printf("玩家赢!\n");
      return 1;
      break;
    }
    if (arr[0][i] == arr[1][i] && arr[1][i] == arr[2][i] && arr[0][i] == '#')
    {
      printf("电脑赢!\n");
      return 1;
      break;
    }
  }
  //判断斜线
   if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2])
   {
     if (arr[1][1] == '#')
     {
       printf("电脑赢!\n");
       return 1;
     }
     else if (arr[1][1] == '*')
     {
       printf("玩家赢!\n");
       return 1;
     }
   }
   else if (arr[0][2] == arr[1][1] && arr[1][1] == arr[2][0])
   {
     if (arr[1][1] == '#')
     {
       printf("电脑赢!\n");
       return 1;
     }
     else if (arr[1][1] == '*')
     {
       printf("玩家赢!\n");
       return 1;
     }
   }
   else if (1 == dgame(arr))
   {
     printf("和局 \n");
     return 1;
   }
   return 0;
}

运行效果:

电脑赢:

玩家赢:


以上就是三子棋的基本实现了,如果帮到你请你带那个赞吧👍

相关文章
|
8月前
|
C语言
用c语言实现三子棋
用c语言实现三子棋
38 0
|
C语言
c语言实现简易三子棋
c语言实现简易三子棋
47 0
|
6月前
|
存储 编译器 C语言
【C语言】三子棋及多子棋
C语言实现三子棋及多子棋
37 2
【C语言】三子棋及多子棋
|
8月前
|
存储 C语言
C语言实现三子棋
C语言实现三子棋
38 0
|
C语言
c语言三子棋
c语言三子棋
54 0
|
8月前
|
C语言
C语言:三子棋的实现。
C语言:三子棋的实现。
37 0
|
C语言
三子棋(C语言)
1.代码结果演示 2.三子棋实现 2.1游戏思路 2.2分步实现 2.2.1分别创建头文件game.h、源文件game.c和test.c 2.2.2创建菜单并实现选择是否玩游戏 2.2.3创建棋盘并完成初始化 2.2.4打印棋盘 2.2.5玩家下棋 2.2.6电脑下棋 2.2.7判断输赢 3.完整代码 game.h game.c test.c
59 0
|
8月前
|
C语言
三子棋的实现(c语言)
三子棋的实现(c语言)
|
8月前
|
C语言
三子棋c语言讲解
三子棋c语言讲解
|
C语言
c语言实现三子棋!
c语言实现三子棋!
37 0