Exemple #1
0
    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();
    }
Exemple #2
0
 public Cell(int x, int y, Transform center, GameController.GameFigure figure = GameController.GameFigure.None)
 {
     X      = x;
     Y      = y;
     Center = center;
     Figure = figure;
 }
Exemple #3
0
    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;
    }
Exemple #4
0
    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);
    }
Exemple #5
0
 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);
     }
 }
Exemple #6
0
    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);
        }
    }