C语言:程序打包超详细教程和简单的游戏设计(猜数字和扫雷)

您所在的位置:网站首页 怎么把表格打包发给别人 C语言:程序打包超详细教程和简单的游戏设计(猜数字和扫雷)

C语言:程序打包超详细教程和简单的游戏设计(猜数字和扫雷)

2024-07-10 21:30| 来源: 网络整理| 查看: 265

🚀write in front🚀 🔎大家好,我是翻斗花园牛爷爷★。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🆔本文由 翻斗花园牛爷爷★ 原创 CSDN首发🐒 如需转载还请通知⚠ 📝个人主页:翻斗花园牛爷爷★—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:翻斗花园牛爷爷★的系列专栏——CSDN博客 ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本

目录

程序打包

第一个小游戏:猜数字

思路

实现

第二个小游戏:扫雷

实现流程

准备工作

具体步骤

1.打印主菜单

2.初始化棋盘

3.打印棋盘

4.布置雷

5.排雷

完整代码

程序打包

        很多小伙伴说了,游戏写好了,但是不知道怎么发给别人。因此在学习两个游戏前,先带大家了解一下如何将写好的程序打包成exe文件;

       工具:VS2022

1.首先打开VS2022,打开拓展

2.选择管理拓展,再搜索install;下载箭头所指的包。

 3.然后关闭VS所有的程序,包就会开始自动下载,下载完之后,重新进入VS;按照箭头指向进行。

 4.搜索Setup Project

 5.选择路径,这里我把它放到桌面上了

 6.出现类似这个界面,右键第一个,先添加想要打包的.c文件

 7.再选择项目输出,然后确定

8.回到解决方案资源管理器那里,右键setup,选择重新生成

9.此时回到桌面,打开setup1的文件夹,发现有两个,用Dubug进行调试的,就在Dubug里,反之就在Release里,我的在Release里

 10.发现生成了安装包,打开第一个,进行安装。路径选到了桌面

11.第一个就是你打包的文件了,之后你可以将这些再打包成压缩包发给朋友们

第一个小游戏:猜数字 思路

        1.首先我们可以根据游戏名字知道既然是猜数字,那麽一定是随机的数。因此可以得知用到rand函数,rand生成的是伪随机数,是根据srand设置的一个返回起点返回一个随机值,这个起点也叫随机数种子,rand就是根据随机数种子为基准来计算随机数的,且默认种子为1。srand是随机数发生器的初始化函数;

        2.还要了解一个知识,关于时间戳的认识:从计算机诞生到现在时间的秒数,持续变化,是个随机值。

        3.因为rand要返回一个随机数,而起点默认为srand设置,因为rand是根据随机数种子为基准来计算随机数的,所以为我们想让它生成不同的随机数,就是要让种子也随机。因此可以在srand函数中需要放一个随机数,所以通过时间戳来生成随机数放入srand函数中。这时利用了time函数

        4.当然漫无目的的猜数不是我们的目的,因此我们可以缩小猜数的范围rand()%100+1,把它的范围设立到1-100.如果想生成0-99间的话,就是rand()%100;如果想生成100-200间的话,就是rand()%100+(200-100+1);所以我们如果想要自定义随机数的范围,可以这样写rand()%100+(b-a+1),即为a-b的范围。

实现

1.先编写菜单页面

void menu() //函数调用 { printf("----------------------------------\n"); printf("--------1.game------2.exit--------\n"); //表示两个选择 printf("----------------------------------\n"); }

2.  编写游戏流程

void game() //函数调用 { int num, input; num = rand() % 100 + 1; //限定随机数范围 while (1) //无限循环 { printf("请输入数字\n"); scanf_s("%d", &input); if (num == input) { printf("恭喜,你猜对了\n"); break; } else if (num < input) { printf("你猜大了"); } else { printf("你猜小了"); } } }

3.编写主程序

int main() { int choice; srand((unsigned int)time(NULL)); do //do...while在这里可以让游戏多次玩 { menu(); printf("请输入正确的选项:\n"); scanf_s("%d", &choice); switch (choice) //选择1,进入游戏,0则退出程序,其他数字则显示错误,并重新输入。 { case 1:game(); break; case 0: break; default: printf("错误,请输入正确的数字"); break; } } while (choice); return 0; }

4.完整代码

#include #include #include void game() { int num, input; num = rand() % 100 + 1; while (1) { printf("请输入数字\n"); scanf_s("%d", &input); if (num == input) { printf("恭喜,你猜对了\n"); break; } else if (num < input) { printf("你猜大了"); } else { printf("你猜小了"); } } } void menu() { printf("----------------------------------\n"); printf("--------1.game------2.exit--------\n"); printf("----------------------------------\n"); } int main() { int choice; srand((unsigned int)time(NULL)); do { menu(); printf("请输入正确的选项:\n"); scanf_s("%d", &choice); switch (choice) { case 1:game(); break; case 0: break; default: printf("错误,请输入正确的数字"); break; } } while (choice); return 0; } 第二个小游戏:扫雷

        扫雷这个游戏大家可谓是耳熟能详,当年可是风靡全网;很多小伙伴都好奇它是怎末实现的,今天我就为大家带来初级版的扫雷游戏;

游戏规则

              

          输入一个坐标,如果有雷,那么就会被炸死,游戏失败,重新开始。如果没有雷,则继续,并会在坐标处显示出周围八个格子的雷的数量。根据这个不断排雷,直到所有雷排除,游戏胜利。

 

实现流程

准备工作

        首先,要先创建两个.c文件:game.c和test.c;分别存储游戏实现部分和主函数部分的代码;再创建头文件game.h,用于存放函数声明;

具体步骤

        我们已经知道了扫雷的流程,但是我们应该如何实现它呢???

不要着急,慢慢来;首先我们进入游戏应该有一个主菜单吧;而主菜单如何打印呢,我们在上面猜数字的游戏里其实已经学习过了,它们的框架其实都差不多。

1.打印主菜单

       首先,我们要有进入和退出游戏两个选项吧,我们设立1为进入游戏;0为退出游戏;

void menu() { printf("----------------------------\n"); printf("-----------1.game-----------\n"); printf("-----------2.exit-----------\n"); printf("----------------------------\n"); }

再写出主函数,来进行调用

int main() { int input = 0; srand((unsigned int)time(NULL));//先不要管,后面会讲到,为什莫用它 do { menu(); printf("请选择:"); scanf_s("%d", &input); switch (input) { case 1:game(); break; case 2: printf("退出游戏"); break; default: printf("选择错误,重新选择"); break; } } while (input); return 0; }

这里的do...while可以让我们多次运行游戏;

此时的效果图就是如下

2.初始化棋盘

        对于棋盘的初始化,小伙伴们都很疑惑,该如何创建呢???既然是棋盘,那肯定是方方正正的啊,那么我们首先利用#define设立一下棋盘的行和列,这里我把行称为row,列称为col.

#define ROW 9 #define COL 9 #define ROWS ROW+2 #define COLS COL+2

        大家一定很好奇后面两行是什么意思,我举个例子,如果坐标在最右上角,那麽现在想要知道它周围八个格子类的数量,是不是不可取,这时就发生了数组越界问题;因此我们要为棋盘四周加上一层;左右各一个即列,上下各一个即行是不是行列各加2啊;

        OK,定义完行列后就要开始进行棋盘的初始化了;

char mine[ROWS][COLS]; char show[ROWS][COLS];//定义数组,防止越界 Initboard(mine, ROWS, COLS, '0');//0代表没有雷 Initboard(show, ROWS, COLS, '*');//*代表隐藏排雷区

这里要说一下,0代表没有雷。1则代表所处位置有雷;mine你可以理解为管理者看到的即可以看到地雷的位置,show则是游戏者看到的;不懂不要紧,慢慢往下看,你一定能懂的;

再进行初始化棋盘的函数

void Initboard(char board[ROWS][COLS], int rows, int cols,char set) { int i = 0; for (i = 0; i < rows; i++) { int j = 0; for (j = 0; j < cols; j++) { board[i][j] = set;//set表示接收定义的符号,好处是方便改变符号; } } }

然后要在game.h中进行声明,就是把上面那句话给复制过去;

大家一定也疑惑一个地方,为什么有的大写,有的小写呢;那是因为大写的是宏,而小写则是传参;小伙伴们,你们理解了吗!!!

//初始化棋盘 void Initboard(char board[ROWS][COLS], int rows, int cols, char set);//记得加上分号哦

好的,现在棋盘已经初始化完了,我们可以开始打印棋盘了;

3.打印棋盘

        这时我们就要在主函数的game()模块创建一个新函数了;我把它叫做Displayboard。接受三个参数show、ROW和COL;用于展示布局;

Displayboard(show, ROW, COL);

        那么,开始正式的编写打印棋盘的代码,回到game.c中,因为这里是对棋盘的打印,所以行和列为row和col。

void Displayboard(char board[ROWS][COLS], int row, int col) { int i = 0; for (i = 0; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3