C语言实现简单扫雷小游戏

游戏简介:

电脑随机设置10个雷,用户输入坐标,若坐标下是雷则结束游戏,不是则该位置显示周围的雷数。

game.h
#ifndef __GAME_H__
#define __GAME_H__
#include<stdio.h>
//设置屏幕显示的雷盘的大小
#define ROW 9
#define COL 9 //设置实际雷盘的大小(判断雷数是看用户所选的坐标周围八个坐标内是否设雷,但若是用户选择的坐标是位于雷盘四周,则会数组访问越界,所以行和列都要多设两行)
#define ROWS ROW+2
#define COLS COL+2 //设置雷的数量
#define MINE_NUM 10 #include<stdlib.h>
#include<time.h>
//初始化雷盘
void IntiBoard(char board[][ROWS], int row, int col, char set);
//打印雷盘
void Show(char board[][ROWS], int row, int col);
//设置雷的位置
void SetMine(char board[][ROWS], int row, int col);
//找雷
void FindMine(char Mine[][ROWS], char MineInfo[][ROWS], int row, int col);
#endif
test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//游戏菜单打印
void menu()
{ printf("********0.exit********\n");printf("********1.play********\n");printf("**********************\n");
}
//进入游戏
void game()
{char Mine[ROWS][COLS] = { 0 };//后台设置雷的情况IntiBoard(Mine, ROWS, ROWS,'0');//0为未设雷,1为设雷,先置为全0char MineInfo[ROWS][COLS] = { 0 };//用来展示给用户看的雷盘IntiBoard(MineInfo, ROWS, ROWS, '*');//将该雷盘全置为*Show(MineInfo, ROWS, ROWS);//打印雷盘SetMine(Mine, ROW, ROW);//设置雷FindMine(Mine,MineInfo, ROW, ROW);//用户找雷
}int main()
{int input = 0;do{menu();printf("请输入您的选择-->");scanf("%d", &input);switch (input){case 1:printf("游戏开始,玩的开心呦~~~\n");game();//进入游戏break;case 0:printf("游戏退出\n");break;default:printf("请输入正确的操作");break;}} while (input);//循环至少执行一次return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//将雷盘元素重置为char set
void IntiBoard(char board[][ROWS], int row, int col, char set)
{int i = 0;int j = 0;//遍历数组for (i = 0; i < row; i++){for (j = 0; j < col; j++){board[i][j] = set;}}
}void Show(char board[][ROWS], int row, int col)
{int i = 0;int j = 0;printf("-------------------------------\n");for (i = 0; i < row - 1; i++){printf("%d ", i);}printf("\n");//遍历数组,打印for (i = 1; i < row - 1; i++){printf("%d ", i);for (j = 1; j < col - 1; j++){printf("%c ", board[i][j]);}printf("\n");}printf("-------------------------------\n");
}void SetMine(char board[][ROWS], int row, int col)
{int x;int y;int count = 0;//系统随机设置10个范围在1~9的x,y值,即随机找十个雷的坐标srand((unsigned)time(NULL));for (int i = 0; i < MINE_NUM; i++){x = rand() % row +1;y = rand() % row +1;board[x][y] = '1';count++;}
}
//字符'1' - 字符'0' = 数字1,坐标值都为字符,所以要转化为数字要加字符‘0’
int MineCount(char Mine[][ROWS], int x, int y)
{return (Mine[x - 1][y - 1] + Mine[x - 1][y] + Mine[x - 1][y + 1] + Mine[x][y - 1] + Mine[x][y + 1] + Mine[x + 1][y - 1] + Mine[x + 1][y] + Mine[x + 1][y + 1])-(8*'0');
}
//找雷
void FindMine(char Mine[][ROWS], char MineInfo[][ROWS], int row, int col)
{int x = 0;int y = 0;int count = MINE_NUM;//用来控制循环int countmine = 0;//循环当中踩到雷退出循环,游戏结束,未踩到雷count--,直至雷全找完,此时游戏胜利while (count != 0){printf("请输入坐标:");scanf("%d%d", &x, &y);//判断用户输入是否合法,不合法重新输入坐标,合法则判断当前坐标下是否有雷,有雷游戏结束,没雷count--,游戏继续if (x > 0 && x <= row && y > 0 && y <= col){if (Mine[x][y] == '1'){printf("Boom!你被炸了!\n");Show(Mine, ROWS, ROWS);break;}else{countmine = MineCount(Mine, x, y);MineInfo[x][y] = countmine + '0';Show(MineInfo, ROWS, ROWS);count--;}}else{printf("坐标不合法,请重新输入");}

易错点

  • 该雷盘打印时是%c打印,后期检查雷的个数时应返回整型,所以中间转换需要知道:‘某数字’-字符’0’=该数字的整型
  • 数组越界怎么办 由于要统计当前所选坐标周围的雷数,要考虑当用户将坐标选在数组边缘或四个角的位置该如何统计,此时需要给数组上下左右各扩充一行,设置初值时设为0,打印时只打印中间部分,(如11*11的数组只打印1~9列/行,第0行/列和第10列/行充当安全区域),这样在统计雷时数组便不会越界。

二维数组应用——扫雷相关推荐

  1. java二维数组扫雷,C语言二维数组实现扫雷游戏

    #include //使用二维数组实现 扫雷 int main() { char ui[8][8]={ '+','+','+','+','+','+','+','+', '+','+','+','+' ...

  2. 07二维数组生成扫雷游戏地图

    运用二维数组生成扫雷游戏地图     要求:a,定义10*10的数组,把所有元素初始化为0               b,随机生成10个雷,不能重复(一定要有10个) -1表示雷          ...

  3. 二维数组应用——扫雷进阶版

    C语言实现进阶版扫雷小游戏 游戏简介: 电脑随机设置10个雷,用户输入坐标,若坐标下是雷则结束游戏,不是则该位置显示周围的雷数. 相较于之前优化的点在于: 1>保证第一次不被炸死(功能实现见Sa ...

  4. 二维数组实战项目--------《扫雷游戏》

    接上期介绍的三子棋游戏,今天给大家介绍与其相似的扫雷游戏!(源码在文章末尾) 一  . 游戏开发框架 建立游戏菜单 建立扫雷的棋盘 初始化棋盘 布置雷 排雷(判断是否踩雷) 游戏结束 二 . 游戏开发 ...

  5. Java IDEA Debug进制二维数组

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  6. Python数据挖掘1:创建一位数组和二维数组,取最大最小值,切片

    ''' 来源:天善智能韦玮老师课堂笔记 1.numpy 可以高效处理数据.提供数组支持.很多模块都依赖他,比如pandas.scipy.matplotlib都依赖他,所以这个模块是基础. 2.pand ...

  7. Numpy 生成 Bool型数组、一维转多维数组reshape、多维转一维数组、替换数组元素、提取数组元素、数组交集、差集、过滤数组元素、二维数组反转行、交换数组维度

    1. 创建一个 [3,5] 所有元素为 True 的数组 In [162]: b = np.ones((3,5), dtype=bool)In [163]: b Out[163]: array([[ ...

  8. Numpy 一维、二维数组、size/dtype/shape属性、数组函数arange/linspace/logspace /diag/zeros/ones/random 、多维数组索引和筛选)

    参考: https://gitbook.cn/gitchat/column/undefined/topic/5e3bceadec8d9033cf924665 打开 IPython ,创建 Python ...

  9. C++二维数组名与数组指针的思考

    二维数组名和数组指针可以当做一个东西用,但两者之间的含义是不同的. 二维数组名是一个指向数组中所有元素的指针,而数组指针是一个行指针.体现在sizeof()上的不同. #include <ios ...

最新文章

  1. C++简单使用Jsoncpp来读取写入json文件
  2. 计算机专业西电和大工怎么选,放弃985大连理工,选择211西安电子科大,其实很多人都错了...
  3. 重磅!第二轮“双一流”名单来了,有你的学校吗?
  4. mysql中创建时间和更新时间的区别
  5. python 图片上传到minio时,在minio不是显示图片格式
  6. linux 添加banner,OpenWrt:Linux下生成banner
  7. 一行代码开启 Winform 中的 ListView 和 DataGridView 双缓冲功能
  8. 与AI人才有关的讨论
  9. 微课|中学生可以这样学Python(例11.1):tkinter电子时钟程序(2)
  10. 一种快速部署开发用oracle的办法
  11. 华为怎么查看手机温度_如果你的华为手机拿去维修,记得打开这个功能,防止秘密被查看...
  12. CSS背景图像的简单响应
  13. phpwind不支持php7,phpwind8.7 phpwind v8.7 新功能曝光
  14. 段落分页与换行、让段落不在二页上
  15. 马克思主义原理复习资料笔记
  16. 任何进行推理的系统都必须具有一些基本的智能
  17. 计算机视觉 OpenCV【六:应用之颜色检测】
  18. 数字助手:Siri、Google和Alexa之间的PK
  19. mysql获取数据库账号密码报错errorCode 1045, state 28000——常见5种解决办法
  20. Unity DOTS 一文开启ECS大门

热门文章

  1. php对接AliGenie天猫精灵服务器控制智能硬件esp8266② 全面认识第三方授权机制 oauth2.0 协议,如何在 php 上搭建 oauth2.0服务端!(附带demo)
  2. info1110辅导quiz1
  3. 饥荒联机云服务器_WeGame饥荒联机版专用服务器多层世界搭建教程
  4. 华为从服务器获取安装包信息失败,华为系统恢复获取安装包信息失败
  5. opencart修改后台文件夹名
  6. 评价标签类似淘宝评价效果功能实现
  7. php 源生 命令行执行
  8. 杭州卫星地图 百度卫星地图(含道路、标签信息叠加)
  9. 大厂实习-字节跳动实习滴滴实习日记
  10. 跟着BOY学习开发cocos2d-x 游戏 实战篇(4)之 游戏主界面 -----怪物系统---赌徒来袭