public void SetChangeSweet(SweetInfo sweet) { if (!isGameOver && sweet.CanClear()) { changeSweet = sweet; } }
public void ClearColor(SweetsColorType type, SweetInfo boom1 = null, SweetInfo boom2 = null) { List <SweetInfo> list = new List <SweetInfo>(); SweetInfo item; for (int x = 0; x < xColumn; x++) { for (int y = 0; y < yColumn; y++) { item = sweetsArray[x, y]; if (item.CanChangeColor() && (item.ColorComponent.SweetColorType == type || type == SweetsColorType.Any)) { list.Add(item); } } } if (boom1 != null) { list.Add(boom1); } if (boom2 != null) { list.Add(boom2); } ClearSweets(list, true); }
public bool ClearBiscuit(SweetInfo item) { bool haveClear = false; for (int friendX = item.X - 1; friendX <= item.X + 1; friendX++) { if (friendX == item.X || friendX < 0 || friendX >= xColumn) { continue; } var newItem = sweetsArray[friendX, item.Y]; if (newItem.SweetType == SweetsType.Barrier && newItem.CanClear()) { sweetsArray[friendX, item.Y] = CreateNewSweet(SweetsType.Empty, friendX, item.Y); newItem.ClearComponent.Clear(); haveClear = true; } } for (int friendY = item.Y - 1; friendY <= item.Y + 1; friendY++) { if (friendY == item.Y || friendY < 0 || friendY >= yColumn) { continue; } var newItem = sweetsArray[item.X, friendY]; if (newItem.SweetType == SweetsType.Barrier && newItem.CanClear()) { sweetsArray[item.X, friendY] = CreateNewSweet(SweetsType.Empty, item.X, friendY); newItem.ClearComponent.Clear(); haveClear = true; } } return(haveClear); }
public void SetBaseSweet(SweetInfo sweet) { if (!isGameOver && sweet.CanClear()) { baseSweet = sweet; } }
public void ReleaseSweet() { if (baseSweet && changeSweet) { baseSweet.ExchangeSweets(changeSweet); } baseSweet = changeSweet = null; }
public bool CheckSwap(SweetInfo info) { if (info.CanSwap()) { return(IsAdjacent(info)); } return(false); }
public bool ExchangeSweets(SweetInfo info) { if (CanSwap()) { return(SwapComponent.ExchangeSweets(info)); } return(false); }
public bool ExchangeSweets(SweetInfo changeInfo) { if (SweetInfo.CanMove() && changeInfo.CanMove() && CheckSwap(changeInfo) && ((SweetInfo.SweetType == SweetsType.Rainbowcandy || changeInfo.SweetType == SweetsType.Rainbowcandy) || changeInfo.ColorComponent.SweetColorType != SweetInfo.ColorComponent.SweetColorType)) { MainGameManager.Instance.ExchangeSweets(SweetInfo, changeInfo); return(true); } return(false); }
private void TimeOver() { gameTime = 0; isGameOver = true; baseSweet = changeSweet = null; if (MainUIManager) { MainUIManager.RefreshTime(gameTime); MainUIManager.TimeOver(score); } }
public bool ClearSweet(SweetInfo item) { if (item.CanClear() && !item.ClearComponent.IsClear) { sweetsArray[item.X, item.Y] = CreateNewSweet(SweetsType.Empty, item.X, item.Y); ClearBiscuit(item); item.ClearComponent.Clear(); return(true); } return(false); }
public bool ExchangeSweets(SweetInfo info1, SweetInfo info2) { sweetsArray[info1.X, info1.Y] = info2; sweetsArray[info2.X, info2.Y] = info1; if (info1.SweetType != SweetsType.Rainbowcandy && info2.SweetType != SweetsType.Rainbowcandy) { var list1 = MatchSweets(info1, info2.X, info2.Y); var list2 = MatchSweets(info2, info1.X, info1.Y); if (list1 != null || list2 != null) { int tempX = info1.X, tempY = info1.Y; info1.Move(info2.X, info2.Y, fillTime); info2.Move(tempX, tempY, fillTime); ClearSweets(list1); ClearSweets(list2); return(true); } else { sweetsArray[info1.X, info1.Y] = info1; sweetsArray[info2.X, info2.Y] = info2; return(false); } } else if (info1 != info2) { if (info1.SweetType == SweetsType.Rainbowcandy && info2.SweetType == SweetsType.Rainbowcandy) { ClearColor(SweetsColorType.Any, info1, info2); return(true); } else if (info1.SweetType == SweetsType.Rainbowcandy && info2.SweetType != SweetsType.Empty) { ClearColor(info2.ColorComponent.SweetColorType, info1); return(true); } else if (info2.SweetType == SweetsType.Rainbowcandy && info1.SweetType != SweetsType.Empty) { ClearColor(info1.ColorComponent.SweetColorType, info2); return(true); } } return(false); }
public SweetInfo CreateSpecialSweet(int count, SweetsColorType color, int _x, int _y) { SweetInfo info = null; if (count == 4) { Destroy(sweetsArray[_x, _y].gameObject); var type = UnityEngine.Random.Range(0, 1f) < 0.5f ? SweetsType.Row_Clear : SweetsType.Column_Clear; info = sweetsArray[_x, _y] = CreateNewSweet(type, _x, _y); info.SetColor(color); } else if (count >= 5) { Destroy(sweetsArray[_x, _y].gameObject); sweetsArray[_x, _y] = CreateNewSweet(SweetsType.Rainbowcandy, _x, _y); } return(info); }
private void Awake() { info = GetComponent <SweetInfo>(); }
public void Init(SweetInfo _sweetInfo) { SweetInfo = _sweetInfo; }
private bool IsAdjacent(SweetInfo info) { return((SweetInfo.X == info.X && Mathf.Abs(SweetInfo.Y - info.Y) == 1) || (SweetInfo.Y == info.Y && Mathf.Abs(SweetInfo.X - info.X) == 1)); }
public List <SweetInfo> MatchSweets(SweetInfo sweet, int newX, int newY) { if (sweet.CanChangeColor()) { SweetsColorType color = sweet.ColorComponent.SweetColorType; List <SweetInfo> matchRowSweets = new List <SweetInfo>(); List <SweetInfo> matchLineSweets = new List <SweetInfo>(); List <SweetInfo> finisedMatchSweets = new List <SweetInfo>(); for (int xDir = -1; xDir <= 1; xDir++) { if (xDir == 0) { continue; } for (int xDistance = 1; xDistance < xColumn; xDistance++) { int posX = newX + (xDir * xDistance); if (posX < 0 || posX >= xColumn) { break; } if (sweetsArray[posX, newY].CanChangeColor() && sweetsArray[posX, newY].ColorComponent.SweetColorType == color) { matchRowSweets.Add(sweetsArray[posX, newY]); } else { break; } } } for (int yDir = -1; yDir <= 1; yDir++) { if (yDir == 0) { continue; } for (int yDistance = 1; yDistance < yColumn; yDistance++) { int posY = newY + (yDir * yDistance); if (posY < 0 || posY >= yColumn) { break; } if (sweetsArray[newX, posY].CanChangeColor() && sweetsArray[newX, posY].ColorComponent.SweetColorType == color) { matchLineSweets.Add(sweetsArray[newX, posY]); } else { break; } } } if (matchRowSweets.Count >= 2) { finisedMatchSweets.AddRange(matchRowSweets); } if (matchLineSweets.Count >= 2) { finisedMatchSweets.AddRange(matchLineSweets); } finisedMatchSweets.Add(sweet); if (finisedMatchSweets.Count >= 3) { return(finisedMatchSweets); } } return(null); }
/// <summary> /// 部分填充的办法 /// </summary> public bool Fill() { bool filledNotFinished = false;//判断本次填充是否完成 for (int y = yColumn - 2; y >= 0; y--) { for (int x = 0; x < xColumn; x++) { var sweet = sweetsArray[x, y]; //得到当前元素位置 if (sweet.CanMove()) //如果无法移动则无法往下填充 { var sweetDown = sweetsArray[x, y + 1]; if (sweetDown.SweetType == SweetsType.Empty)//垂直填充 { Destroy(sweetDown.gameObject); sweet.Move(x, y + 1, fillTime); sweetsArray[x, y + 1] = sweet; sweetsArray[x, y] = CreateNewSweet(SweetsType.Empty, x, y); filledNotFinished = true; } else//斜向填充 { for (int _downX = -1; _downX <= 1; _downX++) { if (_downX != 0) { int downX = x + _downX; if (downX >= 0 && downX < xColumn) { SweetInfo downSweet = sweetsArray[downX, y + 1]; if (downSweet.SweetType == SweetsType.Empty) { bool canfill = true;//用来判断垂直填充是否可以满足填充要求 for (int aboveY = y; aboveY >= 0; aboveY--) { SweetInfo sweetAbove = sweetsArray[downX, aboveY]; if (sweetAbove.CanMove()) { break; } else if (sweetAbove.SweetType != SweetsType.Empty) { canfill = false; break; } } if (!canfill) { Destroy(downSweet.gameObject); sweet.Move(downX, y + 1, fillTime); sweetsArray[downX, y + 1] = sweet; sweetsArray[x, y] = CreateNewSweet(SweetsType.Empty, x, y); break; } } } } } } } } } for (int x = 0; x < xColumn; x++) { var sweet = sweetsArray[x, 0];//得到当前元素位置 if (sweet.SweetType == SweetsType.Empty) { Destroy(sweet.gameObject); sweetsArray[x, 0] = CreateNewSweet(SweetsType.Normal, x, 0, SweetsSpawnPos.Up); filledNotFinished = true; } } //filledNotFinished = !filledNotFinished? CheckAll():true; return(filledNotFinished); }