这次我带来挖地雷的Unity3d源码。
原始地址:https://noobtuts.com/unity/2d-minesweeper-game
开始学习。上面的是一个外文站点,我把一些关键的单词提取出来。
Flood Fill algorithm 洪水填满算法
Recusion(a function calling itself) 递归
2 dimensional array (also known as matrix or table) 二维数组也叫做矩阵或者表格
步骤1:
创建2D游戏,取名MiineSweeper,选中MainCamera设置背景色为黑。position 为4.5,6,-10,size 20这里设置20。
注意:设置position Z轴要设置为-10 这样摄像机才能在正确的位置上。
步骤2:
将default图片导入的Assets中,添加2D box collider然后duplicate 复制出来,然后修改Position让它称为了一个9列12行的扫雷区域。
步骤3:
然后将所有的empty0-8的图片 和地雷mine放入到资源Asserts中。这些资源都是每块占16像素的,这些都要设置下。我就不强调了。
步骤4:
在default的图片全部添加一个script C#代码,取的名字叫Element。我在源码中详细的说明每个方法的作用大家可以自己看看。我这里就不详细的说代码啦。
步骤5:
Element的逻辑会于一个我现在创建的Grid 工具类做交互。Grid做了大部分复杂逻辑,如flood fill 算法,写到这里已经完了,具体逻辑代码中写了。
MineSweeper扫雷的untiy3d主要逻辑:
创建default图标,组成了一个行10 竖13的结构,和二维数组一样,每一个sprite 中的script class 对象保存在二维数组中,保存在grid类中,通过遍历,查询,和flood fill算法来切换sprite。
主要方法是 Sprite spr; GetComponent<SpriteRenderer>().sprite = spr;
flood fill算法分析
FloodFill算法 , 又叫洪水填充算法。FloodFill算法的运用非常广泛,其中突出的是画图的“倒色”。
FloodFill的原理十分简单,就是把一个点x的所有相邻的点都涂上x点的颜色,一直填充下去,直到这个区域内所有的点都被填充完为止。
void FloodFill(Point p,int color)
{
bo[p.x][p.y] = 0;
p . color = color;
int x , y;
for(int i=0;i<4;i++)//做四连
{
x = p.x + f1[i];
y = p.y + f2[i];
if(OK(x, y) && bo[x][y])//符合情况
{
FloodFill(Point(x,y,p.color) , color );
}
}
总结:
这个项目让我学习了洪水填充算法,和sprite替换。了解了C #二维数组。还有即使更熟悉了Unity3d开发2d的工具
源码下载地址:https://github.com/13352928922/MineSweeper