/// <summary> /// 交换水果位置 /// </summary> /// <param name="fruit1"></param> /// <param name="fruit2"></param> void SwapFruitPosition(GameObject fruit1, GameObject fruit2) { FruitObj tmp1 = fruit1.GetComponent <FruitObj>(); FruitObj tmp2 = fruit2.GetComponent <FruitObj>(); Vector2 tmp = tmp1.Fruit.FruitPosition; tmp1.Fruit.FruitPosition = tmp2.Fruit.FruitPosition; tmp2.Fruit.FruitPosition = tmp; GameObject Objtmp = FruitSpawner.spawn.FruitGrid[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y]; FruitSpawner.spawn.FruitGrid[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y] = fruit2; FruitSpawner.spawn.FruitGrid[(int)tmp2.Fruit.FruitPosition.x, (int)tmp2.Fruit.FruitPosition.y ] = Objtmp; FruitObj scriptObj = tmp1; FruitSpawner.spawn.FruitGridScript[(int)tmp2.Fruit.FruitPosition.x, (int)tmp2.Fruit.FruitPosition.y] = tmp2; FruitSpawner.spawn.FruitGridScript[(int)tmp1.Fruit.FruitPosition.x, (int)tmp1.Fruit.FruitPosition.y] = scriptObj; if (tmp1.Fruit.FruitType == 99 || tmp2.Fruit.FruitType == 99) { WinChecker(); } }
public void DestroyRandom() { dropFruit(); if (PlayerInfo.MODE == 1) { if (!IsStar) { List <CellObj> listeff = getListCellEffect(); if (listeff.Count > 0) { CellObj tmp = listeff[Random.Range(0, listeff.Count)]; tmp.RemoveEffect(); EffectSpawner.effect.Thunder(GridManager.grid.GridCell[(int)tmp.Cell.CellPosition.x, (int)tmp.Cell.CellPosition.y].transform.position); } else { destroyNotEmpty(); } } else { Vector2 vtmp = posUnderStar(); FruitObj tmp = FruitSpawner.spawn.FruitGridScript[(int)vtmp.x, (int)vtmp.y]; if (tmp != null && tmp != FruitStar) { tmp.Destroy(); EffectSpawner.effect.Thunder(GridManager.grid.GridCell[(int)tmp.Fruit.FruitPosition.x, (int)tmp.Fruit.FruitPosition.y].transform.position); } } } }
/// <summary> /// 判断当前地图是否还有可以移动的格子 /// </summary> /// <returns></returns> public bool IsNoMoreMove() { StopSuggesttionAnim(); AvaiableMove = new Vector2[2]; AvailableObj = new FruitObj[2]; for (int x = 0; x < 7; x++) { for (int y = 0; y < 9; y++) { if (FruitSpawner.spawn.FruitGridScript[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 0) { fruit = FruitSpawner.spawn.FruitGridScript[x, y]; FruitObj obj = MoveChecker(x, y, fruit); if (obj != null) { AvaiableMove[0] = fruit.Fruit.FruitPosition; AvailableObj[0] = FruitSpawner.spawn.FruitGridScript[(int)AvaiableMove[0].x, (int)AvaiableMove[0].y]; AvaiableMove[1] = obj.Fruit.FruitPosition; AvailableObj[1] = FruitSpawner.spawn.FruitGridScript[(int)AvaiableMove[1].x, (int)AvaiableMove[1].y]; isNoMove = false; return(true); } } } } isNoMove = true; return(false); }
public void RuleChecker(GameObject obj1, GameObject obj2) { FruitObj fruit1 = obj1.GetComponent <FruitObj>(); FruitObj fruit2 = obj2.GetComponent <FruitObj>(); List <FruitObj> fruitObjs1 = Ulti.ListPlus(fruit1.GetCollumn(fruit2.Fruit.FruitPosition, fruit1.Fruit.FruitType, null), fruit1.GetRow(fruit2.Fruit.FruitPosition, fruit1.Fruit.FruitType, null), fruit1); List <FruitObj> fruitObjs2 = Ulti.ListPlus(fruit2.GetCollumn(fruit1.Fruit.FruitPosition, fruit2.Fruit.FruitType, null), fruit2.GetRow(fruit1.Fruit.FruitPosition, fruit2.Fruit.FruitType, null), fruit2); if (fruit1.Fruit.FruitType == 99 || fruit2.Fruit.FruitType == 99) { if (fruit1.Fruit.FruitType == 8 || fruit2.Fruit.FruitType == 8) { fruit1.SetBackAnimation(obj2); fruit2.SetBackAnimation(obj1); return; } } if (fruitObjs1.Count >= 3 || fruitObjs2.Count >= 3 || fruit1.Fruit.FruitType == 8 || fruit2.Fruit.FruitType == 8) { Ulti.MoveTo(obj1, obj2.transform.localPosition, 0.2f); Ulti.MoveTo(obj2, obj1.transform.localPosition, 0.2f); SwapFruitPosition(obj1, obj2); FruitProcess(fruitObjs1, fruitObjs2, obj1, obj2); } else { fruit1.SetBackAnimation(obj2); fruit2.SetBackAnimation(obj1); } }
public void FruitMapCreate(int[,] Map) { FruitGrid = new GameObject[7, 9]; FruitGridScript = new FruitObj[7, 9]; for (int x = 0; x < 7; x++) { int s = 0; for (int y = 0; y < 9; y++) { if (GridManager.grid.GridCellObj[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 4) { s = y; } } for (int y = s; y < 9; y++) { if (Map[x, y] > 0) { G_FruitInstaniate(x, y); } } } while (!Supporter.supporter.IsNoMoreMove() && index < 20) { Debug.Log("Hello"); index++; RemakeGrid(); FruitMapCreate(Map); } SpawnController.isSpawned = true; }
public GameObject FruitInstantiate(int x, int y) { ObjTmp = Instantiate(FruitObject) as GameObject; FruitScript = ObjTmp.GetComponent <FruitObj>(); ObjTmp.transform.SetParent(FruitParent.transform, false); ObjTmp.transform.localPosition = new Vector3(ObjTmp.transform.localPosition.x + x * BaseDistance, ObjTmp.transform.localPosition.y + y * BaseDistance); FruitGrid[x, y] = ObjTmp; FruitGridScript[x, y] = FruitScript; int r = 0; if (PlayerInfo.MODE == 1) { r = Random.Range(0, 6); } else { r = Random.Range(0, 7); } FruitScript.Render.sprite = FruitSprite[r]; FruitScript.Fruit.FruitPosition = new Vector2(x, y); FruitScript.Fruit.FruitType = r; return(ObjTmp); }
/// <summary> /// 下落动画 /// </summary> /// <param name="obj">下落的物体</param> /// <param name="NewPos">下落的目标位置</param> /// <param name="speed">下落速度</param> /// <returns></returns> public static IEnumerator IEDrop(GameObject obj, Vector2 NewPos, float speed) { FruitObj script = obj.GetComponent <FruitObj>(); Collider2D coll = obj.GetComponent <Collider2D>(); if (obj != null) { Transform _tranform = obj.transform; coll.enabled = false; script.isMove = true; while (_tranform != null && _tranform.localPosition.y - NewPos.y > 0.1f) { _tranform.localPosition -= new Vector3(0, Time.smoothDeltaTime * speed); yield return(null); } if (_tranform != null) { _tranform.localPosition = new Vector3(NewPos.x, NewPos.y); script.Bounce(); script.RuleChecker(); yield return(new WaitForSeconds(0.2f)); if (coll != null) { coll.enabled = true; script.isMove = false; } } } }
/// <summary> /// 获取同行相连 /// </summary> /// <param name="Pos"></param> /// <param name="type"></param> /// <param name="bonus"></param> /// <returns></returns> public List <FruitObj> GetRow(Vector2 Pos, int type, FruitObj bonus) { List <FruitObj> tmp1 = GetLeft(Pos, type); List <FruitObj> tmp2 = GetRight(Pos, type); if (tmp1.Count + tmp2.Count > 1) { return(Ulti.ListPlus(tmp1, tmp2, bonus)); } else { return(new List <FruitObj>()); } }
GameObject RFruitInstantiate(int x, int y) { ObjTmp = Instantiate(FruitObject) as GameObject; FruitScript = ObjTmp.GetComponent <FruitObj>(); ObjTmp.transform.SetParent(FruitParent.transform, false); ObjTmp.transform.localPosition = new Vector3(x, y); ObjTmp.transform.GetChild(0).gameObject.transform.localScale = new Vector3(0, 0, 1); FruitGrid[x, y] = ObjTmp; FruitGridScript[x, y] = FruitScript; int r = RandomFruit(x, y); FruitScript.Render.sprite = FruitSprite[r]; FruitScript.Fruit.FruitPosition = new Vector2(x, y); FruitScript.Fruit.FruitType = r; return(ObjTmp); }
public static List <FruitObj> ListPlus(List <FruitObj> l1, List <FruitObj> l2, FruitObj bonus) { List <FruitObj> tmp = new List <FruitObj>(); for (int i = l1.Count - 1; i >= 0; i--) { tmp.Add(l1[i]); } if (bonus != null) { tmp.Add(bonus); } for (int i = 0; i < l2.Count; i++) { tmp.Add(l2[i]); } return(tmp); }
IEnumerator DestroyType(int type, Vector3 pos) { NoSelector.SetActive(true); dropFruit(); for (int x = 0; x < 7; x++) { for (int y = 0; y < 9; y++) { FruitObj tmp = FruitSpawner.spawn.FruitGridScript[x, y]; if (tmp != null && tmp.Fruit.FruitType == type) { //生成特效 tmp.Destroy(); } } } yield return(new WaitForSeconds(0.2f)); NoSelector.SetActive(false); }
/// <summary> /// 返回可移动的物体 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <param name="fruit"></param> /// <returns></returns> private FruitObj MoveChecker(int x, int y, FruitObj fruit) { vtmpList = getListPos(x, y); foreach (Vector2 item in vtmpList) { if (FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y] != null && FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y].Fruit.FruitType == 8) { return(FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y]); } else { List <FruitObj> objs = Ulti.ListPlus(fruit.GetCollumn(item, fruit.Fruit.FruitType, null), fruit.GetRow(item, fruit.Fruit.FruitType, null), fruit); if (objs.Count >= 3) { return(FruitSpawner.spawn.FruitGridScript[(int)item.x, (int)item.y]); } } } return(null); }
public GameObject SpawnFruitPower(int type, int power, Vector3 pos) { GameObject tmp; int x = (int)pos.x; int y = (int)pos.y; if (FruitGrid[x, y] != null) { Destroy(FruitGrid[x, y]); } if (type == 8) { tmp = Instantiate(FruitColor) as GameObject; } else { tmp = Instantiate(FruitObject) as GameObject; } FruitScript = tmp.GetComponent <FruitObj>(); FruitScript.Render.enabled = true; tmp.transform.SetParent(FruitParent.transform, false); tmp.transform.localPosition = new Vector3(x, y, pos.z); FruitGrid[x, y] = tmp; FruitGridScript[x, y] = FruitScript; if (type != 8) { FruitScript.Render.sprite = FruitSprite[type]; } FruitScript.Fruit.FruitPosition = new Vector2(x, y); FruitScript.Fruit.FruitType = type; FruitScript.Fruit.FruitPower = power; tmp.GetComponent <Collider2D>().enabled = false; if (power == (int)GameController.Power.BOOM) { EffectSpawner.effect.Enchant(tmp.transform.GetChild(0).gameObject); } return(tmp); }
public void SpawnStar(Vector2 pos) { if (FruitGridScript[(int)pos.x, (int)pos.y] != null) { Destroy(FruitGrid[(int)pos.x, (int)pos.y]); } GameObject tmp = Instantiate(Star) as GameObject; tmp.name = "FruitStar"; tmp.transform.SetParent(FruitParent.transform, false); tmp.transform.localPosition = new Vector3(pos.x, pos.y); tmp.transform.GetChild(0).gameObject.SetActive(false); FruitScript = tmp.GetComponent <FruitObj>(); FruitScript.Fruit.FruitPosition = pos; FruitGridScript[(int)pos.x, (int)pos.y] = FruitScript; FruitGrid[(int)pos.x, (int)pos.y] = tmp; GameController.gameController.FruitStar = FruitScript; StarEffect.SetActive(true); }
/// <summary> /// 随机奖励 /// </summary> public void AddBonusPower() { int dem = 0; while (true) { dem++; if (dem >= 63) { return; } int x = Random.Range(0, 7); int y = Random.Range(0, 9); FruitObj tmp = FruitSpawner.spawn.FruitGridScript[x, y]; if (tmp != null && tmp.Fruit.FruitType != 8 && tmp.Fruit.fruitPower == 0 && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 0) { int r = Random.Range(2, 4); tmp.Fruit.FruitPower = r; EffectSpawner.effect.ThunderRow(FruitSpawner.spawn.FruitGrid[x, y], r); return; } } }
void Spawn() { int[] h = new int[7]; for (int x = 0; x < 7; x++) { int s = 0; for (int y = 0; y < 9; y++) { if (GridManager.grid.GridCellObj[x, y] != null && GridManager.grid.GridCellObj[x, y].Cell.CellEffect == 4) { s = y + 1; } } for (int y = s; y < 9; y++) { if (GameController.gameController.GameState == (int)Timer.GameState.PLAYING) { if (GridManager.grid.GridCellObj[x, y] != null && FruitSpawner.spawn.FruitGridScript[x, y] == null) { GameObject tmp = FruitSpawner.spawn.FruitInstantiate(x, y); if (PlayerInfo.MODE == 1 && Random.value > 0.99f) { tmp.GetComponent <FruitObj>().Fruit.FruitType = 4; } tmp.transform.localPosition = new Vector3(tmp.transform.localPosition.x, 10 + h[x]); h[x]++; StartCoroutine(Ulti.IEDrop(tmp, new Vector2(x, y), GameController.DROP_SPEED)); FruitObj script = tmp.GetComponent <FruitObj>(); script.Render.enabled = true; } } } } StartCoroutine(checkNoMoreMove()); }