public void MoveChessman(int x, int y)
    {
        if (allowedMoves[x, y])
        {
            if (chessMate != null)
            {
                BoardHighlights.Instance.HideCheckedHighlight();
                chessMate.HidePowerEffect();
                chessMate = null;
            }

            Chessman c      = Chessmans[x, y];
            float    delays = 0f;

            // Check EnPassantMove
            ProcessEnPassantMove(c, x, y, out delays);

            // Eat chessman
            bool isEatChess = false;
            if (c != null && c.isWhite != isWhiteTurn)
            {
                delays = DELAY_TIME;
                c.RotateEach(ROTATE_TIME);
                c.DestroyAfter(delays);

                BoardHighlights.Instance.ShowKillerHighlight(new Vector3(x + 0.5f, 0, y + 0.5f));
                BoardHighlights.Instance.HideKillerHighlightAfter(delays);
                isEatChess = true;

                if (c.GetType() == typeof(King))
                {
                    EndGame();
                    return;
                }
            }

            BoardHighlights.Instance.ShowHoverHighlight(new Vector3(x + 0.5f, 0, y + 0.5f));

            // check if pawn step on final line
            ProcessIfPawnStepOnFinalLine(x, y);

            // Move selected chessman to x, y position
            MoveSelectedChessmanTo(x, y, delays);

            // Checkmate
            if (!IsCheckmate(Chessmans[x, y].PossibleMove()) && isEatChess)
            {
                selectedChessman.PlayPowerEffectFor(DELAY_TIME);
            }
            ProcessCheckmate(x, y);

            // Change turn
            isWhiteTurn = !isWhiteTurn;
        }

        BoardHighlights.Instance.HideHighlights();
        selectedChessman = null;
    }