c语言——实现简单扫雷小游戏

  • 游戏设计流程分析
  • 游戏代码实现
    • 打印游戏菜单
    • 雷的生成及排查
  • 附:完整代码

在学习c语言的过程中,如果能试着完成一个简单的小游戏,对初学者来说,会不会感觉小有成就呢?至少在设计、完成这个小游戏的过程中,我们可以发现很多问题并解决它,这也是一种成长。
本文将从经典的扫雷小游戏出发,用c语言设计、实现完成一个简单版本的扫雷游戏。欢迎交流,共同进步。

游戏设计流程分析

设计一个完整的游戏包括建立它的实现流程(算法框架)以及设计一套完整精确的代码。下图给出了扫雷小游戏的一个算法步骤大致流程框图,可以按照这个流程进行设计游戏以及代码实现,在代码实现过程中,再进行各个功能的具体设计与修改。

游戏代码实现

打印游戏菜单

在用户开始点击操作时,需要显示出来一个游戏界面,因此,在这里可以首先建立一个test.c的源文件,源文件内部建立一个显示菜单的菜单函数menu();

void menu()
{printf("************************\n");printf("*** 欢迎来到扫雷游戏 ***\n");printf("*****   1.play     *****\n");printf("*****   0.exit     *****\n");printf("************************\n");
}

test.c中需要完成一个程序入口函数:main(),主函数中一开始就调用test()完成菜单打印:

int main()
{test();return 0;
}
void test()
{int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请输入选项(1 or 0):>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择出错,请重新选择!\n");break;}} while (input);
}

雷的生成及排查

在游戏体验者进行扫雷之前,游戏需要随机生成雷的位置和信息,以及进行雷的排查工作,这里采用二维数组建立存放雷的相关信息,下面是对游戏中实现某些功能的函数的调用流程,即可以按照该流行进行功能函数的设计,在函数game()中进行

void game()
{//雷的信息存储//1.存放布置好的雷的信息char mine[ROWS][COLS] ={ 0 };//'0'-不是雷//2.存放排查出的雷的信息char show[ROWS][COLS] = {0};//'*'-神秘-未排查//初始化mine 和 showInitBoard(mine,ROWS,COLS,'0');InitBoard(show, ROWS, COLS, '*');//打印棋盘//DisplayBoard(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//布置雷SetMine(mine,ROW,COL);DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine,show,ROW,COL);}

建立game.c源文件,在其内部完成功能函数的定义
InitBoard()函数完成对雷信息和需要显示出来的雷的界面信息的初始化

#define _CRT_SECURE_NO_WARNINGS 1
#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;}}
}

DisplayBoard()函数完成显示扫雷结果界面信息的打印输出。

void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;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");}
}

埋雷:在游戏前,需要随机生成雷的左边信息,并对该位置进行埋雷操作。其中’0’表示该位置无雷,'1’表示有雷。

void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = EASY_COUNT;while (count){//随机生成雷的坐标int x = rand() % row + 1;int y = rand() % col + 1;//判断此坐标有没有雷if (mine[x][y]=='0'){mine[x][y] = '1';count--;}}
}

排查雷:FindMine()函数实现雷的排查功能,通过调用GetMineCount()函数计算对应坐标周围雷的个数,并将雷的个数显示出来。

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);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y]=='1'){printf("很遗憾,你被炸死了!\n");DisplayBoard(mine,row,col);break;}else{int count = GetMineCount(mine,x,y);if (count==0){DisplayBoard(show, row, col);}elseshow[x][y] = count + '0';//放入该坐标周围雷的个数system("cls");//打印前清除原本打印信息DisplayBoard(show, row, col);win++;}}else{printf("坐标有误,请重新输入!\n");}}if (win==row*col-EASY_COUNT){printf("恭喜你,排雷成功!\n");}}

游戏的大部分代码都已经在文中给出。
当然,该游戏只是实现了扫雷的一个基本功能,好可以进行很多的优化和改进,欢迎交流,共同进步。

附:完整代码

game.h

#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define EASY_COUNT 10
#include<stdio.h>
#include<stdlib.h>
#include<time.h>//初始化扫雷的棋盘
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 1
#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;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;int y = rand() % col + 1;//判断此坐标有没有雷if (mine[x][y]=='0'){mine[x][y] = '1';count--;}}
}
int GetMineCount(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);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y]=='1'){printf("很遗憾,你被炸死了!\n");DisplayBoard(mine,row,col);break;}else{int count = GetMineCount(mine,x,y);if (count==0){DisplayBoard(show, row, col);}elseshow[x][y] = count + '0';//放入该坐标周围雷的个数system("cls");//打印前清除原本打印信息DisplayBoard(show, row, col);win++;}}else{printf("坐标有误,请重新输入!\n");}}if (win==row*col-EASY_COUNT){printf("恭喜你,排雷成功!\n");}}

test.c

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include "game.h"void menu()
{printf("************************\n");printf("*** 欢迎来到扫雷游戏 ***\n");printf("*****   1.play     *****\n");printf("*****   0.exit     *****\n");printf("************************\n");
}
void game()
{//雷的信息存储//1.存放布置好的雷的信息char mine[ROWS][COLS] ={ 0 };//'0'-不是雷//2.存放排查出的雷的信息char show[ROWS][COLS] = {0};//'*'-神秘-未排查//初始化mine 和 showInitBoard(mine,ROWS,COLS,'0');InitBoard(show, ROWS, COLS, '*');//打印棋盘//DisplayBoard(mine, ROW, COL);//DisplayBoard(show, ROW, COL);//布置雷SetMine(mine,ROW,COL);DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine,show,ROW,COL);}
void test()
{int input = 0;srand((unsigned int)time(NULL));do {menu();printf("请输入选项(1 or 0):>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择出错,请重新选择!\n");break;}} while (input);
}
int main()
{test();return 0;
}

c语言——实现简单扫雷小游戏相关推荐

  1. 当心,前面有地雷——C语言实现简单扫雷小游戏

    ⭐️前面的话⭐️

  2. 使用C语言写一个扫雷小游戏

    前言 相信扫雷游戏小伙伴们肯定都玩过吧,学习了C语言中的数组.函数等基础内容之后就可以自己写一个简易的扫雷小游戏了,今天就我写扫雷小游戏的过程及思路写一篇博客,希望大家看完我的博客能有所收获. 软件及 ...

  3. ChatGPT实现用C语言写一个扫雷小游戏

    前几天我们利用 ChatGPT实现用C语言写一个学生成绩管理系统 其过程用时不到30秒,速度惊人 今天又让ChatGPT用C语言写了一个扫雷小游戏,它的回答是:抱歉,我是AI语言模型,无法编写程序. ...

  4. C语言初阶——扫雷小游戏

    扫雷这款小游戏想必大家都接触到过,但是用C语言写的扫雷你见过吗?其实,学完之前我写的那几篇文章,我们完全可以自己写出来.仅仅200多行代码,我们就可以写出我们自己的扫雷小游戏!赶紧来看看吧!!! 文章 ...

  5. C语言系列(1) --- C语言实现经典扫雷小游戏

    (一)游戏简介 游戏初始界面有两个选择,选项"1"为开始游戏,选项"0"为退出游戏:选择开始游戏之后将会打印出9*9的棋盘,此时系统已经为游戏设置了10个雷,输 ...

  6. c语言编写五子棋小游戏ppt,C语言实现简单五子棋小游戏

    五子棋简单功能实现,供大家参考,具体内容如下 游戏功能演示 代码如下: #include #include #include #include // 棋盘 char board[15][15]; // ...

  7. 用C语言来实现扫雷小游戏

    文章目录 前言 一.扫雷的准备工作 二.扫雷的具体实现过程 1.分析 2.实现过程 2.1 初始化 2.2 布置雷 2.3 排雷 总结 前言 这是我第三次写博客,应该能比前两次写的更成熟一点,写的更好 ...

  8. c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...

    [2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 一.实验目的与要求 (1)了解极大极小算法的原理和使用方法,并 ...

  9. C语言实现简易扫雷小游戏

    扫雷(简易版): 游戏规则:电脑随机生成雷,玩家随机扫一个坐标,如果该坐标是生成雷的位置,则踩到雷.如果没有则显示该坐标附近八个坐标雷的总数,一直循环至所有不是雷的坐标全部扫完 下面图片红色代表雷,黑 ...

  10. JAVA语言课程设计——扫雷小游戏

    1.设计内容 设计一个界面为10*10的扫雷程序,雷的个数不少于10个.功能如Windows系统给定的扫雷游戏. 效果如图:扫雷界面 2.设计要求 界面美观,鼠标的左右键好用.左键:直接显示有几个雷, ...

最新文章

  1. IDEA 新特性:提前知道代码怎么走
  2. 创客更新装备 动态规划
  3. Finding Structure in Time论文解读
  4. 全数字实时仿真平台SkyEye故障注入测试
  5. php如何递归算法,详细的介绍一下PHP递归算法_PHP教程
  6. Triumph X发布著名摄影师Kim Joong-man首个NFT系列
  7. Linux安装Django
  8. 为web站点提供https服务的步骤
  9. 国内手机厂商AR布局报告
  10. 数据包的分类和调度-Linux TC的另一种解释
  11. mtkwin10驱动_Windows系统MTK手动安装驱动教程(Win10通用)
  12. 《通信原理》樊昌信、《移动通信》——知识点总结
  13. 2023计算机毕业设计SSM最新选题之java一起学习吧s77u8
  14. 自定义阿里云OSS图片大小
  15. 基于Javafx制作的随机抽签软件
  16. 专家学者热议智慧交通:大数据云计算,出行有“千里眼”
  17. 迷你考拉仓私人小仓库储物间出租,百米内的智能仓储!
  18. 日化美妆难突围,看爱码物联如何冲破传统营销壁垒
  19. ChatGPT新突破:打造自己的智能机器人控制系统
  20. 手机充电器的简介与质量管理(连载五)

热门文章

  1. SEO网络营销培训机构都是如何给新手SEO培训的,新手SEO看完就知道套路,以后就不会上当受骗
  2. 让传感器数据在三维地图上显示,更直观,更震撼!
  3. sever企业版密钥 sql_SQL Server2016企业版 附全版本key(转载)
  4. 网站建设费用贵和便宜有什么区别?
  5. STM32F103C8T6有128K的Flash
  6. 混沌理论(Chaos Theory)
  7. 9 个 yyds Java项目,可应对各种私活!
  8. CentOS7 开启路由转发
  9. ai无法启动计算机丢MSVCP100,win7系统丢失MSVCP100.dll导致程序无法启动的解决方法...
  10. 数据分析【实践】——教育行业指标体系搭建和生命周期维护