public void ChoseAITurn() { GameController.GameFigure aiFigure = GameController.Instance.PlayerFigure == GameController.GameFigure.Circle ? GameController.GameFigure.Cross : GameController.GameFigure.Circle; switch (GameController.Instance.GameDifficulty) { case GameController.Difficulty.Easy: DoMove(aiFigure, GetRandomPosition()); break; case GameController.Difficulty.Noraml: if (Random.Range(0f, 1f) > .5f) { DoMove(aiFigure, GetBestPosition()); } else { DoMove(aiFigure, GetRandomPosition()); } break; case GameController.Difficulty.Hard: DoMove(aiFigure, GetBestPosition()); break; } if (CheckGameOver()) { return; } ; StateController.Instance.UserTurnState(); }
public Cell(int x, int y, Transform center, GameController.GameFigure figure = GameController.GameFigure.None) { X = x; Y = y; Center = center; Figure = figure; }
private void DoMove(GameController.GameFigure figure, Cell cell) { GameObject prefab = figure == GameController.GameFigure.Circle ? CirclePrefab : CrossPrefab; GameObject obj = Instantiate(prefab, cell.Center) as GameObject; obj.transform.SetParent(cell.Center); cell.Figure = figure; (cell.Center.GetComponent <SpriteRenderer>() as SpriteRenderer).enabled = false; }
private GameController.GameResult CheckWin(Cell[] field) { GameController.GameFigure figure = GameController.GameFigure.None; if (field[0].Figure == field[1].Figure && field[1].Figure == field[2].Figure) // 1 row { figure = field[0].Figure; } else if (field[3].Figure == field[4].Figure && field[4].Figure == field[5].Figure) // 2 row { figure = field[3].Figure; } else if (field[6].Figure == field[7].Figure && field[7].Figure == field[8].Figure) // 3 row { figure = field[6].Figure; } else if (field[0].Figure == field[3].Figure && field[3].Figure == field[6].Figure) // 1 col { figure = field[0].Figure; } else if (field[1].Figure == field[4].Figure && field[4].Figure == field[7].Figure) // 2 col { figure = field[1].Figure; } else if (field[2].Figure == field[5].Figure && field[5].Figure == field[8].Figure) // 3 col { figure = field[2].Figure; } else if (field[0].Figure == field[4].Figure && field[4].Figure == field[8].Figure) // lt up -> rt dw { figure = field[0].Figure; } else if (field[2].Figure == field[4].Figure && field[4].Figure == field[6].Figure) // rt up -> lf dw { figure = field[2].Figure; } if (figure != GameController.GameFigure.None) { if (figure == GameController.Instance.PlayerFigure) { return(GameController.GameResult.Win); } else { return(GameController.GameResult.Lose); } } if (GetOpenPositions(field).Count == 0) { return(GameController.GameResult.Draw); } return(GameController.GameResult.None); }
public void Reset() { Figure = GameController.GameFigure.None; Transform[] children = Center.GetComponentsInChildren <Transform>(true); foreach (Transform child in children) { if (Center.transform == child.transform) { continue; } DestroyImmediate(child.gameObject); } }
public int NextStep(Cell[] field, Cell start, GameController.GameFigure figeru) { field[start.X * 3 + start.Y].Figure = figeru; GameController.GameResult result = CheckWin(field); switch (result) { case GameController.GameResult.Win: return(-10); case GameController.GameResult.Draw: return(5); case GameController.GameResult.Lose: return(10); case GameController.GameResult.None: GameController.GameFigure enemyFigure = figeru == GameController.GameFigure.Circle ? GameController.GameFigure.Cross : GameController.GameFigure.Circle; List <Cell> openPos = GetOpenPositions(field); int[] scores = new int[openPos.Count]; for (int i = 1; i < openPos.Count; i++) { scores[i] = NextStep(Cell.DeepClone(field), openPos[i], enemyFigure); } int sumScore = 0; foreach (int score in scores) { sumScore += score; } return(sumScore); default: return(0); } }