首页 > 其他分享 >简易版扫雷游戏的实现(可能)

简易版扫雷游戏的实现(可能)

时间:2023-11-11 23:32:57浏览次数:30  
标签:11 rand 游戏 int char 简易版 扫雷 坐标 函数

其实我没怎么玩过这游戏,除了在古早的xp系统上见到过内置的扫雷软件外,稍微玩过几把后就体验到了脑补雷的位置并推断地雷的位置是一件多么烧脑的事情,遂放弃了。其实我更喜欢玩蜘蛛纸牌。好了废话就讲这几句=-=

嗯,首先,我们要知道扫雷游戏是怎么实现的呢?下面来看一张图:

简易版扫雷游戏的实现(可能)_i++

这个是微软出品的扫雷游戏。里面的教程也是很详细,我就不全部放上来了。总而言之就是这些方块背后可能会有地雷。也可能没有地雷,点击方块就可以开辟出一片无雷区域,但是也有可能一下子就踩到地雷。

作为c语言的初学者,自然没有办法模拟出这么优质的画面出来。所以我们可以依据原理依葫芦画瓢。

第一步肯定是先打印棋盘了,这个棋盘肯定不是四四方方的那种。而且一开始肯定不能让玩家知道雷在哪里,不然就没有解密的刺激和烧脑感了,所以我们要把地雷元素和普通方块元素用相同的字符表示。所以第一步我们可以选用一个星号来初始化所有元素。

就像这种

简易版扫雷游戏的实现(可能)_i++_02


而元素状态和元素实际展现出来的状态也得分别装到两个棋盘当中。于是我们可以创建两个字符数组来存储两个棋盘,一个是给玩家看到的,另一个是展现出是否有地雷状态的棋盘。

这是一个简易版的,9*9的棋盘,而一般扫雷我们会选择以所选元素为中心,以一个九宫格为范围来探测它附近的地雷数量,取四角的点,可以知道上下最大探测单元格均为11个.然后通过尝试摸索可以推出雷的具体位置。这里不再赘述玩法。

于是我们可以写出一个函数来初始化两个字符数组

一个叫show(给玩家看到的) 另一个叫board(电脑看到的)

void initial(char a[11][11], char set)//返回类型为空,可能会报错,这里可以改成int类型,然后return 0;
{
	int i = 0;
	int j = 0;
	for (i = 1; i <= 11; i++)
	{
		for (j = 0; j <= 11; j++)
		{
			a[i][j] = set;
		}
	}
}
char show[11][11];
char board[11][11];
initial(show,'*');
initial(board,'0');

初始化完之后就是打印了,也是写一个打印的函数,为了方便玩家迅速找到指定点的坐标,我们可以尝试把横轴和竖轴上的整数都打印出来

void display(char a[11][11],char set)
{
	int i = 0;
	int j = 0;
	for (i = 0; i <= 9; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= 9; i++)
	{
		printf("%d ", i);
		for (j = 1; j <= 9; j++)
		{
			printf("%c ", set);
		}
		printf("\n");
	}
}

然后我们开始考虑对board进行埋雷操作,这里需要用到rand函数和srand函数,还有time函数,当然rand函数的范围是0-32767,要用的话肯定要对数据进行一些处理。

首先,使用rand函数和srand函数要包含一个头文件

#include <stdlib.h>

其次,使用time函数也得包含一个头文件

#include <time.h>

然后在前面的位置写一段代码,这里解释起来有点复杂

srand((unsigned int)time(NULL));

接下来就可以使用rand函数了,要生成a-b范围的随机数,就写

int x = a+rand()%(b-a+1);

坐标随机,肯定要两个数字来表示坐标了,我们就可以写埋雷函数了,这里要注意一个点,ret1和ret2赋值随机数必须在while循环里面进行操作,不然每次生成的坐标都是一样的,程序就会卡在这里,后面的if判定过不了。

void setmine(char a[11][11])
{
	int i = 0;
	int j = 0;
	int ret1 = 0;
	int ret2 = 0;
	int cnt = 10;
	while(cnt>0)
	{	
		ret1 = 1 + rand() % 9;
		ret2 = 1 + rand() % 9;
		if (a[ret1][ret2] == '0')
		{
			a[ret1][ret2] = '1';
			cnt--;
		}
	}
	printf("\n");
}

接下来就是交给玩家的操作时间了,玩家在输入一个坐标值后就可以看到这个方格的状态,如果是雷,就被炸死了,不是雷,就可以看到附近雷的数目。但不知道具体位置。也要注意坐标非法的情况,就是万一数组越界访问了,可能游戏会出bug,所以还要加上一层限定,让坐标就在那个范围内,否则就回到输入坐标的地方。

void checkmine(char a[11][11],char b[11][11])
{
	int i = 0;
	int j = 0;
	int flag = 1;
	int cct = 0;
	while (flag == 1)
	{
		printf("输入坐标>:");
		scanf_s("%d %d", &j, &i);
		if ((j <= 9 && j >= 1) && (i >= 1 && i <= 9))
		{
			if (a[i][j] == '0')
			{
				printf("这里没有雷\n");
					displaytwo(a, b, i, j);
			}
			else
			{
				printf("你被炸死了\n");
					flag = 0;
					break;
			}
			cct++;

			if (cct == 71)
			{
				printf("你赢了,成功扫出所有雷\n");
				break;
			}
		}
		else
		{
			printf("参数非法,请重新输入\n");
		}
	}
}
int displaytwo(char a[11][11], char b[11][11], int y, int x)
{
	int n = 0;
	int m = 0;
	int count = 0;
	for (n = y-1; n <= y+1; n++)
	{
		for (m = x-1; m <= x+1; m++)
		{
			if (a[n][m] == '1')
				count++;
		}
	}
	b[x][y] = count+'0';
	for (n = 0; n <= 9; n++)
	{
		printf("%d ", n);
	}
	printf("\n");
	for (n = 1; n <= 9; n++)
	{
		printf("%d ", n);
		for (m = 1; m <= 9; m++)
		{
			printf("%c ", b[n][m]);
		}
		printf("\n");
	}
	return 0;
}

以上。就是一个扫雷游戏的简单思路

标签:11,rand,游戏,int,char,简易版,扫雷,坐标,函数
From: https://blog.51cto.com/u_16298511/8321014

相关文章

  • 牛客[编程题] HJ44 Sudoku数独游戏
    HJ44Sudoku困难  通过率:27.56%  时间限制:1秒  空间限制:32M 描述问题描述:数独(Sudoku)是一款大众喜爱的数字逻辑游戏。玩家需要根据9X9盘面上的已知数字,推算出所有剩余空格的数字,并且满足每一行、每一列、每一个3X3粗线宫内的数字均含1-9,并且不重复。例如:输......
  • P5154 数列游戏
    题目描述:游戏的规则是这样的:LJC在纸上写下两个长度均为N的数列A和B,两个数列一一对应。HKE每次可以找两个相邻的数A[i]和A[i+1],如果它们两个不互质,HKE可以选择得到(B[i]+B[i+1])分,然后擦掉A和B位置上的第i,i+1个数,并把两个序列重新按顺序编号。当所有相邻的数互质时,游戏结束。HKE......
  • 武汉灰京文化传媒:数字科技催生中国游戏产业新时代
        回顾过去20年,中国游戏产业已经经历了从主机游戏到互联网游戏再到移动互联网游戏的飞速发展。如今,伴随着人工智能、云计算和虚拟现实技术等数字科技的高速发展,中国游戏市场再次面临着巨大机遇,预示着新一轮革命即将来临。游戏,作为离用户最近的产品,将成为数字科技迭代升级......
  • UnrealEngine5 如何为 FPS 游戏设置角色
    前言FPS是第一人称射击游戏的简称,从反恐精英开始,FPS游戏已经成为了大热门游戏的首选,今天就让我带大家使用虚幻5(UnrealEngine5)来制作一款简单的FPS游戏吧!准备工程创建打开我们UE5的编辑器,选择第一人称射击游戏,选择C++,设置好您的工程名称,然后创建游戏,我的工程命名叫ROTD。资源准......
  • 微信小游戏个人开发者如何盈利
    微信小游戏,抖音小游戏,等H5小游戏非常的火,也处于流量的红利期,那么对于我们个人开发者而言我们能能否抓住微信小游戏的红利期,来实现人生的第一桶金,来实现睡后有收入呢?这里有一个游戏开发交流小组,希望大家可以来一起交流一下开发经验呀~今天小编带你来看下,个人开发者适合开发哪些游......
  • 生成式AI横扫PG游戏领域:苹果计划重塑Siri,迎头赶上竞争对手
    今年,生成式AI风头正劲,而苹果似乎也在迎头赶上竞争对手。PGAPP游戏试玩家揭露,苹果正在对其Siri助手进行大规模改造,将引入更多AI功能,并计划将其作为iPhone16的主打特色之一。根据爆料客Revegnus的说法,苹果将用LLM(大型语言模型)对Siri进行改进,以提.升其AI能力,使其成为杀.手级AI应用,并......
  • 跳跃游戏 II
    跳跃游戏II题目:给定一个长度为n的0索引整数数组nums。初始位置为nums[0]。每个元素nums[i]表示从索引i向前跳转的最大长度。换句话说,如果你在nums[i]处,你可以跳转到任意nums[i+j]处:0<=j<=nums[i]i+j<n返回到达nums[n-1]的最小跳跃次数。生......
  • 深度合作引领游戏行业,武汉灰京文化掀起合作新风潮
        在竞争激烈的游戏行业,武汉灰京文化传媒有限公司以深度合作为核心战略,引领着游戏行业掀起一股合作新风潮。通过深度合作,他们成功将合作伙伴的游戏产品带入更广泛的市场,为玩家提供更多精彩的游戏体验。这种合作模式的成功不仅有助于游戏公司扩大用户基础,还为游戏行业注入......
  • 撞车嘉年华:知名PG极速赢家毁灭式赛车游戏《Wreckfest》行动装置版超低优惠价
    《Wreckfest》是一款由THQNordic于2018年推出的独特赛车游戏,而它如今也在行动装置版上进行了大幅降价,从原价的9.99美元降至仅0.99美元。这让更多PG模拟玩家能够轻松享受这款引人入胜的游戏。这款PG极速赢家游戏以冲突玩法为主打,玩家需要运用车辆金属碰撞来取得胜利。不仅如此,《Wre......
  • P7514 [省选联考 2021 A/B 卷] 卡牌游戏
    [省选联考2021A/B卷]卡牌游戏题目描述Alice有\(n\)张卡牌,第\(i\)(\(1\lei\len\))张卡牌的正面有数字\(a_i\),背面有数字\(b_i\),初始时所有卡牌正面朝上。现在Alice可以将不超过\(m\)张卡牌翻面,即由正面朝上改为背面朝上。Alice的目标是让最终朝上的\(n\)个数......