예제 #1
0
파일: Game.cs 프로젝트: shachardevops/Chess
        public void run()
        {
            bool       valid = false;
            ChessBoard c     = new ChessBoard();

            c.initSoldiers();
            // !c.checkMate(c.FindKing())

            c.PrintBoard();
            while (!valid)
            {
                Console.WriteLine("Please enter start axis Y, start axis X, end axis Y, end axis X");
                Console.WriteLine("{0}", (c.WhiteTurn() ? "White its your turn:" : "Black its your turn:"));
                string input = Console.ReadLine().Trim(' ');
                if (input.Length == 4)
                {
                    Coords start     = new Coords(c.ConvertY(input[0]), c.ConvertX(input[1]));
                    Coords end       = new Coords(c.ConvertY(input[2]), c.ConvertX(input[3]));
                    bool   validTurn = false;
                    if ((c.WhiteTurn() && c.GetSoldierByPosition(start).getColor() == "W"))
                    {
                        validTurn = true;
                    }
                    if (!(c.WhiteTurn()) && c.GetSoldierByPosition(start).getColor() == "B")
                    {
                        validTurn = true;
                    }

                    if (c.ValidInput(start, end) && validTurn && c.PossibleToCancelCheck(start, end))
                    {
                        if (c.validCastling(start, end) && c.GetSoldierByPosition(start).validMove(c, start, end))

                        {
                            c.doCastlingMove(start, end);
                            c.nextTurn();
                        }
                        else if (c.GetSoldierByPosition(start).validMove(c, start, end))
                        {
                            if (c.GetSoldierByPosition(start).getType() == "P" ||
                                (c.GetSoldierByPosition(start).getColor() != c.GetSoldierByPosition(end).getColor() && c.GetSoldierByPosition(end).getColor() != " ") ||
                                c.inCheck(c.FindKing()))

                            {
                                c.setDrawCounter(0);
                            }

                            if (c.validPawnPromotion(start, end))
                            {
                                c.doPromotion(start, end);
                                c.nextTurn();
                            }
                            else if (c.validEnPassant(start, end))
                            {
                                c.doEnPassant(start, end);
                                c.nextTurn();
                            }
                            else
                            {
                                c.basicMove(start, end);
                                c.nextTurn();
                            }
                        }
                    }
                }
                if (c.isDraw(c.FindKing()))
                {
                    Console.WriteLine("Draw");
                    valid = true;
                    break;
                }
                if (c.checkMate(c.FindKing()))
                {
                    Console.WriteLine((!(c.WhiteTurn()) ? "White won" : "Black won"));
                    valid = true;
                }
            }
        }