本文所结合图书及视频

《C语言程序设计(第四版)谭浩强.pdf》

《C语言入门到精通—鹏哥带你C语言从入门到精通》

《郝斌老师的C语言自学视频》

这些在B站上都能找得到的。

学习目标:

利用前面我们所学到的知识,实现《扫雷》初级小游戏。

学习任务:

一、用所学的C语言知识来编写一个经典的《扫雷》游戏

我们要模拟一个类似的扫雷游戏,首先要将它的逻辑罗列出来,简单点说也就是第一步干什么、第二步干什么。就想我们去超市购物一样,怕忘记买什么东西,最好是先列出要买物品的清单。写扫雷小游戏也是一样,接下来我们一步一步讲解。

首先,我们在自己的编译器新建项目并建立以下文件:

1、game.h头文件   ----  游戏的函数声明

2、game.c源文件   ----  游戏的实现

3、test.c源文件      ----  扫雷游戏的测试

以上文件建立好以后我们在test.c文件中将主函数框架写好,因为游戏不是只玩一局,所以我们利用do......while循环来实现游戏可多次玩的一个效果,同时在do......while循环中将游戏菜单打印出来,代码如下

int main()
{int input = 0;srand((unsigned int)time(NULL));//设定一个随机值,以便于布置雷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;
}

接下来我们把菜单函数也就是menu函数设置好

void menu()
{printf("**********  1.开始游戏  **********\n");printf("**********  0.退出游戏  **********\n");printf("**********************************\n");printf("**********************************\n");
}

再把游戏实现的函数也就是game函数设置好

void game()
{char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');//数组元素初始化为0InitBoard(show, ROWS, COLS, '*');//数组元素初始化为*//打印棋盘//DisplayBoard(mine, ROW, COL);//打印出元素为0的数组DisplayBoard(show, ROW, COL);//打印出元素为*的数组//布置雷SetMine(mine, ROW, COL);//设置好雷的位置和个数//DisplayBoard(mine, ROW, COL);//将设置好的雷的显示下//排查雷FindMine(mine, show, ROW, COL);
}

进入游戏实现的函数内,我们首先要定义两个二维数组,一个存放布置好的雷的信息;另一个用来存放排查出的雷的信息。接着,我们初始化棋盘,然后就是布置雷,然后是排查雷来判断输赢。具体的函数代码我会在game.c文件中一一展示。

有关该游戏的函数声明全都在game.h文件中,代码如下

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10//初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
//打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);
//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col);
//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

进入游戏实现函数game.c中我们将初始化棋盘函数实现

#define _CRT_SECURE_NO_WARNINGS
# include "game.h"void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}

打印棋盘函数实现

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf("----------扫雷游戏----------\n");for (i = 0; i <= col; i++){printf("%d ", i);}printf("\n");//打印列号for (i = 1; i <= row; i++){printf("%d ", i);//打印行号for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}

布置雷函数实现

void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;//设置雷的个数while (count){int x = rand()%row+1;//将坐标设置为1--行数int y = rand()%col+1;//将坐标设置为1--列数if (mine[x][y] == '0'){mine[x][y] = '1';//限制设定雷的坐标范围count--;//雷的个数递减}}
}

排查雷函数实现

static int get_mine_count(char mine[ROWS][COLS], int x, int y)
{return mine[x - 1][y] +mine[x - 1][y - 1] +mine[x][y - 1] +mine[x + 1][y - 1] +mine[x + 1][y] +mine[x + 1][y + 1] +mine[x][y + 1] +mine[x - 1][y + 1] - 8 * '0';
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < row*col-EASY_COUNT){printf("请输入要排除的坐标(中间以空格间隔):>");scanf("%d%d", &x, &y);//x ,y的范围都是1-9//判断坐标的合法性if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y] == '1'){printf("很遗憾,你踩到雷了\n");DisplayBoard(mine, row, col);break;}else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';DisplayBoard(show, row, col);win++;}}else{printf("输入错误,请重新输入\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,扫雷成功\n");DisplayBoard(mine, row, col);}}

好了,到这里我们整个游戏的代码就全部写完了,有兴趣的小伙伴可以试着写写。以上全部代码只是游戏的逻辑代码,游戏界面优化等问题本人能力有限,目前还无法处理。(初级版本,大佬互喷)

本节的内容就到这里了,下期我们一起来实现游戏《五子棋》!

C语言自学之路九(用C语言编写小游戏-扫雷)相关推荐

  1. python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]

    python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...

  2. qml自学笔记------自己写类似于劲舞团的按键小游戏(下)

    接上篇<qml自学笔记------自己写类似于劲舞团的按键小游戏(中)> 第四部分 PauseButton.qml 和 RestartButton.qml 第四部分其实就是两个按键,一个是 ...

  3. 基于C语言Ncurse库和链表的简单贪吃蛇小游戏

    参考:基于C语言Ncurse库和链表的简单贪吃蛇小游戏 作者:三速何时sub20 发布时间:2020-09-29 10:23:51 网址:https://blog.csdn.net/weixin_44 ...

  4. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”

    原标题:用C语言编写小游戏--"井字棋" 作者:Milo Yip 来源:知乎 原文链接:https://zhuanlan.zhihu.com/p/39581573 在 Milo Y ...

  5. qml自学笔记------自己写类似于劲舞团的按键小游戏(中)

    接上篇<qml自学笔记------自己写类似于劲舞团的按键小游戏(上)> 第三部分DisplayPart.qml 代码的其他部分都是渣,就这里花了点时间,整个小游戏就靠这个文件. 首先,屏 ...

  6. C语言自学之路七(函数(重点)详解)

    本文所结合图书及视频 <C语言程序设计(第四版)谭浩强.pdf> <C语言入门到精通-鹏哥带你C语言从入门到精通> <郝斌老师的C语言自学视频> 这些在B站上都能找 ...

  7. 易语言自学视频教程,第一次接触易语言的感受!

    易语言是中国人开发的编程语言平台,使用中文来书写代码,开发程序无需英语基础.它以"易"著称,利用它可以轻松的开发各种桌面应用软件.网络软件.信息管理软件等等. 在n年前,我与大多数 ...

  8. 读书笔记--GO语言精进之路--01熟知GO语言的一切

    文章目录 前言 作者写这本书的目的 作者的解答思路 1. Go语言的诞生 2. Go语言的设计哲学 2.1 追求简单,少即是多 2.2 偏好组合,正交解耦 2.3 原生并发,轻量高效 2.4 面向工程 ...

  9. android游戏编程之从零开始_纯C语言程序员写的编程新手入门基础小游戏之最炫酷推箱子...

    很多编程爱好者都编写过推箱子游戏编程吧,最近有好些朋友看见我以前的推箱子程序后, 问我是怎么做的.我一直想把这个程序的整个过程写一份详细的东西,与各位编程爱好者分享,一直没空.正好现在放假了,而且离回 ...

  10. 用C语言实现电脑小游戏——扫雷

    目录 1.菜单制作 2.游戏的重复进行 3.扫雷游戏的实现:game函数 3.1初始化棋盘 3.2打印棋盘 3.3布置地雷 3.4玩家排雷 4.实现输入一个坐标显示一片信息 5.扫雷原码 众所周知,扫 ...

最新文章

  1. 433M射频遥控灯、震动感应灯、WIFI避障小车
  2. ucla ai_UCLA的可持续性:用户体验案例研究
  3. python token_Python实现JWT(JSON Web Token)认证
  4. Rust : CTP 中异步处理
  5. 洛谷P2257 YY的GCD(莫比乌斯反演)
  6. 家谱计算机,家谱先生(FamilyKeeper)
  7. 新颖的自我介绍_三句有创意的自我介绍 简短有创意的自我介绍
  8. 植物大战僵尸修改关卡及金币
  9. java crm 进销存 websocket即时聊天发图片文字 好友群组 SSM源码
  10. 解决wordcloud导出图片不清楚
  11. 摄像头 UIImagePickerController拍照和视频录制
  12. 开放流程自动化标准测试实验室花开遍地,全球巡礼—上篇
  13. 位运算 位运算应用
  14. 【Matlab】错误使用 classify (line 233) The pooled covariance matrix of TRAINING must be positive definite.
  15. 一文带你看懂算术编码(C语言)
  16. 【通知】关于SRRC认证无线电发射设备型号核准的通知
  17. Python练手小项目(3)提取身份证信息(初级)
  18. 程序员刚写完代码 , 就被开除了,网友笑到抽筋
  19. 【python】分享一个在Windows下对应用程序python窗口后台截图的方法
  20. 第51章 设置FLASH的读写保护及解除—零死角玩转STM32-F429系列

热门文章

  1. 解决ping时出现?的问题
  2. 计算机毕设分词,基于词表的中文分词算法
  3. 织梦mysql安装教程视频教程_dedecms织梦模板安装教程视频/图文步骤(模板秀出品)...
  4. diagrams软件 可替换visio ProcessOn 亿图图示
  5. R语言绘图大小及图例问题
  6. 【转】卡巴斯基2011导入key专用工具+卡巴斯基提取key工具(激活码转换key)
  7. 涂抹oracle源代码,涂抹Oracle:三思笔记之一步一步学ORACLE
  8. MySQL 高级SQL语句
  9. GIMP基本功能和教程!
  10. 父与子编程之旅第六章节easyGUI下载+Python3.7下的安装问题解决