三子棋小游戏及如何让朋友也能玩自己写的游戏(程序)(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

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

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

相关文章
|
2月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
68 1
|
2月前
|
NoSQL 编译器 程序员
【C语言】揭秘GCC:从平凡到卓越的编译艺术,一场代码与效率的激情碰撞,探索那些不为人知的秘密武器,让你的程序瞬间提速百倍!
【8月更文挑战第20天】GCC,GNU Compiler Collection,是GNU项目中的开源编译器集合,支持C、C++等多种语言。作为C语言程序员的重要工具,GCC具备跨平台性、高度可配置性及丰富的优化选项等特点。通过简单示例,如编译“Hello, GCC!”程序 (`gcc -o hello hello.c`),展示了GCC的基础用法及不同优化级别(`-O0`, `-O1`, `-O3`)对性能的影响。GCC还支持生成调试信息(`-g`),便于使用GDB等工具进行调试。尽管有如Microsoft Visual C++、Clang等竞品,GCC仍因其灵活性和强大的功能被广泛采用。
95 1
|
2月前
|
编译器 C语言 计算机视觉
C语言实现的图像处理程序
C语言实现的图像处理程序
78 0
|
13天前
|
定位技术 API C语言
C语言——实现贪吃蛇小游戏
本文介绍了一个基于Windows控制台的贪吃蛇游戏的实现方法。首先,需调整控制台界面以便更好地显示游戏。接着,文章详细描述了如何使用Win32 API函数如`COORD`、`GetStdHandle`、`GetConsoleCursorInfo`等来控制控制台的光标和窗口属性。此外,还介绍了如何利用`GetAsyncKeyState`函数实现键盘监听功能。文中还涉及了`&lt;locale.h&gt;`库的使用,以支持本地化字符显示。
31 1
C语言——实现贪吃蛇小游戏
|
13天前
|
存储 安全 算法
C 语言——实现扫雷小游戏
本文介绍了使用二维数组创建棋盘并实现扫雷游戏的方法。首先,通过初始化数组创建一个9x9的棋盘,并添加行列标识以便操作。接着,利用随机数在棋盘上布置雷。最后,通过判断玩家输入的坐标来实现扫雷功能,包括显示雷的数量和处理游戏胜利或失败的情况。文中提供了完整的代码实现。
35 1
C 语言——实现扫雷小游戏
|
28天前
|
存储 编译器 程序员
C语言程序的基本结构
C语言程序的基本结构包括:1)预处理指令,如 `#include` 和 `#define`;2)主函数 `main()`,程序从这里开始执行;3)函数声明与定义,执行特定任务的代码块;4)变量声明与初始化,用于存储数据;5)语句和表达式,构成程序基本执行单位;6)注释,解释代码功能。示例代码展示了这些组成部分的应用。
41 10
|
2月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
2月前
|
算法 编译器 C语言
【C语言篇】猜数字游戏(赋源码)
rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的⼤⼩是依赖编译器上实现的,但是⼤部分编译器上是32767。
|
2月前
|
C语言
C语言中的math库概述
C语言中的math库概述
|
2月前
|
自然语言处理 编译器 C语言
C语言程序的编译
C语言程序的编译
46 2
下一篇
无影云桌面