实现扫雷小游戏

实现扫雷小游戏,第1张

实现扫雷小游戏

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

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

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

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

3.实现扫雷小游戏

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

#pragma once
#include 
#include 
#include 
//行
#define ROW 9
//列
#define COL 9

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

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

//设置炸d个数
#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);

//声明布置炸d
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("nnn");
}

//实现初始化
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("nn");
	for (i = 1; i <= row; i++)
	{
		printf(" %d  ", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			printf(" %c  ",num[i][j]);
		}
		printf("nn");
	}
}

//实现布置炸弹
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= 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,'*');

	//布置炸d
	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;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5710416.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存