《挖地雷MineSweeper》源码

这次我带来挖地雷的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().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



你可能感兴趣的:(unity3D)