示例#1
0
        private void ApplyMove(Board board, Colour colour, MoveViewer move)
        {
            board.MakeMove(move.Value);

            Ply++;

            if (move.PieceType == PieceType.Pawn || move.CapturePieceType != PieceType.None)
            {
                HalfMoveClock = 0;
            }
            else
            {
                ++HalfMoveClock;
            }

            var gameState = GetGameState();

            var currentState = board.CurrentState;

            var historyItem = new GameHistoryNode(currentState, gameState);

            history.Push(historyItem);

            if (historyItem.IsIrreversible)
            {
                drawBuffer.Clear();
            }
            else
            {
                drawBuffer.Add(historyItem);
            }

            var isDrawn = IsDrawn(HalfMoveClock, drawBuffer);

            if (isDrawn)
            {
                Draw?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate()));

                return;
            }

            var moves = new List <uint>();

            moveGenerator.Generate(board, colour.Opposite(), moves);

            AvailableMoves = moves.Select(x => new MoveViewer(x));

            if (!AvailableMoves.Any())
            {
                Checkmate?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate()));

                return;
            }

            MoveApplied?.Invoke(this, new MoveAppliedEventArgs(move, gameState, Evaluate()));
        }
示例#2
0
    /// <summary>
    /// reset
    /// </summary>
    public void ResetGame()
    {
        gameOver  = false;
        chessMove = true;
        if (hasLoad)
        {
            return;
        }

        if (hasLoad)
        {
            return;
        }
        chessBoard = new int[10, 9]
        {
            { 2, 3, 6, 5, 1, 5, 6, 3, 2 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 0, 4, 0, 0, 0, 0, 0, 4, 0 },
            { 7, 0, 7, 0, 7, 0, 7, 0, 7 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 14, 0, 14, 0, 14, 0, 14, 0, 14 },
            { 0, 11, 0, 0, 0, 0, 0, 11, 0 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 9, 10, 13, 12, 8, 12, 13, 10, 9 }
        };
        boardGrid = new GameObject[10, 9];
        if (chessPeople == 1 || chessPeople == 2)
        {
            boardGo = boardGos[0];
        }
        else
        {
            boardGo = boardGos[1];
        }
        InitGrid();
        InitChess();
        rules                    = new Rules();
        movingOfChess            = new MovingOfChess(this);
        checkmate                = new Checkmate();
        chessReseting            = new ChessReseting();
        chessReseting.resetCount = 0;
        chessReseting.chessSteps = new ChessReseting.Chess[400];
        canMoveUIStack           = new Stack <GameObject>();
        for (int i = 0; i < 40; i++)
        {
            canMoveUIStack.Push(Instantiate(canMovePosUIGo));
        }
        currentCanMoveUIStack = new Stack <GameObject>();
        searchEngine          = new SearchEngine();
        hasLoad = true;
    }
示例#3
0
    /// <summary>
    /// 重置游戏
    /// </summary>
    public void ResetGame()
    {
        chessMove  = true;
        chessBoard = new int[10, 9]
        {
            { 2, 3, 6, 5, 1, 5, 6, 3, 2 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 0, 4, 0, 0, 0, 0, 0, 4, 0 },
            { 7, 0, 7, 0, 7, 0, 7, 0, 7 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 14, 0, 14, 0, 14, 0, 14, 0, 14 },
            { 0, 11, 0, 0, 0, 0, 0, 11, 0 },
            { 0, 0, 0, 0, 0, 0, 0, 0, 0 },
            { 9, 10, 13, 12, 8, 12, 13, 10, 9 }
        };

        boardGrid = new GameObject[10, 9];
        if (chessPeople == 1 || chessPeople == 2)
        {
            boardGo = boardGos[0];
        }
        else
        {
            boardGo = boardGos[1];
        }
        InitGrid();
        InitChess();
        rules          = new Rules();
        movingOfChess  = new MovingOfChess(this);
        chessRegreting = new ChessRegreting
        {
            regretCount = 0,
            chessSteps  = new ChessRegreting.Chess[400]
        };
        checkmate      = new Checkmate();
        canMoveUIStack = new Stack <GameObject>();
        for (int i = 0; i < Constants.canMoveUIStackLength; i++)
        {
            canMoveUIStack.Push(Instantiate(canMovePosUIGo));
        }
        currentCanMoveUIStack = new Stack <GameObject>();
    }
示例#4
0
    public void startGame(int scene)
    {
        if (GenerateGame.instance.whiteKing != true && GenerateGame.instance.blackKing != true)
        {
            return;
        }
        int          boardSize = GenerateGame.instance.boardSize;
        int          promoRows = int.Parse(GameObject.Find("PromoRows").GetComponentInChildren <Text>().text);
        List <Piece> white     = new List <Piece>();
        List <Piece> black     = new List <Piece>();

        foreach (List <GeneratedTile> item in GenerateGame.instance.board)
        {
            foreach (GeneratedTile i in item)
            {
                if (i.occupied)
                {
                    if (i.isWhite)
                    {
                        white.Add(i.occupiedBy);
                    }
                    else
                    {
                        black.Add(i.occupiedBy);
                    }
                }
            }
        }
        int   s = GameObject.Find("Rules").GetComponent <Dropdown>().value;
        Rules rules;

        switch (s)
        {
        case 0:
            rules = new Checkmate();
            break;

        case 1:
            rules = new Capture();
            break;

        case 2:
            rules = new Elimination();
            break;

        default:
            rules = new Checkmate();
            break;
        }



        GameObject setupObject = new GameObject();

        setupObject.name = "SetupObject";
        setupObject.AddComponent <GameInfoHolder>();
        setupObject.GetComponent <GameInfoHolder>().black       = black;
        setupObject.GetComponent <GameInfoHolder>().white       = white;
        setupObject.GetComponent <GameInfoHolder>().boardSize   = boardSize;
        setupObject.GetComponent <GameInfoHolder>().promoRows   = promoRows;
        setupObject.GetComponent <GameInfoHolder>().useCaptured = GameObject.Find("Captured").GetComponentInChildren <Toggle>().isOn;
        setupObject.GetComponent <GameInfoHolder>().rules       = rules;

        if (GameObject.Find("Player"))
        {
            setupObject.GetComponent <GameInfoHolder>().player = GameObject.Find("Player").GetComponent <Dropdown>().value;
        }
        if (GameObject.Find("AI"))
        {
            setupObject.GetComponent <GameInfoHolder>().ai = GameObject.Find("AI").GetComponent <Dropdown>().value;
        }

        DontDestroyOnLoad(GameObject.Find("SetupObject"));
        SceneManager.LoadScene(scene);
    }