Exemplo n.º 1
0
    public void SetCheck(ChessSide side)
    {
        string message = "Check for " + side.ToString();

        Debug.Log(message);
        MainMenu.Singleton.AppendConsoleText(message);
    }
Exemplo n.º 2
0
    public void SetMate(ChessSide side)
    {
        string message = "Mate for " + side.ToString();

        Debug.Log(message);
        MainMenu.Singleton.AppendConsoleText(message);
        isMate = true;
    }
Exemplo n.º 3
0
        public virtual bool CheckForMate(ChessSide side, byte king_index)
        {
            IChessItemModel kingModel = new NullChessItemModel();

            for (int i = 0; i < FiguresPlacement.GetLength(0); i++)
            {
                for (int j = 0; j < FiguresPlacement.GetLength(1); j++)
                {
                    var cm_ij = FiguresPlacement[i, j];
                    if (!cm_ij.IsNullObject && cm_ij.Type == king_index && cm_ij.Side == side)
                    {
                        kingModel = cm_ij;
                        break;
                    }
                }
            }

            if (kingModel.IsNullObject)
            {
                throw new Exception(side.ToString() + " king is missing!");
            }

            foreach (var cm_ij in FiguresPlacement)
            {
                if (!cm_ij.IsNullObject && cm_ij.Side == side)
                {
                    List <bool> isJumpTemp;
                    List <bool> killPossibilityList;
                    foreach (var poss_move in cm_ij.GetPossibleMoves(FiguresPlacement, out isJumpTemp, out killPossibilityList))
                    {
                        var  prev_pos        = cm_ij.Pos;
                        var  temp_chess_item = MoveChessItemPredictForward(cm_ij.Pos, poss_move);
                        bool isCheck         = CheckForCheck(side);
                        MoveChessItemPredictBackward(temp_chess_item, prev_pos, cm_ij.Pos);

                        if (!isCheck && poss_move != prev_pos)
                        {
                            return(false);
                        }
                    }
                }
            }
            return(true);
        }