当前位置: 首页 > 编程笔记 >

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

熊哲圣
2023-03-14
本文向大家介绍C语言实现简单扫雷小游戏,包括了C语言实现简单扫雷小游戏的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
#include <time.h>
/*
 用 C 语言写一个简单的扫雷游戏
*/
// 1.写一个游戏菜单 Menu()
// 2.开始游戏
 // 1.初始化二维数组 Init_Interface()
 // 2.打印游戏界面 Print_Interface()
 // 3.玩家掀起指定位置 Play() --> 指定输入坐标(判断合法性)
 // 1.判断该位置是否是雷
 // 2.判断是否掀掉所有空地
 // 3.如果掀开的是空地,则判断该空地周围是否有雷
 // 1.如果周围有雷,则统计周围雷的个数
 // 2.如果周围没有雷,则掀开周围除了雷的所有空地,并且统计所掀开空地周围雷的个数
 // 4.更新地图
 // 5.继续 3 的循环

//定义全局变量:
//定义扫雷地图的长和宽
#define MAX_ROW 9
#define MAX_COL 9
//定义默认的雷数
#define DEFAULT_MINE 9
//定义两个二维数组,分别存放初始地图和雷阵
char show_map[MAX_ROW + 2][MAX_COL + 2];
char mine_map[MAX_ROW + 2][MAX_COL + 2];

//写一个游戏菜单
int Menu() {
 printf("=========\n");
 printf("1.开始游戏\n");
 printf("0.结束游戏\n");
 printf("=========\n");
 printf("请选择游戏菜单选项:");
 int choice = 0;
 while (1) {
 scanf("%d", &choice);
 if (choice != 0 && choice != 1) {
 printf("您的输入有误, 请重新输入\n");
 continue;
 }
 break;
 }
 return choice;
}

//开始游戏
//初始化数组
void Init_Interface() {
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
 show_map[row][col] = '*';
 }
 }
 for (int row = 0; row < MAX_ROW + 2; row++) {
 for (int col = 0; col < MAX_COL + 2; col++) {
 mine_map[row][col] = '0';
 }
 }
 int mine_count = DEFAULT_MINE;
 while (mine_count > 0) {
 int row = rand() % MAX_ROW + 1;
 int col = rand() % MAX_COL + 1;
 if (mine_map[row][col] == '1') { //将雷设置为 1
 //此处已经有雷
 continue;
 }
 mine_count--;
 mine_map[row][col] = '1';
 }
}
//打印初始界面
void Print_Interface(char map[MAX_ROW + 2][MAX_COL + 2]) {
 printf(" ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("%d ", col);
 }
 printf("\n ");
 for (int col = 1; col <= MAX_COL; col++) {
 printf("--");
 }
 printf("\n");
 for (int row = 1; row <= MAX_ROW ; row++) {
 printf("%02d |", row);
 for (int col = 1; col <= MAX_COL; col++) {
 printf("%c ", map[row][col]);
 }
 printf("\n");
 }
}
//写一个统计周围雷数个数的函数
int Around_Mine_count(int row, int col) {
 return (mine_map[row - 1][col - 1] - '0'
 + mine_map[row - 1][col] - '0'
 + mine_map[row - 1][col + 1] - '0'
 + mine_map[row][col - 1] - '0'
 + mine_map[row][col + 1] - '0'
 + mine_map[row + 1][col - 1] - '0'
 + mine_map[row + 1][col] - '0'
 + mine_map[row + 1][col + 1] - '0');
}
//写一个判断该位置周围是否有雷的函数
int No_Mine(int row, int col) {
 if (Around_Mine_count(row, col) == 0) {
 return 1;
 }
 return 0;
}
//写一个掀开该位置周围空地的函数
void Open_Blank(int row, int col) {
 show_map[row - 1][col - 1] = '0' + Around_Mine_count(row - 1, col - 1);
 show_map[row - 1][col] = '0' + Around_Mine_count(row - 1, col);
 show_map[row - 1][col + 1] = '0' + Around_Mine_count(row - 1, col + 1);
 show_map[row][col - 1] = '0' + Around_Mine_count(row, col - 1);
 show_map[row][col + 1] = '0' + Around_Mine_count(row, col + 1);
 show_map[row + 1][col - 1] = '0' + Around_Mine_count(row + 1, col - 1);
 show_map[row + 1][col] = '0' + Around_Mine_count(row + 1, col);
 show_map[row + 1][col + 1] = '0' + Around_Mine_count(row + 1, col + 1);
}
//写一个判断游戏结束的函数
int Success_Sweep(char show_map[MAX_ROW + 2][MAX_COL + 2]) {
 int count = 0;
 for (int row = 1; row <= MAX_ROW; row++) {
 for (int col = 1; col <= MAX_COL; col++) {
 if (show_map[row][col] == '*') {
 count++;
 }
 }
 }
 if (count == DEFAULT_MINE) {
 return 1;
 }
 return 0;
}
//开始游戏
void StartGame() {
 while (1) {
 printf("请输入您要掀开的坐标:");
 int row = 0;
 int col = 0;
 while (1) {
 scanf("%d %d", &row, &col);
 if (row < 1 || row > MAX_ROW || col < 1 || col > MAX_COL) {
 printf("您的输入有误,请重新输入!\n");
 continue;
 }
 if (show_map[row][col] != '*') {
 printf("该位置已被掀开,请重新选择\n");
 continue;
 }
 break;
 }
 //判断该地方是否有雷
 if (mine_map[row][col] == '1') {
 Print_Interface(mine_map);
 printf("该地方有雷,游戏结束!!!\n");
 break;
 }
 if (No_Mine(row, col)) {
 show_map[row][col] = '0';
 Open_Blank(row, col);
 }
 show_map[row][col] = '0' + Around_Mine_count(row, col);
 //判断是否掀开所有空地
 if (Success_Sweep(show_map) == 1) {
 Print_Interface(mine_map);
 printf("您已成功扫雷!!!\n");
 break;
 }
 system("cls");
 //更新地图
 Print_Interface(show_map);
 }
}

int main() {
 if (Menu() == 0) {
 exit(0);
 }
 srand((unsigned int)time(NULL));
 Init_Interface();
 Print_Interface(show_map);
 StartGame();

 system("pause");
 return 0;
}

效果图:

数字代表周围雷的个数

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍C语言实现简单扫雷游戏,包括了C语言实现简单扫雷游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 步骤 1.首先打印游戏选择菜单 2.地图及初始化 1)、展示给玩家的地图(show_map) 2)、地雷的图(mine_map可知地雷的位置) 3.打印地图 4.用户输入坐标,并检查坐标的合理性 5.判断当前位置

  • 本文向大家介绍C语言实现简易扫雷小游戏,包括了C语言实现简易扫雷小游戏的使用技巧和注意事项,需要的朋友参考一下 我们经常在电脑上面玩的扫雷游戏,很考验我们的判断能力,但是实现一个扫雷游戏并不是很困难,只要多注意一些细节就好,就可以将一个简单的扫雷游戏写出来! 接下来先介绍扫雷游戏要实现的功能: 首先,要对雷阵进行初始化,在初始化的时候要注意要定义两个数组,一个是让我们扫雷的阵,另外一个就是显示某一

  • 本文向大家介绍C语言实现扫雷小游戏,包括了C语言实现扫雷小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下 主函数:main.c 子函数:game.c 函数声明:game.h 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C++实现简单扫雷小游戏,包括了C++实现简单扫雷小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C++实现简单扫雷小游戏的具体代码,供大家参考,具体内容如下 头文件Mine_Sweep.h 实现部分 主函数 运行效果 更多有趣的经典小游戏实现专题,分享给大家: C++经典小游戏汇总 python经典小游戏汇总 python俄罗斯方块游戏集合 JavaScript

  • 本文向大家介绍C语言模拟实现简单扫雷游戏,包括了C语言模拟实现简单扫雷游戏的使用技巧和注意事项,需要的朋友参考一下 本文指的扫雷是简单模拟电脑中的扫雷游戏,但以我目前的水平,也就只能在黑框中实现 test.c game.c game.h 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C语言实现简单扫雷小程序,包括了C语言实现简单扫雷小程序的使用技巧和注意事项,需要的朋友参考一下 扫雷是一款大众类的益智小游戏。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。 首先带大家简单来了解一下扫雷的游戏机制: 随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷,2就有两个雷,以此类