public void OnGridClicked(Grids g) { if (_currentChess == null && g.chess != null) { Chess c = g.chess; _currentChess = c; print(_currentChess?.grid.transform.name); _currentChess.grid.SetColor(Color.green); Cor cor = GetXY(_currentChess.grid); Cor left = new Cor(cor); left.x -= 2; if (HasGrid(left) && !HasChess(left)) { Cor mid = new Cor(left); mid.x++; if (HasGrid(mid) && HasChess(mid)) { moveableGrids.Add(allGrids[left.x, left.y]); } } Cor right = new Cor(cor); right.x += 2; if (HasGrid(right) && !HasChess(right)) { Cor mid = new Cor(right); mid.x--; if (HasGrid(mid) && HasChess(mid)) { moveableGrids.Add(allGrids[right.x, right.y]); } } Cor up = new Cor(cor); up.y += 2; if (HasGrid(up) && !HasChess(up)) { Cor mid = new Cor(up); mid.y--; if (HasGrid(mid) && HasChess(mid)) { moveableGrids.Add(allGrids[up.x, up.y]); } } Cor down = new Cor(cor); down.y -= 2; if (HasGrid(down) && !HasChess(down)) { Cor mid = new Cor(down); mid.y++; if (HasGrid(mid) && HasChess(mid)) { moveableGrids.Add(allGrids[down.x, down.y]); } } foreach (var v in moveableGrids) { v.SetColor(Color.green); } } else if (_currentChess == g.chess) { g.SetColor(Color.white); foreach (var v in moveableGrids) { v.SetColor(Color.white); } moveableGrids.Clear(); _currentChess = null; } else if (_currentChess != null && moveableGrids.Contains(g)) { Cor mid = new Cor(); Cor end = GetXY(g); Cor start = GetXY(_currentChess.grid); mid.SetMid(start, end); _currentChess.grid.SetColor(Color.white); _currentChess.MoveToGrid(g, Half, Finish); _currentChess.grid.SetColor(Color.white); foreach (var v in moveableGrids) { v.SetColor(Color.white); } moveableGrids.Clear(); _currentChess = null; void Half() { Destroy(allGrids[mid.x, mid.y].chess.gameObject); } void Finish() { if (IsWin()) { gameObject.SetActive(false); panel_win.SetActive(true); btn_next.onClick.AddListener(() => SceneManager.LoadScene(nextLevelIndex)); } } } }