目录

一、游戏规则:

二、运行逻辑:

三、基本步骤:

1、显示菜单界面:

2、设计两个数组存放信息:

3、初始化棋盘:

4、布置雷:

5、打印棋盘:

6、排雷并判断雷是否排查完:

四、总代码:

1、game.h:

2、game.c:

3、test.c:


一、游戏规则:

扫雷游戏是根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即失败。

二、运行逻辑:

1、创建和打印游戏菜单。

2、创建两个棋盘数组,一个是布置雷的棋盘数组,一个是排查雷的棋盘数组。

3、初始化两个棋盘,把布置雷的棋盘全部初始为' 0 ' ,把排查雷的棋盘全部初始化为' * ' 。

4、打印棋盘。

5、布置雷,雷的个数可以在头文件中通过宏定义设置。

6、排查雷,在布置雷的数组里排查,如果是雷则打印被炸死,并退出游戏。如果不是雷,则统计雷的个数,是0则展开空白,不是0则将雷的个数传给排查雷的那个数组。

7、判断输赢,如果空格的总的个数于行和列的乘积减去布雷的个数,则表示排雷成功。

三、基本步骤:

1、显示菜单界面:

void menu()
{printf("************ 1. play **********\n");printf("************ 0. exit **********\n");
}

2、设计两个数组存放信息:

 char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };

3、初始化棋盘:

void init_board(char board[ROWS][COLS], int rows, int cols, char set)
{for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){board[i][j] = set;}}
}

4、布置雷:

void set_mine(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、打印棋盘:

void display_board(char board[ROWS][COLS], int row, int col)
{//列号for (int j = 0; j <= col; j++){printf("%d ", j);}printf("\n");for (int i = 1; i <= row; i++){printf("%d ", i);for (int j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}

6、排雷并判断雷是否排查完:

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 find_mine(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 (show[x][y] == '*'){if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");display_board(mine, ROW, COL);break;}else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';display_board(show, ROW, COL);win++;}}else{printf("该坐标已经被排查过了\n");}}else{printf("该坐标已经被排查过了\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");display_board(mine, ROW, COL);}
}

四、总代码:

使用多文件实现,一个头文件game.h,两个源文件game.c和test.c。

1、game.h:

#pragma once#define _CRT_SECURE_NO_WARNINGS 1#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 30//初始化棋盘
void init_board(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘
void display_board(char board[ROWS][COLS], int row, int col);//布置雷
void set_mine(char mine[ROWS][COLS], int row, int col);//排查雷
void find_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

2、game.c:

#include"game.h"//初始化棋盘
void init_board(char board[ROWS][COLS], int rows, int cols, char set)
{for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘
void display_board(char board[ROWS][COLS], int row, int col)
{//列号for (int j = 0; j <= col; j++){printf("%d ", j);}printf("\n");for (int i = 1; i <= row; i++){printf("%d ", i);for (int j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}//布置雷
void set_mine(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--;}}
}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 find_mine(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 (show[x][y] == '*'){if (mine[x][y] == '1'){printf("很遗憾,你被炸死了\n");display_board(mine, ROW, COL);break;}else{int count = get_mine_count(mine, x, y);show[x][y] = count + '0';display_board(show, ROW, COL);win++;}}else{printf("该坐标已经被排查过了\n");}}else{printf("该坐标已经被排查过了\n");}}if (win == row * col - EASY_COUNT){printf("恭喜你,排雷成功\n");display_board(mine, ROW, COL);}
}

3、test.c:

#include"game.h"void menu()
{printf("************ 1. play **********\n");printf("************ 0. exit **********\n");
}void game()
{//设计2个数组存放信息char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };//初始化棋盘//mine初始化为全‘0’//show初始化为全‘*’init_board(mine, ROWS, COLS, '0');init_board(show, ROWS, COLS, '*');//布置雷set_mine(mine, ROW, COL);//排雷display_board(show, ROW, COL);find_mine(mine, show, ROW, COL);
}int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("请选择:\n");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误,重新选择\n");break;}} while (input);return 0;
}

C语言题目——扫雷小游戏相关推荐

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

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

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

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

  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. C#/Net代码精简优化技巧
  2. The bag-of-words model
  3. 零基础是学java还是python-老男孩零基础学习|python和java那个更有发展前景?
  4. 14条Yahoo(雅虎)十四条优化原则【转】
  5. 完美解决Centos不能ping百度的问题
  6. 数据库:为什么阿里巴巴禁止使用存储过程?
  7. Python实现RFM模型
  8. centos7安装tomcat9过程
  9. 口碑营销遇见互联网,企业如何做好网络口碑营销?
  10. 水哥 liunx之旅之输入法
  11. CTFSHOW-WEB详解
  12. lisp 画伯努利双纽线_伯努利双纽线的应用有哪些?
  13. log4rs日志库简析
  14. iOS12 Xcode10正式版问题汇总以及新特性(持续更新中....)
  15. word 插入mathtype公式对象后,默认环绕方式是浮于文字上方,每次插入后都得手动改成嵌入,如何解决?
  16. error pulling image configuration:XXX net/http: TLS handshake timeout
  17. 递归函数——上台阶问题
  18. 数字技术使智能视频监控超越传统模拟系统
  19. 【Discuz】如何实现自动注册登录
  20. IIC 总线协议(Verilog)

热门文章

  1. 设计神经网络的基本原则,神经网络设计原则包括
  2. 使用DirectX打造游戏GUI界面(一)
  3. Flutter开发--------点击图片放大
  4. 【TARS】TarsWeb 说明
  5. js中ajax刷新页面,django+js+ajax实现刷新页面的方法
  6. 5种常见PHP实现URL地址跳转代码
  7. 在服务器中如何获取项目名,成都汇智动力-java获得项目路径
  8. 算法精解一(C语言版)
  9. C++教程网编程视频
  10. runtime vc11 ds simulia suite