private bool MatchColumnSweet(Vector2Int position) { int bottomY = position.y - 1; if (position.y > 0) { while (true) { BaseSweet bottomBaseSweet = allSweet[position.x, bottomY].GetComponent <BaseSweet>(); if (bottomBaseSweet.SweetType == SweetCreator.SweetType.EMPTY) { break; } NormalSweet bottomSweet = allSweet[position.x, bottomY].GetComponent <NormalSweet>(); if (currentSweet.SweetType != bottomSweet.SweetType) { break; } if (--bottomY == -1) { break; } } } int topY = position.y + 1; if (position.y < row - 1) { while (true) { BaseSweet topBaseSweet = allSweet[position.x, topY].GetComponent <BaseSweet>(); if (topBaseSweet.SweetType == SweetCreator.SweetType.EMPTY) { break; } NormalSweet topSweet = allSweet[position.x, topY].GetComponent <NormalSweet>(); if (currentSweet.SweetType != topSweet.SweetType) { break; } if (++topY == row) { break; } } } if (topY - bottomY > 3) { // 消除列 for (int i = bottomY + 1; i < topY; i++) { GameObject.Destroy(allSweet[position.x, i]); allSweet[position.x, i] = SweetCreator.Instance.CreateEmptySweet(new Vector3(position.x, i, 0)); } return(true); } return(false); }
public GameObject CreateEmptySweet(Vector3 position) { GameObject sweet = Instantiate(sweetPrefabDict[SweetType.EMPTY], position, Quaternion.identity); BaseSweet baseSweet = sweet.GetComponent <BaseSweet>(); baseSweet.SweetType = SweetType.EMPTY; return(sweet); }
private void FillAllEmptySweet() { for (int x = 0; x < column; x++) { for (int y = 0; y < row; y++) { BaseSweet baseSweet = allSweet[x, y].GetComponent <BaseSweet>(); if (baseSweet.SweetType == SweetCreator.SweetType.EMPTY) { FillEmptySweet(x, y); } } } }
public GameObject CreateRandomSweet(Vector3 position) { //int type = Random.Range(0, 6); //if (type == 1) { GameObject sweet = Instantiate(sweetPrefabDict[SweetType.NORMAL], position, Quaternion.identity); BaseSweet baseSweet = sweet.GetComponent <BaseSweet>(); baseSweet.SweetType = SweetType.NORMAL; NormalSweet normalSweet = sweet.GetComponent <NormalSweet>(); normalSweet.SetRandomSweetSprite(); return(sweet); } //else //{ // return Instantiate(sweetPrefabDict[SweetType.NORMAL], position, Quaternion.identity); //} }
private void FillEmptySweet(int currentX, int currentY) { for (int y = currentY + 1; y < row; y++) { BaseSweet baseSweet = allSweet[currentX, y].GetComponent <BaseSweet>(); if (baseSweet.SweetType != SweetCreator.SweetType.EMPTY) { Debug.Log("Not Empty: " + baseSweet.SweetType); Vector2Int current = Vector2Int.zero; current.Set(currentX, currentY); Vector2Int notEmpty = Vector2Int.zero; notEmpty.Set(currentX, y); SwapSweet(current, notEmpty); break; } } }
private void MatchAllSweet() { for (int x = 0; x < column; x++) { for (int y = 0; y < row; y++) { BaseSweet baseSweet = allSweet[x, y].GetComponent <BaseSweet>(); if (baseSweet.SweetType != SweetCreator.SweetType.EMPTY) { Vector2Int position = Vector2Int.zero; position.Set(x, y); MatchRowSweet(position); MatchColumnSweet(position); } } } //FillAllEmptySweet(); }
private bool MatchRowSweet(Vector2Int position) { currentSweet = allSweet[position.x, position.y].GetComponent <NormalSweet>(); int leftX = position.x - 1; if (position.x > 0) { while (true) { BaseSweet leftBaseSweet = allSweet[leftX, position.y].GetComponent <BaseSweet>(); if (leftBaseSweet.SweetType == SweetCreator.SweetType.EMPTY) { break; } NormalSweet leftSweet = allSweet[leftX, position.y].GetComponent <NormalSweet>(); if (currentSweet.SweetType != leftSweet.SweetType) { break; } if (--leftX == -1) { break; } } } int rightX = position.x + 1; if (position.x < column - 1) { while (true) { BaseSweet rightBaseSweet = allSweet[rightX, position.y].GetComponent <BaseSweet>(); if (rightBaseSweet.SweetType == SweetCreator.SweetType.EMPTY) { break; } NormalSweet rightSweet = allSweet[rightX, position.y].GetComponent <NormalSweet>(); if (currentSweet.SweetType != rightSweet.SweetType) { break; } if (++rightX == column) { break; } } } if (rightX - leftX > 3) { // 消除行 Debug.Log("消除行"); for (int i = leftX + 1; i < rightX; i++) { GameObject.Destroy(allSweet[i, position.y]); allSweet[i, position.y] = SweetCreator.Instance.CreateEmptySweet(new Vector3(i, position.y, 0)); } return(true); } return(false); }