IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 使用C语言制作一个小游戏之扫雷游戏 -> 正文阅读

[C++知识库]使用C语言制作一个小游戏之扫雷游戏


前言

提示:相信大家小时候都玩过扫雷游戏,对扫雷游戏的规则应该也有一定得了解,在本文中,我们将使用C语言去实现扫雷游戏的制作,希望大家都有所收获。


提示:以下是本篇文章正文内容,下面案例可供参考

一、编辑这个小游戏的几个步骤

1、定义两个二维数组作为地图,一个是用来给玩家看的的地图用 showMap表示,另一个是用来储存地雷的地图用mineMap表示
2、初始化地图,对于showMap用’ * ‘来初始化;对于mineMap用 ’ 1 ‘表示有地雷,用’ 0 ‘表示没地雷,并随机生成十个位置为地雷
3、打印showMap
4、玩家输入要翻开地图的坐标
5、判断输入坐标的合法性
6、判断是否踩雷
7、更新地图
8、判断输赢

二、各个步骤具体实现代码

1.定义两个二维数组作为地图

代码如下:

char showMap[MAX_ROW][MAX_COL] = { 0 };
char mineMap[MAX_ROW][MAX_COL] = { 0 };

2.初始化地图

代码如下:

void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {
	/*for (int row = 0; row < MAX_ROW; row++) {
		for (int col = 0; col < MAX_COL; col++) {
			showMap[row][col] = '*';
		}
	}*/

	//memset(初始化的对象,初始化成什么,初始化长度)
	//用于对于连续存储空间的内存进行统一初始化

	//对showMap初始化为*
	memset(showMap, '*', MAX_ROW * MAX_COL);
	//对mineMap初始化为0
	memset(mineMap, '0', MAX_ROW * MAX_COL);

	//随机设置十个雷
	//设置随机种子
	srand((unsigned int)time(0));
	int count = 0;
	while (count<10) {
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (mineMap[row][col] == '1') {
			continue;
		}
		mineMap[row][col] = '1';
		count++;
	}
}

3.打印showMap

代码如下:

void printMap(char Map[MAX_ROW][MAX_COL]) {
	for (int row = 0; row < MAX_ROW; row++) {
		for (int col = 0; col < MAX_COL; col++) {
			printf("%c", Map[row][col]);
		}
		printf("\n");
	}
}

4.玩家输入要翻开地图的坐标

代码如下:

int row;
int col;
int updatecount = 0;
printf("请输入要打开的地图坐标(row,col)\n");
scanf("%d %d", &row, &col);

5.判断输入坐标的合法性

代码如下:

if (row<0 || row>MAX_ROW || col<0 || row>MAX_COL){
			printf("输入的坐标有误,请重新输入!\n");
			continue;
			}
if (showMap[row][col] != '*') {
			printf("该位置已经被翻开,请重新输入!\n");
			continue;
		}

6.判断是否踩雷

代码如下:

if (mineMap[row][col] == '1') {
			printf("抱歉您踩到地雷了,游戏结束!\n");
			break;
		}

7.更新地图

代码如下:

void undateMap(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL],
               int row,int col) {
	int count = 0;
	for (int r = row-1; r <=row + 1; r++) {
		for (int c = col-1; c <=col + 1; c++) {
			if (r == row && c == col) {
				continue;
			}
			if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {
				continue;
			}
			if (mineMap[r][c] == '1') {
				count++;
			}
			
		}
	}
	showMap[row][col] = '0' + count;
}

6.判断输赢

代码如下:

if (updatecount == MAX_ROW * MAX_COL - 10) {
			printf("游戏胜利!恭喜你!");
		}

三、扫雷游戏的总代码

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define MAX_ROW 9
#define MAX_COL 9


//初始化数组函数
void init(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL]) {
	/*for (int row = 0; row < MAX_ROW; row++) {
		for (int col = 0; col < MAX_COL; col++) {
			showMap[row][col] = '*';
		}
	}*/

	//memset(初始化的对象,初始化成什么,初始化长度)
	//用于对于连续存储空间的内存进行统一初始化

	//对showMap初始化为*
	memset(showMap, '*', MAX_ROW * MAX_COL);
	//对mineMap初始化为0
	memset(mineMap, '0', MAX_ROW * MAX_COL);

	//随机设置十个雷
	//设置随机种子
	srand((unsigned int)time(0));
	int count = 0;
	while (count<10) {
		int row = rand() % MAX_ROW;
		int col = rand() % MAX_COL;
		if (mineMap[row][col] == '1') {
			continue;
		}
		mineMap[row][col] = '1';
		count++;
	}
}

//打印地图
void printMap(char Map[MAX_ROW][MAX_COL]) {
	for (int row = 0; row < MAX_ROW; row++) {
		for (int col = 0; col < MAX_COL; col++) {
			printf("%c", Map[row][col]);
		}
		printf("\n");
	}
}


//翻地图
void undateMap(char showMap[MAX_ROW][MAX_COL], char mineMap[MAX_ROW][MAX_COL],
               int row,int col) {
	int count = 0;
	for (int r = row-1; r <=row + 1; r++) {
		for (int c = col-1; c <=col + 1; c++) {
			if (r == row && c == col) {
				continue;
			}
			if (r<0 || r>MAX_ROW || c<0 || c>MAX_COL) {
				continue;
			}
			if (mineMap[r][c] == '1') {
				count++;
			}
			
		}
	}
	showMap[row][col] = '0' + count;
}


int main() {
	char showMap[MAX_ROW][MAX_COL] = { 0 };
	char mineMap[MAX_ROW][MAX_COL] = { 0 };
	//初始化数组
	init(showMap, mineMap);
	//打印showMap
	printMap(showMap);
	while (1) {
		//printMap(mineMap);
		int row;
		int col;
		int updatecount = 0;
		//翻开地图
		printf("请输入要打开的地图坐标(row,col)\n");
		scanf("%d %d", &row, &col);
		if (row<0 || row>MAX_ROW || col<0 || row>MAX_COL){
			printf("输入的坐标有误,请重新输入!\n");
			continue;
			}
		if (showMap[row][col] != '*') {
			printf("该位置已经被翻开,请重新输入!\n");
			continue;
		}
		undateMap(showMap, mineMap,row,col);
		updatecount++;
		printMap(showMap);
		//printMap(mineMap);
		//判断是否踩雷
		if (mineMap[row][col] == '1') {
			printf("抱歉您踩到地雷了,游戏结束!\n");
			break;
		}
		//判断输赢
		if (updatecount == MAX_ROW * MAX_COL - 10) {
			printf("游戏胜利!恭喜你!");
		}

	}
}

四、总结

本文主要利用C语言对大家喜闻乐见的小游戏扫雷游戏进行了简单实现,希望大家可以通过本文对C语言的学习产生兴趣,如有问题请私信联系。

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-04 19:21:28  更:2021-07-04 19:21:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 4:56:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码