Пример #1
0
 private void PlayDebugGame()
 {
     GameStateMachine.DebugSettings settings = GenerateDebugGame();
     FindObjectOfType <GameStateMachine>().PlayDebugGame(settings);
 }
Пример #2
0
    private GameStateMachine.DebugSettings GenerateDebugGame()
    {
        GameStateMachine.DebugSettings settings = new GameStateMachine.DebugSettings();
        settings.playBackSpeed = playBackSpeed;

        int        boardSize    = gameBoard.BoardSize;
        List <int> winningMoves = new List <int>();

        switch ((WIN_TYPES)selectedWinType)
        {
        case WIN_TYPES.HORIZONTAL:
        {
            for (int i = 0; i < boardSize; i++)
            {
                winningMoves.Add(i + (selectedWinLine * boardSize));
            }
            break;
        }

        case WIN_TYPES.VERTICAL:
        {
            for (int i = 0; i < boardSize; i++)
            {
                winningMoves.Add(selectedWinLine + (i * boardSize));
            }
            break;
        }

        case WIN_TYPES.DIAGONAL:
        {
            if (selectedWinLine == 0)
            {
                for (int i = 0; i < boardSize; i++)
                {
                    winningMoves.Add(i + (i * boardSize));
                }
            }
            else
            {
                int currTile = boardSize - 1;
                for (int i = 0; i < boardSize; i++)
                {
                    winningMoves.Add(currTile);
                    currTile += boardSize - 1;
                }
            }
            break;
        }

        case WIN_TYPES.DRAW:
        {
            if (boardSize == 3)
            {
                settings.tileSelections = new int[] { 0, 1, 4, 8, 5, 6, 7, 3, 2 };
            }
            else if (boardSize == 4)
            {
                settings.tileSelections = new int[] { 0, 1, 4, 8, 5, 6, 7, 3, 2, 9, 10, 11, 12, 13, 14, 15 };
            }
            return(settings);
        }

        default:
            break;
        }

        //Generate losing move list and make sure it doesn't include a win
        List <int> losingMoves;

        do
        {
            losingMoves = RandomNumberUtil.GetRandomValues(0, boardSize * boardSize, boardSize, true, new List <int>(winningMoves));
        } while (CheckForWins(losingMoves));

        settings.tileSelections = CombineMoveLists(winningMoves, losingMoves);

        return(settings);
    }