//判斷甜品是否相鄰居
public bool IsFriend(GameSweet sweet1,GameSweet sweet2)
{
return (sweet1.X == sweet2.X && Mathf.Abs(sweet1.Y - sweet2.Y) == 1) ||
(sweet1.Y == sweet2.Y && Mathf.Abs(sweet1.X - sweet2.X) == 1);
}
//交換兩個甜品
public void ExchangeSweets(GameSweet sweet1,GameSweet sweet2)
{
if (sweet1.CanMove()&&sweet2.CanMove())
{
//更新數組
sweets[sweet1.X, sweet1.Y] = sweet2;
sweets[sweet2.X, sweet2.Y] = sweet1;
//交換位置
int tempx = sweet1.X;
int tempy = sweet1.Y;
sweet1.MovedComponent.Move(sweet2.X,sweet2.Y,fillTime);
sweet2.MovedComponent.Move(tempx, tempy, fillTime);
}
}
public void PressSweet(GameSweet sweet)
{
pressedSweet = sweet;
}
public void EnterSweet(GameSweet sweet)
{
enteredSweet = sweet;
}
public void ReleaseSweet()
{
if (IsFriend(pressedSweet,enteredSweet))
{
ExchangeSweets(pressedSweet, enteredSweet);
}
}
//比對方法
public List<GameSweet> MatchSweets(GameSweet sweet,int newX,int newY)
{
if (sweet.CanColor())
{
ColorSweet.ColorType color=sweet.ColoredComponent.Color;
List<GameSweet> matchRowSweets=new List<GameSweet>(); //行
List<GameSweet> matchLineSweets=new List<GameSweet>(); //豎
List<GameSweet> finishedMatchingSweets=new List<GameSweet>(); //完成後的所有比對
//行比對
matchRowSweets.Add(sweet);
//i為0 的時候 往左周遊 為1的時候往右邊周遊
for (int i = 0; i <=1; i++)
{
//往左依次遞減 //往右依次遞加 xDistance偏移量
for (int xDistance= 1; xDistance < xColumn; xDistance++)
{
int x; //偏移之後要判斷的位置
if (i==0) //左減
{
x = newX - xDistance;
}
else //右加
{
x = newX + xDistance;
}
//排除邊界值
if (x<0||x>=xColumn)
{
break;
}
//判斷滿足條件
if (sweets[x,newY].CanColor()&& sweets[x, newY].ColoredComponent.Color==color)
{
matchRowSweets.Add(sweets[x,newY]);
}
else
{
break;
}
}
}
//行比對完畢
if (matchRowSweets.Count>=3)
{
for (int i = 0; i < matchRowSweets.Count; i++)
{
finishedMatchingSweets.Add(matchRowSweets[i]);
}
}
if (finishedMatchingSweets.Count>=3)
{
return finishedMatchingSweets;
}
//列比對
matchLineSweets.Add(sweet);
//i為0 的時候 往左周遊 為1的時候往右邊周遊
for (int i = 0; i <= 1; i++)
{
//往左依次遞減 //往右依次遞加 xDistance偏移量
for (int yDistance = 1; yDistance < yRow;yDistance++)
{
int y; //偏移之後要判斷的位置
if (i == 0) //左減
{
y = newY - yDistance;
}
else //右加
{
y = newY + yDistance;
}
//排除邊界值
if (y < 0 || y >= yRow)
{
break;
}
//判斷滿足條件
if (sweets[newX, y].CanColor() && sweets[newX, y].ColoredComponent.Color == color)
{
matchLineSweets.Add(sweets[newX, y]);
}
else
{
break;
}
}
}
//行比對完畢
if (matchLineSweets.Count >= 3)
{
for (int i = 0; i < matchLineSweets.Count; i++)
{
finishedMatchingSweets.Add(matchLineSweets[i]);
}
}
if (finishedMatchingSweets.Count >= 3)
{
return finishedMatchingSweets;
}
}
return null;
}