扫雷游戏升级版 含递归链式展开(一次展开一片区域) 代码详细解读 C语言

C语言扫雷(递归展开)(详细注释)(完整代码) c语言扫雷游戏 阅读详情

1、前言:

我看了优快云有很多小伙伴也写了扫雷小游戏 但是大部分写的代码都是一次输入坐标只能展开一个位置并没有还原我们小时候最初始的游戏玩法 可玩性很低  我在这用函数递归链式展开一片还原最初始游戏 提高可玩性

 先放效果图↓

38a17b7f911f45a6b002eb656f09d876.png

2、建议:

一个程序代码的实现并不是只靠看能看会的  而是要落实到敲代码 可以先靠自己画导图 根据导图敲出代码  敲代码的过程中难免会有些错误 解决它 这都将成为你宝贵的知识  *在看的过程也可以拿出稿纸和笔来画出导图

3 什么是扫雷?

《扫雷》中玩家的目标是在最短时间内识别出所有非雷区的格子,同时避免触碰到地雷。游戏区域由多个隐藏格子组成,每个格子可能隐藏着地雷或数字,数字表示周围八个格子中地雷的数量。玩家通过点击格子揭示内容,使用逻辑推理逐步排除雷区。游戏考验玩家的观察力和推理能力,任何一次误点地雷都会导致游戏失败。

4 须知:

本篇代码中 '0'(字符0)代表安全位置   '1'(字符1)代表雷  至于为何是这样设定后面会提到

5 正文:

首先我们需要三个文件(意义:代码没有那么冗杂 提高代码的可读性 方便修改)两个源文件test.c(代码的主体)game.c(游戏运行的本质)和一个头文件game.h(头文件的包含 函数的声明)

接下来 我们一一来写代码↓

先写出test.c的主函数 注:test.c与game.c都要引用头文件game.h 而game.h的内容后面会讲到

int main()
{
	test();
	return 0;
}

跟三子棋游戏类似 主函数都特别简单 挑战还是在test函数里面的

再写出test.c文件里的test函数

void test()
{
	srand((unsigned int)time(NULL));
	//时间戳生成随机数字
	//后面布雷随机坐标的生成会用到 与rand连用
	int input = 0;
	do
	{
		menu();//打印菜单
		printf("请选择");
		scanf("%d", &input);
		switch(input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误 请重新选择\n");
			break;
		}


	} while (input);
}

可以看到test函数里面又包含了menu函数和game函数 在这里menu是用来打印菜单 game才是游戏运行的本质

menu函数

void menu()
{
	printf("***************************\n");
	printf("******     1.play   *******\n");
	printf("******     0.exit   *******\n");
	printf("***************************\n");
}

game函数

void game()
{
	char mine[Rows][Cols] = { 0 };//布置好的雷的信息
	char show[Rows][Cols] = { 0 };//排查出的雷的信息
	//排查坐标时 为了防止坐标的越界 我们需要给数组加两行两列
	//初始化棋盘
	init_board(mine, Rows, Cols, '0');
	init_board(show, Rows, Cols, '*');
	//打印棋盘
	print_board(show, Row, Col);
	//布置雷
	set_mine(mine, Row, Col);
	//print_board(mine, Row, Col);//写代码中途可以借用看布雷情况 方便后续写作
	//排查雷
	find_mine(mine, show, Row, Col);
}

*重点理解:game函数的运行逻辑 先初始化布雷和展示面板 打印出来要展示的面板 在布雷面板布置雷 在展示面板输入坐标排雷 显示排雷后的面板

据上代码可见game函数里面又包含了许多函数

init_board()初始化面板

print_board()打印面板

set_mine()布置雷

find_mine()排查雷

这些函数以及Row Rows 和Col Cols的声明 和库函数头文件的引用都可以放在头文件game.h里面

下面是game.h文件代码↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>//rand srand
#include<time.h>//time
#define easy_mode 10//布置雷的个数(类似于模式难度)
#define Row 9//9*9宫格
#define Col 9
#define Rows Row+2//上下左右各多一维 防止数组访问越界
#define Cols Col+2
//初始化棋盘
void init_board(char board[Rows][Cols], int ros, int cols, char set);
//打印棋盘
void print_board(char board[Rows][Cols], int row, int col);
//布置雷
void set_mine(char mine[Rows][Cols], int row, int col);
//排查雷
void find_mine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col);

game函数里面的一系列函数是什么实现的 具体内容是什么? 这就要用到game.c文件 也是本游戏代码逻辑书写的最困难的地方  但是只要基础扎实都会迎刃而解
接下来我们一一来写↓

(1)初始化面板init_board()

void init_board(char board[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++)
		{
			board[i][j] = set;
		}
	}
}

(2)打印面板print_board()

void print_board(char board[Rows][Cols], int row, int col)
{
	int i = 0;
	printf("-------扫雷--------\n");
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-------扫雷--------\n");
}

(3)布置雷set_mine()

void set_mine(char mine[Rows][Cols], int row, int col)
{
	int count = easy_mode;
	while (count)
	{ 
		//生成随机下标
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

(4)排查雷find_mine()

void find_mine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	printf("请输入坐标");
	while (win < (row * col - easy_mode))
	{
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= col && y >= 1 && y <= row)
		{
			if (show[x][y] != '*')
			{
				printf("该坐标被排查过了 请重新输入");
				continue;
			}
			if (mine[x][y] == '1')
			{
				printf("很遗憾 你被炸死了\n");
				print_board(mine, row, col);
				break;
			}
			else
			{
				chain_reflect(mine, show,row , col, x, y);
				print_board(show, row, col);
				win++;
			}
		}
		else
		{
			printf("坐标输入非法 请重新输入\n");
		}
	}
	if (win == (row * col - easy_mode))
	{
		printf("恭喜你雷全部排查完 游戏胜利\n");
	}
}

我们又又又看到find_mine函数里有chain_reflect函数 通过函数名字我们也可以知道其作用 就是开头讲的 用递归链式展开一片区域  书写思路1 判断坐标是否越界 2 是否被排查过 3 周围八个方格里没有雷 三个条件成立该坐标和旁边八个坐标就一起递归 否则就返回该坐标周围雷的个数

代码如下↓

void chain_reflect(char mine[Rows][Cols], char show[Rows][Cols], int row, int col, int x, int y)
{
	int i = 0;
	int j = 0;
	if (x >= 1 && x <= col && y >= 1 && y <= row)//防止坐标越界
	{
		if (show[x][y] == '*')//判断是否被排查过
		{
			if (get_mine_count(mine, x, y) == 0)
			{
				show[x][y] = ' ';
				for (i = x - 1; i <= x + 1; i++)
				{
					for (j = y - 1; j <= y + 1; j++)
					{
						chain_reflect(mine, show, row, col, i, j);//递归传递
					}
				}
			}
			else
			{
				int n = get_mine_count(mine, x, y);
				show[x][y] = n + '0';//记下该坐标雷的个数
			}
		}
	}
	return;
}

看到这里问题来了 上面get_mine_count函数是怎么统计雷的个数的呢 ?这里就要巧妙的用到'1'   前面所说的为何雷设置为'1' 安全位置为何设置为'0'  这就需要知道'0'的ASCII 值是48   '1'ASCII值是 49 

所以我们计算雷的个数就可以等同为计算该坐标周围八个坐标字符相加 再 减去 8 * '0' 返回的int 值 就是雷的个数  举个例子:如果周围有两个雷 那么计算就为2 * '1' + 6 * '0' - 8 * '0'  返回的int 值就是2  注意:字符运算的本质就是ASCII值的运算   上面的show[x][y] = n + '0' 就是 '2'   面板上展示的都是字符 因为我们定义的就是char board[]

下面就是get_mine_count函数的代码↓

int get_mine_count(char mine[Rows][Cols], int x, int y)
{
	return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] +
		mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');

}

这样全部的代码就写完了

下面我们来看完整的代码↓

test.c源文件代码

//扫雷游戏
#include"test(game)50.h"
void game()
{
	char mine[Rows][Cols] = { 0 };//布置好的雷的信息
	char show[Rows][Cols] = { 0 };//排查出的雷的信息
	//排查坐标时 为了防止坐标的越界 我们需要给数组加两行两列
	//初始化棋盘
	init_board(mine, Rows, Cols, '0');
	init_board(show, Rows, Cols, '*');
	//打印棋盘
	print_board(show, Row, Col);
	//布置雷
	set_mine(mine, Row, Col);
	//print_board(mine, Row, Col);//写代码中途可以借用看布雷情况 方便后续写作
	//排查雷
	find_mine(mine, show, Row, Col);
}
void menu()
{
	printf("***************************\n");
	printf("******     1.play   *******\n");
	printf("******     0.exit   *******\n");
	printf("***************************\n");
}
void test()
{
	srand((unsigned int)time(NULL));
	//时间戳生成随机数字
	//后面布雷随机坐标的生成会用到 与rand连用
	int input = 0;
	do
	{
		menu();//打印菜单
		printf("请选择");
		scanf("%d", &input);
		switch(input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("选择错误 请重新选择\n");
			break;
		}


	} while (input);
}
int main()
{
	test();
	return 0;
}

game.h头文件代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>//rand srand
#include<time.h>//time
#define easy_mode 10//布置雷的个数(类似于模式难度)
#define Row 9//9*9宫格
#define Col 9
#define Rows Row+2//上下左右各多一维 防止数组访问越界
#define Cols Col+2
//初始化棋盘
void init_board(char board[Rows][Cols], int ros, int cols, char set);
//打印棋盘
void print_board(char board[Rows][Cols], int row, int col);
//布置雷
void set_mine(char mine[Rows][Cols], int row, int col);
//排查雷
void find_mine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col);

game.c源文件代码

#define _CRT_SECURE_NO_WARNINGS 1
#include"test(game)50.h"
void init_board(char board[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++)
		{
			board[i][j] = set;
		}
	}
}
void print_board(char board[Rows][Cols], int row, int col)
{
	int i = 0;
	printf("-------扫雷--------\n");
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	for (i = 1; i <= row; i++)
	{
		int j = 0;
		printf("%d ", i);
		for (j = 1; j <= col; j++)
		{
			printf("%c ", board[i][j]);
		}
		printf("\n");
	}
	printf("-------扫雷--------\n");
}
void set_mine(char mine[Rows][Cols], int row, int col)
{
	int count = easy_mode;
	while (count)
	{ 
		//生成随机下标
		int x = rand() % row + 1;
		int y = rand() % col + 1;
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}
int get_mine_count(char mine[Rows][Cols], int x, int y)
{
	return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] +
		mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1] +
		mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');

}
void chain_reflect(char mine[Rows][Cols], char show[Rows][Cols], int row, int col, int x, int y)
{
	int i = 0;
	int j = 0;
	if (x >= 1 && x <= col && y >= 1 && y <= row)//防止坐标越界
	{
		if (show[x][y] == '*')//判断是否被排查过
		{
			if (get_mine_count(mine, x, y) == 0)
			{
				show[x][y] = ' ';
				for (i = x - 1; i <= x + 1; i++)
				{
					for (j = y - 1; j <= y + 1; j++)
					{
						chain_reflect(mine, show, row, col, i, j);//递归传递
					}
				}
			}
			else
			{
				int n = get_mine_count(mine, x, y);
				show[x][y] = n + '0';//记下该坐标雷的个数
			}
		}
	}
	return;
}
void find_mine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col)
{
	int x = 0;
	int y = 0;
	int win = 0;
	printf("请输入坐标");
	while (win < (row * col - easy_mode))
	{
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= col && y >= 1 && y <= row)
		{
			if (show[x][y] != '*')
			{
				printf("该坐标被排查过了 请重新输入");
				continue;
			}
			if (mine[x][y] == '1')
			{
				printf("很遗憾 你被炸死了\n");
				print_board(mine, row, col);
				break;
			}
			else
			{
				chain_reflect(mine, show,row , col, x, y);
				print_board(show, row, col);
				win++;
			}
		}
		else
		{
			printf("坐标输入非法 请重新输入\n");
		}
	}
	if (win == (row * col - easy_mode))
	{
		printf("恭喜你雷全部排查完 游戏胜利\n");
	}
}

接下来看看运行结果↓

308f7990b08f42f1b1dab85f91a8f9d2.png

  看看踩雷结束情况

66ef13ff7cb64759bbc7aded7538acf4.png

 

 

 

 

 

 

 

 

【FPGA】AD9653设计和调试总结 基于FPGA的AD9653设计,设计思路,注意事项 阅读详情

相关推荐

在 CentOS Stream 10 上搭建 Kubernetes 集群并支持开发调试与日志查看

搭建 Kubernetes 集群的每个步骤详细的文档。

灵犀物润 1641

Qwen3-Next架构深度解析:混合注意力与MoE如何实现AIME秒解

大语言模型的推理能力正从‘参数规模驱动’转向‘架构精调度驱动’。以Qwen3-Next为代表的下一代基础架构,通过混合注意力机制(如Gated DeltaNet)动态分配计算资源,在长程依赖建模与低复杂度推理间取得平衡;结合高稀疏度MoE(512专家)为符号推演、几何建模、数值优化等子任务提供专用神经通路,显著提升思维链稳定性。其技术价值不仅在于加速,更在于保障多步数学推演的精度与可验证性——这正是AIME等零容错场景的核心需求。在p5js代码生成、长上下文数学求解等跨模态任务中,该架构展现出远超传统模型的

weixin_30847865的博客 456

机器学习——笔记整理(原理、python代码)——反反复复,出精活!

回顾知识,检查自我,开拓新域。 机器学习1.监督学习 机器学习简介: 机器学习是实现人工智能的手段,其主要研究内容是如何利用数据或经验进行学习,改善具体算法的性能。 多领域交叉,涉及概率论、统计学,算法复杂度理论等多门学科 广泛应用于网络搜索、垃圾邮件过滤、推荐系统、广告投放、信用评价、欺诈检测、股票交易和医疗诊断等应用。 机器学习分类: 机器学习一般分为下面几种类别 监督学习 ( Supervised Learning) 无监督学习 ( Unsupervised Learning) 强化学习(

weixin_45666566的博客 6487

高级扫雷,递归实现点开一片的那种

【代码】扫雷,递归实现点开一片的那种。

taozuizui的博客 677

别再只盯着YOLOv8了!手把手带你用PaddleDetection的PP-YOLOE+搞定你的第一个检测项目

本文介绍了PP-YOLOE+在目标检测领域的优势与应用实践,对比YOLOv8展示其在精度、速度和部署便利性上的突破。通过详细的代码示例和实战教程,帮助开发者快速上手PaddleDetection工具链,实现产业级目标检测项目,提升开发效率。

weixin_42701915的博客 185

多台树莓派(主机)通信

在做无人机实验时,有个任务需要 两台无人机 或 无人机与小车 进行通信。 由于我们飞机上用了树莓派,相当于一台电脑,索性选用Socket网络编程。 条件:树莓派、局域网(手机热点或路由器)。需要通信的两台树莓派接入同一个局域网。 如若现场没有网络,可将树莓派配置为无线路由器,发射wifi。网上很多教程,注意一点是树莓派需要先用网线接入路由器再配置。 发送数据: # -*- coding...

LNL_LNL的博客 7689

Java中扫雷游戏的递归算法_扫雷之递归

前言假前端这货又来了。 上一篇文章,我们已经生成了一张空白的雷区地图,并且将一定数量的地雷随机分布在整个雷区中,最后将环境标识计算出来。生成了一个较完整的雷区地图。 换个样子嗯,地图有点丑,还不直观。 我们利用 vue 的 filters 对地图渲染做一些处理,用 emoji 来展示整张地图。判断逻辑是:格子的数字是 0 ,显示空格子的数字是 9 ,显示炸弹格子是其他数字,仍然显...

weixin_33116629的博客 1227

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

小游戏实现----扫雷 (优化 递归展开、标记雷点的坐标)

C语言实现扫雷(优化:递归展开,雷点标记)

weixin_67401157的博客 1667

基于 Qt C++ 的金融行情交易终端

由于完整的商业级源码非常庞大,我将为你提供一个 **结构完整、可直接编译运行的基础框架**,并详细说明各模块的实现思路和扩展方向。double波动 = quote.lastPrice * (rand()%200 - 100) / 10000.0;// 订单缓存(orderId -> Order)

寒寒豆豆软件公司的博客 191

【Bug已解决】codex: conversation context window exceeded / Token limit reached — CodeX CLI 上下文窗口超限解决方案

CodeX CLI 上下文窗口超限(context_length_exceeded)的解决方案,含开新会话、更大窗口模型、精简提示与限制工具输出。

博客 4180

扫雷,咱就是一扫一大片(C语言完美递归版)

超完美的递归扫雷,怎么说也得玩一把叭!!!

做梦都想要三十万年薪~ 3196

瑞数jsvmp算法还原流程讲解

​ 又是很久没写文章了,今天水一篇文章吧,鉴于之前有看到过别人的文章被警告的案例,所以这篇文章就仅写一下还原瑞数vmp的大概流程吧(仅记录下自己还原的思路)

博客 6608

C语言实现扫雷游戏:递归展开与模块化编程实战

数组和递归是C语言乃至计算机科学中的基础数据结构与算法思想。数组用于组织和管理连续的同类型数据,是构建二维游戏棋盘(如扫雷)的核心数据结构。递归则通过函数自我调用来解决具有自相似性的问题,其原理是将复杂问题分解为相似的子问题,直至达到终止条件。在工程实践中,递归能优雅地实现如扫雷中的“链式展开”这类扩散行为,极大地简化了代码逻辑。结合模块化编程思想,将游戏的不同功能(如初始化、逻辑计算、用户交互)封装成独立函数和文件,可以提升代码的可读性、可维护性和可复用性。本文以经典的扫雷游戏开发为例,详细展示了如何运用

weixin_30645617的博客 755

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

快速学会编码扫雷

可以快速帮助你学会基础扫雷游戏的宝藏博客(C语言)

2301_81267913的博客 1759

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C语言实现控制台扫雷游戏:递归展开与模块化设计详解

递归算法是计算机科学中的核心概念,它通过函数自我调用来解决可分解的子问题,在树形结构遍历、分治策略等场景中广泛应用。其原理在于将复杂问题简化为相似的更小问题,并设置明确的终止条件以避免无限递归。在工程实践中,递归能显著简化代码逻辑,提升可读性,但需警惕栈溢出和重复计算等陷阱。以经典游戏开发为例,递归链式展开是扫雷游戏实现空白区域自动翻开的关键技术,它直观展示了递归在状态传播和空间搜索中的价值。本文将以C语言在控制台环境中构建扫雷游戏为具体场景,深入剖析如何利用递归实现高效、安全的区域展开,并分享模块化设计、

weixin_28717467的博客 213

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《C语言速成》

BIT-0-C语言课程课前准备 养成写博客的习惯 博客的重要性: 1. 自己写博客,是对所学知识的总结 2. 写博客可以记录你学习的一个过程和心得,给面试官更多了解你的机会,同时增加面试的谈资。 3. 写博客说明你是一个愿意分享的人。 优快云 博客园 51CTO-比较推荐 开源中国 自己搭建(服务器+域名; github博客) github的重要性 https://github.com/ 1. 大公司喜欢的东西 2. 了解git --->我是教程 3. 下去先了解,再注册一下github账.

aiqq136的博客 2709

Java特性清单:从基础语法到JVM的完整知识地图

学习编程语言时,很多人都会陷入收集大量教程却难以形成体系的困境。对于Java开发者而言,无论是初学者还是准备跳槽的工程师,都需要一份清晰的知识地图来串联零散的概念。编程学习的核心在于理解原理,而非机械背诵结论。从基础语法、面向对象、集合框架到并发编程、JVM底层,每一个技术点都包含设计思想与工程实践的细节。掌握这些原理不仅能应对面试中的高频问题,更能指导真实项目的性能优化与故障排查。本文以Java特性清单为载体,结合常见面试八股文考点,带你系统梳理java基础、java面试题等核心内容,帮助你快速定位知识盲

weixin_34314962的博客 322

win7扫雷_Python:游戏:写一个和 XP 上一模一样的“扫雷”!

本文代码基于 python3.6 和 pygame1.9.4。 这次,我们来模仿做一个 XP 上的扫雷,感觉 XP 上的样式比 win7 上的好看多了。 原谅我手残,扫雷基本就没赢过,测试的时候我是偷偷的把雷的数量从99改到50才赢了。。。 下面将一下我的实现逻辑。 首先,如何表示雷和非雷,一开始想的是,建立一个二维数组表示整个区域,0表示非地雷,1表示地雷。后来一想不对,还有标记为地雷,标记...

weixin_39812224的博客 366

扫雷(第一次不会炸死,点到不是雷的区域能延展开一片)

test.c文件 #include “game.h” int main() { int n = 0; srand((unsigned int)time(NULL)); menu(); do { printf(“请输入一个数字选择\n”); scanf("%d", &n); switch (n) { case 0: printf("游戏结束\n"); break; case 1:...

lijiangjiajun的博客 1137

刚写出来的一个扫雷 打开一片空白的递归函数 比较简洁布雷方式

采用一个雷控件 游戏进行中 总结本次小程序方法  开始游戏 根据设置动态创建雷控件 触雷或点开所有非雷区游戏结束 总结本次小程序有几个地方值得记录,也是写出这个程序的关键 1.布雷   使用一个int型二维数组储存各个坐标下是否有雷的信息    private int[,] map;//1表示有雷 //布雷 将是否有雷的信息记录到map[,]中...

weixin_30871293的博客 487

【Unity知识速递】第7期 Unity 6.6 深度解析:WebGPU 正式版与 WebAssembly64,Web 游戏的内存革命

如何启用 Wasm64?需要注意的是,Wasm64 需要浏览器支持 Memory64 提案,目前主流浏览器的最新版本都已支持。一句话总结: Unity 6.6 用 WebGPU 转正、Wasm64 16GB 内存和渐进式加载三连击,将 Web 游戏的体验天花板又往上推了一大截——Web 平台不再是"妥协版",正在成为真正的一等公民。Unity 6.6 新增了 WebAssembly64(Wasm64) 构建选项,这可能是本次更新中对 Web 游戏开发者影响最大的一项升级。

crystal_WJT的博客 420

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 96

我给 DeepSeek 大肥鱼做了一款马里奥式闯关游戏

当全网都在把大肥鱼做成直播虚拟主播的时候,我决定给她做一款横版闯关游戏。

2301_79028807的博客 894

Claude Fable 5.2 登顶:65 分、单发做游戏,和一份 $26.54 一单的账单

Anthropic 发布 Claude Fable 5.2:AA 智能指数 65 分登顶历史第一,但性能 #71、成本 #73、冗余度 #72——最强能力、最贵成本、最慢速度的矛盾体。同底层 Mythos 5.2 无护栏反而更强。文章拆解:65 分构成、官方实战验收、基准提升真伪、一条提示词一晚做出街机游戏的完整流水线(自写机器人跑完 12 关自检)、$26.54 账单与 98% 缓存折扣下的真实成本重估。

johnsong2009的博客 197

Unity 数据存储指南:本地存储、个性化设置、缓存与 Resources/StreamingAssets 的区别

在 Unity 开发中,“数据存到哪里”、“缓存能不能清”、“打包后资源有什么区别” 是新手最容易混淆、老手也经常踩坑的问题。Unity 本地存储机制(包括 Unity 放在 C 盘的内容);Unity 个性化设置(编辑器首选项 Editor Preferences);Unity 缓存的打开、关闭与清理;打包后 Resources 与 StreamingAssets 的区别;其他可自定义存储的内容汇总。为方便理解,本文配有一个可直接运行的演示工程,所有代码见文末"配套工程说明"。

zhchyun 204
上一篇: 手把手教你写三子棋游戏代码 逐步逐析过程C语言
下一篇: 移位操作符详解
刘 大 望
博客等级 码龄2年 896粉丝 61原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值