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语言实现扫雷小游戏(具体步骤+具体说明)相关推荐

  1. 只用c语言不用图片的游戏,使用C语言实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 游戏规则 在一个9*9的地图上一共有十个雷,翻开所有不是雷的位置 游戏即为胜利, 如果踩到雷,游戏结束 设计思路 1.创建 ...

  2. c语言字符游动程序,C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...

  3. 【C语言】扫雷小游戏详解

    [C语言]扫雷小游戏详解 前言: 还记得大明湖畔的夏雨荷,电脑课上的扫雷吗? ---------------------------是 他 吗--------------------------- 没 ...

  4. C语言实现扫雷小游戏 纯小白 非黑窗口

    C语言实现一个普通的扫雷小游戏 纯小白所编(含代码非黑窗口!) 扫雷 主要功能 1.创建一个图形界面 2.了解扫雷游戏的原理 3.随机生成雷的位置 4.为整个数组加密,并在雷周围的位置加一 5.导入图 ...

  5. 用c语言实现扫雷小游戏。

    相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习. 我用的是vs敲的这个代码,大家可以用vs运行(可能有 ...

  6. C语言实现扫雷小游戏(排雷时可展开)

    游戏介绍 扫雷想必大家都听说过吧?我们今天写的小游戏就是扫雷,只不过我们只使用C语言写.我们能够做到的就是实现扫雷的基本逻辑,没有图形化界面. 源代码 这次游戏程序的写法和上一次的三子棋的模式很像,也 ...

  7. 用C语言实现扫雷小游戏(附上思路+项目展示+源代码)

    文章目录 前言 一.扫雷小游戏整体思路讲解. 二.game.c各游戏功能函数的讲解 1.InitBoard 初始化数组函数讲解 2.DisplayBoard 打印格子函数讲解 3.Setmine 电脑 ...

  8. C语言编写扫雷小游戏

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/104992377 扫 ...

  9. C语言实现扫雷小游戏(下)(用递归实现了展开)

      穷且益坚,不坠青云之志.   上篇博客实现了鸡肋的扫雷小游戏,不能实现雷盘(场)的展开,体验不是很好,这篇博客对其进行优化了,实现了展开功能. 文章目录 一.新的头文件 二.游戏框架 三.功能函数 ...

最新文章

  1. Eclipse Memory Analyzer 安装(Update Site: http://download.eclipse.org/mat/1.3.1/update-site/ )
  2. ios怎么创建html文件夹,ios 创建html文件
  3. introduction of servlet filter
  4. jQuery Mobile中头部栏header的data-*选项
  5. 牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。 但是牛牛记得老师告诉过他x和y均不大于n, 并且x除以y的余数大于等于k。 牛牛希望你能帮他计算一共有,,,
  6. 【SSL】2021-08-17 1285.砍伐树木
  7. NLP论文阅读1--More Data, More Relations, More Context and More Openness: A Review and Outlook for Relati
  8. Ambiguous mapping. Cannot map ‘xxxController‘ method
  9. windows的映射驱动器
  10. AR 和 VR 的开源平台
  11. 360隐私保护器直指腾讯QQ 360真的发飙了,百度旁观!
  12. 抖音上超火系列的透明头像是怎么弄的?操作原来如此简单
  13. 计算机桌面有边框阴影,为什么电脑上的所有显示都会有阴影呢?(桌面图标、对话框等)...
  14. 浏览器访问服务器的流程
  15. JS 获取第一个和最后一个,子节点、子元素
  16. word转pdf出现空白页解决
  17. nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 异常
  18. 有关前端的一些问题(一)
  19. 计算机图形学:二维图形的几何变换(算法原理及代码实现)
  20. 利用matlab从TXT中读数据1

热门文章

  1. 抗肿瘤靶向药物丨小分子化合物 or 单克隆抗体?- MedChemExpress
  2. GKB字符集转UTF-8
  3. 信息系统安全导论第六章之软件安全
  4. Eolink如何解决API测试痛点
  5. 网络状态码含义,常用(204,304, 404, 504,502)
  6. date类、calendar类与dateformat类
  7. 修改so文件的关键方法
  8. 基于AForge的C#摄像头视频录制
  9. Python调用百度AI,实现音频转换文字(标准版)
  10. 老大让我优化数据库,我上来就分库分表,他过来就是一jio