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++知识库]实现扫雷小游戏

1.思路:创建两个二维数组,一个用来显示最终结果,一个用来显示排查结果,布置炸弹时可用

srand函数、rand函数、time函数配合使用,生成随机数,可通过%的方法控制其生成范围

(srand函数、rand函数、time函数三子棋章节略有介绍)

2.在计算排查炸弹数时,为了防止计算越界可额外扩大其访问空间一圈,并将其初始值赋值为字符‘0’,使后面便于计算排查炸弹

3.实现扫雷小游戏

(1)头文件lin.h(声明函数)

#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//行
#define ROW 9
//列
#define COL 9

//防止计算越界
#define ROWS ROW+2

//防止计算越界
#define COLS ROW+2

//设置炸弹个数
#define NUMBER 10

//声明控制间距
void distance();

//声明初始化
void My_lin(char arr[ROWS][COLS], int rows, int cols);

//声明打印
void My_print(char str[ROWS][COLS], int row, int col);

//声明布置炸弹
void My_qin(char num[ROWS][COLS], int row, int col);

//声明排查结果
void My_yan(char arr[ROWS][COLS], char str[ROWS][COLS], int row, int col);

(2)源文件lin.c(实现函数)


#include"lin.h"
//实现控制间距
void distance()
{
	printf("\n\n\n");
}

//实现初始化
void My_lin(char num[ROWS][COLS], int rows, int cols,char set)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			num[i][j] = set;
		}

	}
}

//实现打印棋盘
void My_print(char num[ROWS][COLS], int row, int col)
{
	int i = 0;
	for (i = 0; i <= col; i++)
	{
		printf(" %d  ", i);
	}
	printf("\n\n");
	for (i = 1; i <= row; i++)
	{
		printf(" %d  ", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			printf(" %c  ",num[i][j]);
		}
		printf("\n\n");
	}
}

//实现布置炸弹
void My_qin(char num[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int count = NUMBER;
	while (count)
	{
		//设置生成随机数的取值范围[1,row]
		x = rand() % row+1;
		//设置生成随机数的取值范围[1,col]
		y = rand() % col + 1;
		if ('0' == num[x][y])
		{
			num[x][y] = '1';
			count--;
		}
	}
}

//实现排查炸弹数
int My_li(char arr[ROWS][COLS], int x, int y)
{
	return arr[x - 1][y - 1]
	+ arr[x - 1][y] 
	+ arr[x - 1][y + 1]
	+ arr[x - 1][y - 1]
	+ arr[x][y + 1]
	+ arr[x + 1][y - 1]
	+ arr[x + 1][y]
	+ arr[x + 1][y + 1]
	- 8 * '0';

}
//实现排查结果
void My_yan(char arr[ROWS][COLS], char str[ROWS][COLS], int row, int col)
{
	int x = 0;
	int y = 0;
	int le = 0;
	while(le<row*col-NUMBER)
	{
		printf("请输入排查的坐标(坐标请用空格隔开):");
		scanf("%d %d", &x, &y);
		//控制间距
		distance();
		if (x >= 1 && x <= row && y >= 1 && y <= col)
		{
			//排查出炸弹
			if ('1' == arr[x][y])
			{
				printf("很遗憾,你被炸死了\n");
				break;
			}
			//未排查出炸弹
			else
			{
				/排查数	
				int count=My_li(arr, x, y);
				str[x][y] = count + '0';
				//打印排查后的棋盘
				My_print(str, ROW, COL);
				le++;
			}
		}
		else
		{
			printf("坐标无效,请重新输入\n");
		}
	}
	if (le == row * col - NUMBER)
	{
		printf("恭喜你,获胜啦\n");
	}
}

(3)源文件test.c(主函数)


#include "lin.h"
void menu()
{
	//控制间距
	distance();
	printf("				1.开始游戏\n");
	printf("				2.退出游戏\n");
	//控制间距
	distance();
}
void lin()
{
	char arr[ROWS][COLS] = { 0 };
	char str[ROWS][COLS] = { 0 };

	//初始化为0
	My_lin(arr, ROWS, COLS,'0');

	//初始化为*
	My_lin(str, ROWS, COLS,'*');

	//布置炸弹
	My_qin(arr,ROW,COL);

	//打印棋盘
	My_print(str, ROW, COL);

	//控制间距
	distance();

	//排查结果
	My_yan(arr, str, ROW, COL);

	//控制间距
	distance();

	//打印棋盘
	My_print(arr, ROW, COL);

	//控制间距
	distance();
}
void test()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		//打印菜单
		menu();
		printf("请输入选项:");
		scanf("%d", &input);
		//控制间距
		distance();
		switch (input)
		{
		case 1:
			lin(); break;
		case 2:
			input = 0;
			printf("退出游戏\n"); break;
		default:
			printf("选择无效,请重新选择\n");
		}
	}while (input);
}
int main()
{
	test();
	return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:38:58  更:2022-01-24 10:39:27 
 
开发: 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年11日历 -2024/11/24 11:04:09-

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