//创建一个甜品 private GameSweet CreateNewSweet(int x, int y, SweetsType type) { GameObject newObj = Instantiate(sweetPrefabDict[type], CorrectPosition(x, y), Quaternion.identity); newObj.transform.SetParent(transform); GameSweet gameSweet = newObj.GetComponent <GameSweet>(); gameSweet.Init(x, y, this, type); //如果是普通类型就创建一个随机的颜色的甜品 if (type == SweetsType.NORMAL) { gameSweet.ColorComponent.SetColor((ColorSweet.ColorType)Random.Range(0, gameSweet.ColorComponent.numColors)); } //数组赋值 sweets[x, y] = gameSweet; return(gameSweet); }
//分步填充 private bool Fill() { bool filledNotFinished = false;//这个部分布尔值是用来判断本次填充是否完成。 for (int y = yRow - 2; y >= 0; y--) { for (int x = 0; x < xColumn; x++) { GameSweet sweet = sweets[x, y]; if (sweet.CanMove())//如果无法移动,则无法往下填充 { GameSweet sweetBelow = sweets[x, y + 1]; //垂直填充 if (sweetBelow.Type == SweetsType.EMPTY) { sweet.MovedComponent.Move(x, y + 1, fillTime); sweets[x, y + 1] = sweet; Destroy(sweetBelow.gameObject); //填充上面哪行 CreateNewSweet(x, y, SweetsType.EMPTY); filledNotFinished = true; } else { //斜方向填充 //如果不可以移动,就查看坐下和右下是否可以移动 for (int i = -1; i <= 1; i++) { int downX = x + i; if (i != 0) { if (downX >= 0 && downX < xColumn) { GameSweet downSweet = sweets[downX, y + 1]; if (downSweet.Type == SweetsType.EMPTY) { bool canFill = true; for (int aboveY = y; aboveY >= 0; aboveY--) { GameSweet sweetAbove = sweets[downX, aboveY]; if (sweetAbove.CanMove()) { break; } else if (!sweetAbove.CanMove() && sweetAbove.Type != SweetsType.EMPTY) { canFill = false; break; } } if (!canFill) { Destroy(downSweet.gameObject); sweet.MovedComponent.Move(downX, y + 1, fillTime); sweets[downX, y + 1] = sweet; CreateNewSweet(x, y, SweetsType.EMPTY); filledNotFinished = true; break; } } } } } } } if (y == 0 && sweet.Type == SweetsType.EMPTY) { GameObject newSweetObject = Instantiate(sweetPrefabDict[SweetsType.NORMAL], CorrectPosition(x, y - 1), Quaternion.identity); newSweetObject.transform.SetParent(transform); GameSweet sweetComponent = newSweetObject.GetComponent <GameSweet>(); sweetComponent.Init(x, y - 1, this, SweetsType.NORMAL); sweetComponent.MovedComponent.Move(x, y, fillTime); sweetComponent.ColorComponent.SetColor((ColorSweet.ColorType)Random.Range(0, sweetComponent.ColorComponent.numColors)); sweets[x, y] = sweetComponent; //销毁空物体 Destroy(sweet.gameObject); filledNotFinished = true; } } } return(filledNotFinished); }