//分步填充
public bool Fill()
{
//从倒数第二行从下往上开始遍历
bool filledFinshed = false; //判断本次填充是否完成
for (int y = yRow-2; y >=0 ; y--)
{
for (int x = 0; x < xColumn; x++)
{
GameSweet gameSweet=sweets[x, y]; //得到当前元素位置的甜品对象
if (gameSweet.CanMove()) //如果无法移动则无法往下填充
{
//它的下方是不是为空
GameSweet sweetLower= sweets[x, y+1];
if (sweetLower.Type==SweetsType.EMPTY) //垂直填充
{
//Destroy(sweetLower.gameObject);
//移动到下方
gameSweet.MovedComponet.Move(x,y+1);
sweets[x, y + 1] = gameSweet;
//创建新的置空
CreateNewSweet(x, y, SweetsType.EMPTY);
filledFinshed = true;
}
}
}
}
//最上排的特殊情况
for (int x = 0; x <xColumn; x++)
{
GameSweet sweet=sweets[x, 0];
if (sweet.Type==SweetsType.EMPTY)
{
//如果为空 在它头顶正上方生成一个普通的糖果类型 也就是在-1行生成一个甜品
GameObject newSweet=GameObject.Instantiate(sweetPrefabDic[SweetsType.NORMAL], CorrectPostion(x,-1), Quaternion.identity);
newSweet.transform.parent=transform;
//把它头顶上方-1 的预制体赋给它
sweets[x,0] = newSweet.GetComponent<GameSweet>();
sweets[x,0].Init(x,-1,SweetsType.NORMAL,this);
//从-1行移动到0行
sweets[x,0].MovedComponet.Move(x,0);
//产生随机的颜色
sweets[x,0].ColoredComponent.SetColor((ColorSweet.ColorType)Random.Range(0, sweets[x, 0].ColoredComponent.NumColors));
filledFinshed = true;
}
}
return filledFinshed;
}
01.消消乐填充的算法
最新推荐文章于 2024-04-23 23:11:55 发布