欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

【C语言】升级版三子棋小游戏:美化棋盘界面并增加动画演示

最编程 2024-08-15 10:25:21
...

文章目录

  • 游戏效果
  • 代码规划
  • 创建代码
  • 游戏搭建
  • 主函数
  • 游戏game函数
  • 菜单menu函数
  • 初始化棋盘InitBoard函数
  • 打印棋盘DisplayBoard函数
  • 玩家下棋Player函数
  • 电脑下棋Computer函数
  • 判断输赢IsWin函数
  • 完整代码
  • test.c
  • game.c
  • game.h
  • 动画演示

游戏效果

三子棋,顾名思义就是:有一个三行三列的棋盘,然后玩家和电脑各自下棋。

游戏的运行如下:

  • 有一个3 x 3的一个棋盘
  • 玩家下棋用*表示
  • 电脑下棋用#表示
  • 下棋方式就是输入棋盘的坐标

代码规划

因为这是一个小游戏,涉及到游戏的代码比较多,不是几十行就能搞定的,所以我不可能全部写在一个test.c的文件里面去;

这里规划一下代码存放,创建三个文件:

  • test.c:游戏的测试逻辑
  • game.c:游戏的实现逻辑
  • game.h:游戏实现函数的声明

创建代码

这里使用的是VS2019

网络异常,图片无法展示
|

设置一下布局

网络异常,图片无法展示
|

游戏搭建

任何一个项目的实现,最重要的就是逻辑结构搭建,而各个功能的实现就是采取函数(模块化)进行细分;

所以我们需要搭建逻辑,那么逻辑结构是啥呢?

往下看????

主函数

  • 运行游戏的时候,内容显示为:1.开始游戏;0.退出游戏;输入其他数字提示:输入错误,请重新输入!
  • 按1开始游戏
  • 按0退出游戏
int main()
{
  srand((unsigned int)time(NULL));
  int input = 0;
  do
  {
    menu();
    printf("请选择:> ");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏\n");
      break;
    default:
      printf("输入错误,请重新输入\n");
      break;
    }
  } while (input);
  return 0;
}

游戏game函数

前面的逻辑结构已经搭建,而我们需要实现的就是game()函数模块

game()函数实现的功能是什么呢?

  • 首先是数据存储到一个字符的二维数组中,数组的内容应该全部都是空格
  • 使用InitBoard()函数,初始化棋盘;
  • 使用DisplayBoard()函数,打印棋盘(3x3);
  • 玩家和电脑的对战模块,也就是:玩家下棋Player()函数和电脑下棋Compuer()函数;
  • 每一局对战后,都要判断电脑或玩家是否赢,所以需要一个判断输赢的IsWin();函数;
void game()
{
  char board[ROW][COL] = {0};
  InitBoard(board, ROW, COL);//初始化棋盘

  DisplayBoard(board, ROW, COL);//打印棋盘

  int ret = 0;
  while (1)
  {
    Player(board, ROW, COL);//玩家下棋
    ret = IsWin(board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }

    Computer(board, ROW, COL);//电脑下棋
    ret = IsWin(board, ROW, COL);
    if (ret != 'C')
    {
      break;
    }
  }

  if (ret == '*')
  {
    printf("恭喜您取得胜利!!!!!!!!!\n\n");
  }
  else if (ret == '#')
  {
    printf("你也太辣鸡了吧,电脑都下不赢\n");
  }
  else
  {
    printf("哎~~,你的技术不行啊,居然和电脑达成平手\n");
  }
}

菜单menu函数

菜单功能十分简单

代码示例如下:

void menu()
{
  printf("************************\n");
  printf("****EDC's Game World****\n");
  printf("******   1.Play   ******\n");
  printf("******   0.Exit   ******\n");
  printf("************************\n");
}

初始化棋盘InitBoard函数

既然是初始化函数,说明我们的要求就是把二维数组board初始化为全空格

void InitBoard(char board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    for (j = 0; j < col; j++)
    {
      board[i][j] = ' '; //赋予空格
    }
  }
}

打印棋盘DisplayBoard函数

首先我们来设计一个棋盘,如下:

image.png

首先,看这个棋盘,是由带+的四行行,加上带|的四行组成

先来看看一组规则:斜杠+空格+空格+空格

image.png

image.png

image.png

image.png

再来看一组规则:+---+

image.png

image.png

image.png

image.png

最后因为我们下棋落子的地方在中间,也就是我红色标记的地方;

该地方需要用字符来输入,也就是用%c打印

image.png

代码如下:

void DisplayBoard(char board[ROW][COL], int row, int col)
{
  int i = 0;
  int j = 0;
  for (i = 0; i < row; i++)
  {
    printf("+---+---+---+\n");//打印带+号的边界
    for (j = 0; j < col; j++)
    {
      printf("| %c ", board[i][j]);打印+号下面的内容
    }
    printf("|\n");//补上 最右边界
  }
  printf("+---+---+---+\n");//补最下面的+号边界
}

玩家下棋Player函数

玩家下棋采用的是坐标输入的方式;

玩家输入一个坐标,那么棋盘上的相应位置就应该用*表示;

输入坐标时候还要检验该位置是否已经落子了;

void Player(char board[ROW][COL], int row, int col)
{
  printf("请分别输入横纵坐标(输入数字请用空格隔开):> ");
  int x = 0;
  int y = 0;

  while (1)
  {
    scanf("%d %d", &x, &y);
    if (x >= 1 && x <= row && y >= 1 && y <= col)//边界必须合格,且该地方无子
    {
      if (board[x-1][y-1] == ' ')
      {

						

上一篇: 2048源码android 2048小游戏源代码

下一篇: 翻新经典:重温2048小游戏中的成长之旅