C语言实现扫雷小游戏(具体步骤+具体说明)
C语言实现扫雷目录
- 一、游戏介绍
- 三、具体步骤
- 1、菜单页面
- 2、初始化雷盘
- 3、打印雷盘
- 4、布置雷
- 5、排查雷
- 7、统计所选位置周围八个位置中雷的个数
- 四、完整代码
- 1、test.c—扫雷游戏的测试
- 2、game.c—游戏的函数的实现
- 3、game.h—游戏的函数的声明
一、游戏介绍
游戏规则:玩家需要尽快找出雷区中的所有不是地雷的方块,而不许踩到地雷。(如上图)
实现的功能
1、初始化雷盘
2、打印雷盘
3、随机布置雷
4、玩家开始排雷
5、统计所选位置周围八个位置中雷的个数show数组存储排查雷的信息
mine数组存储布置雷的信息
这里我们的雷盘为9行9列,为了实现统计每个位置周围八个区域中雷的个数,在初始化雷盘时构建的二维数组mine数组的行和列比show数组多两行两列。
三、具体步骤
1、菜单页面
- 可以根据自己的爱好设计各种风格的菜单,让自己的游戏更加美观。
2、初始化雷盘
- 构造两个二维数组,mine数组里面是存放雷的,用于实现各种功能。show数组是给玩家操作时看的,看不到雷的具体位置。
//初始化雷盘
//主函数中函数的调用
//Initboard(mine, ROWS, COLS,'0');
//Initboard(show, ROWS, COLS, '*');
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;}}
}
- 初始化雷盘时,mine数组全部初始化为字符‘0’,show数组全部初始化为字符‘*’。
3、打印雷盘
- 玩家需要通过打印出的show数组雷盘进行游戏,打印雷盘时打印行号和列号有利于玩家进行操作
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");}printf("---------扫雷游戏-----------\n");
}
4、布置雷
- 在show数组,字符‘0’表示无雷区域,字符‘1’表示有雷区域,由于开始的时候已经将show数组全部初始化为字符‘0’了,故只需使用srand和rand函数生成随机数,使得雷的分布为随机位置。
void SetMine(char mine[ROWS][COLS], int row, int col)
{//布置10个雷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--;}}
}
5、排查雷
- 玩家根据打印出的show数组雷盘开始排雷,选择自己认为不是雷的区域
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{//1. 输入排查的坐标//2. 检查坐标处是不是雷// (1) 是雷 - 很遗憾炸死了 - 游戏结束// (2) 不是雷 - 统计坐标周围有几个雷 - 存储排查雷的信息到show数组,游戏继续int x = 0;int y = 0;int win = 0;while (win<row*col- EASY_COUNT){printf("请输入要排查的坐标:>");scanf("%d%d", &x, &y);//x--(1,9) 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{//不是雷情况下,统计x,y坐标周围有几个雷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);}
}
7、统计所选位置周围八个位置中雷的个数
- 统计已选位置周围八个位置中含有雷的个数,并在该位置上数字的形式打印出来。
//static
//1. 修饰局部变量
//2. 修饰全局变量
//3. 修饰函数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';
}
四、完整代码
1、test.c—扫雷游戏的测试
#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu()
{printf("******************************\n");printf("**** 欢迎来到扫雷游戏! ****\n");printf("****** 1. 进入游戏 ******\n");printf("****** 0. 退出游戏 ******\n");printf("******************************\n");
}void game()
{char mine[ROWS][COLS] = {0};//存放布置好的雷的信息char show[ROWS][COLS] = {0};//存放排查出的雷的信息//初始化棋盘InitBoard(mine, ROWS, COLS, '0');//'0'InitBoard(show, ROWS, COLS, '*');//'*'//打印一下棋盘DisplayBoard(show, ROW, COL);//布置雷SetMine(mine, ROW, COL);//DisplayBoard(mine, ROW, COL);//排查雷FindMine(mine, show, ROW, COL);
}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;
}
2、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;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");}printf("---------扫雷游戏-----------\n");
}void SetMine(char mine[ROWS][COLS], int row, int col)
{//布置10个雷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--;}}
}//static
//1. 修饰局部变量
//2. 修饰全局变量
//3. 修饰函数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)
{//1. 输入排查的坐标//2. 检查坐标处是不是雷// (1) 是雷 - 很遗憾炸死了 - 游戏结束// (2) 不是雷 - 统计坐标周围有几个雷 - 存储排查雷的信息到show数组,游戏继续int x = 0;int y = 0;int win = 0;while (win<row*col- EASY_COUNT){printf("请输入要排查的坐标:>");scanf("%d%d", &x, &y);//x--(1,9) 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{//不是雷情况下,统计x,y坐标周围有几个雷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);}
}
3、game.h—游戏的函数的声明
#pragma once#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define EASY_COUNT 10#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2//初始化棋盘的
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);
C语言实现扫雷小游戏(具体步骤+具体说明)相关推荐
- 只用c语言不用图片的游戏,使用C语言实现扫雷小游戏
本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 设计思路 1.创建 ...
- c语言字符游动程序,C语言实现扫雷小游戏详解
本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...
- 【C语言】扫雷小游戏详解
[C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...
- C语言实现扫雷小游戏 纯小白 非黑窗口
C语言实现一个普通的扫雷小游戏 纯小白所编(含代码非黑窗口!) 扫雷 主要功能 1.创建一个图形界面 2.了解扫雷游戏的原理 3.随机生成雷的位置 4.为整个数组加密,并在雷周围的位置加一 5.导入图 ...
- 用c语言实现扫雷小游戏。
相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习. 我用的是vs敲的这个代码,大家可以用vs运行(可能有 ...
- C语言实现扫雷小游戏(排雷时可展开)
游戏介绍 扫雷想必大家都听说过吧?我们今天写的小游戏就是扫雷,只不过我们只使用C语言写.我们能够做到的就是实现扫雷的基本逻辑,没有图形化界面. 源代码 这次游戏程序的写法和上一次的三子棋的模式很像,也 ...
- 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)
文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...
- C语言编写扫雷小游戏
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992377 扫 ...
- C语言实现扫雷小游戏(下)(用递归实现了展开)
穷且益坚,不坠青云之志. 上篇博客实现了鸡肋的扫雷小游戏,不能实现雷盘(场)的展开,体验不是很好,这篇博客对其进行优化了,实现了展开功能. 文章目录 一.新的头文件 二.游戏框架 三.功能函数 ...
最新文章
- Eclipse Memory Analyzer 安装(Update Site: http://download.eclipse.org/mat/1.3.1/update-site/ )
- ios怎么创建html文件夹,ios 创建html文件
- introduction of servlet filter
- jQuery Mobile中头部栏header的data-*选项
- 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。 牛牛希望你能帮他计算一共有,,,
- 【SSL】2021-08-17 1285.砍伐树木
- NLP论文阅读1--More Data, More Relations, More Context and More Openness: A Review and Outlook for Relati
- Ambiguous mapping. Cannot map ‘xxxController‘ method
- windows的映射驱动器
- AR 和 VR 的开源平台
- 360隐私保护器直指腾讯QQ 360真的发飙了,百度旁观!
- 抖音上超火系列的透明头像是怎么弄的?操作原来如此简单
- 计算机桌面有边框阴影,为什么电脑上的所有显示都会有阴影呢?(桌面图标、对话框等)...
- 浏览器访问服务器的流程
- JS 获取第一个和最后一个,子节点、子元素
- word转pdf出现空白页解决
- nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 异常
- 有关前端的一些问题(一)
- 计算机图形学:二维图形的几何变换(算法原理及代码实现)
- 利用matlab从TXT中读数据1