三子棋小游戏及如何让朋友也能玩自己写的游戏(程序)(exe如何附带动态链接库dll)C语言从入门到入土(入门特别篇)(二)

简介: 一:三子棋 1.游戏的基本开始流程() 2.三子棋的实现 2.1第一步写出基本流程 2.2第二步打印菜单 2.3游戏的实现 2.3.1初始化棋盘 2.3.2打印棋盘 2.3.3玩家下棋 2.3.4电脑下棋 2.3.5判断 2.4游戏的整个代码 game.c: 2.5三子棋的扩展 二:vs如何发布exe文件并附带动态链接库 第一步:vs->工具->命令行->开发者 PowerShell(P) 第二步:查看vs 是Debug还是Releas 是x86还是x64 第三步:找到exe所在位置 第四步:查询你exe文件所需要的的动态链接库(dll)

2.3.1初始化棋盘


47.png


由图我们发现格式是 空格%c空格|  的形式,我们先把棋盘的元素都赋值为空格:


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] = ' ';
    }
  }
}

2.3.2打印棋盘

还是先分析

48.png

但是我们发现如果直接打印三部分对于后续的改变代码适应性就很差


49.png

这两条红色的应该是上面连着下面的,但是怕大家看不清楚就画出了第二行的

但这也是三部分这两条,只是说最右边少了" |" 所以我们用了if哈

对于上述代码我们就可以发现有很强的适应性,我们可以用row和col来控制打印的多少,

如下:

game.c:

void DisplayBoard(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++)
    {
      printf(" %c ", Board[i][j]);
      if(j<COL-1)
      printf("|");
    }
    printf("\n");
    //打印列
    for (j = 0; j < COL; j++)
    {
      printf("---");
      if (j < COL-1)
        printf("|");
    }
    printf("\n");
  }
}

2.3.3玩家下棋

game.c:

void Player_move(char Board[ROW][COL], int row, int col)
{
  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] == ' ')
      {
        Board[x - 1][y - 1] = '*';
        break;
      }
      else
      {
        printf("输过啦!!!\n");
      }
    }
    else
    {
      printf("输出去啦!!!!\n请重新输入:\n");
    }
  }
}

这里我们用了一个whle循环,只有当玩家真正把数输入进去的时候才能跳出循环,所以在此之前我们要进行判断,并且输入的要是有效值。


2.3.4电脑下棋

game.c:

void Computer_move(char Board[ROW][COL], int row, int col)
{
  while (1)
  {
    int x = rand() % ROW;
    int y = rand() % COL;
    if (Board[x][y] == ' ')
    {
      Board[x][y] = '#';
      break;
    }
  }
}

在这里我们电脑下棋使用的是随机数生成法,是最简单的实现方法,这里值得注意的是


rand()%ROW 生成的数属于0到2。然后还是和上面一样,找到空格就输入。(因为这里生成的数都在0到2所以不可能出现越出棋盘,所以就不需要输入判断),当然我使用rand()函数要再用srand生成随机数种子,然后用时间戳去生成种子即:(unsigned int)srand(time(NULL)),再把这个式子放在:


test.c:


50.png

就可以生成伪随机数而且不重复啦,至于原理目前了解就行,目前不用理解。


2.3.5判断


对于玩家和电脑下棋后我们要对棋盘进行判断输(#)赢(*)或者平局(Q)又或者继续(C)

game.c:

char Is_win(char Board[ROW][COL], int row, int col)
{
  int i = 0;
  //三行
  for (i = 0; i < row; i++)
  {
    if (Board[i][0] == Board[i][1] && Board[i][1] == Board[i][2] && Board[i][1] != ' ')
    {
      return Board[i][1];
    }
  }
  //三列
  for (i = 0; i < col; i++)
  {
    if (Board[0][i] == Board[1][i] && Board[1][i] == Board[2][i] && Board[1][i] != ' ')
    {
      return Board[1][i];
    }
  }
  //对角线的判断
  if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[1][1] != ' ')
  {
    return Board[1][1];
  }
  //判断平局
  if (1 == Is_full(Board, row, col))
  {
    return 'Q';
  }
  //继续
  return 'C';
}

在这里面我们又引用了一个函数Is_full()来进行平局的判断,因为如果棋盘满了的话都还没有赢就是平局了。当然,如果都不是,那就要继续游戏。

game.c:


int Is_full(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++)
    {
      if (board[i][j] == ' ')
      {
        return 0;
      }
    }
  }
  return 1;
}

这里我们发现这个函数是有返回值的(int),因为我们要对其返回值进行接收判断,所以我们还要再定义一个变量去接收(ret)。


51.png

这样游戏全部思路就完成啦!!!

大家可以好好回忆一下!!!

相关文章
|
1月前
|
C语言
扫雷游戏(用C语言实现)
扫雷游戏(用C语言实现)
83 0
|
8天前
|
C语言 Windows
C语言课设项目之2048游戏源码
C语言课设项目之2048游戏源码,可作为课程设计项目参考,代码有详细的注释,另外编译可运行文件也已经打包,windows电脑双击即可运行效果
19 1
|
20天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
ly~
|
1月前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
158 4
|
1月前
|
C语言 C++
【C语言】编写“猜数字“小游戏
【C语言】编写“猜数字“小游戏
|
1月前
|
编译器 C语言
猜数字游戏实现#C语言
猜数字游戏实现#C语言
79 1
|
1月前
|
存储 C语言
揭秘C语言:泊舟的猜数字游戏
揭秘C语言:泊舟的猜数字游戏
|
1月前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现
|
1月前
|
C语言
初学者指南:使用C语言实现简易版扫雷游戏
初学者指南:使用C语言实现简易版扫雷游戏
35 0
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)