Exemplo n.º 1
0
 private static void BlackMove(ref ChessBoard gameboard, ref string notation, List <string> gamestory, ref string move, ref int NumberOfMoves)
 {
     Console.SetCursorPosition(0, 12);
     Console.Write("Black, your move. Enter \"help\" if you don't know what to do");
     Console.WriteLine();
     notation = Console.ReadLine();
     if (notation == "help")
     {
         Draw.PrintHelp();
         Console.ReadLine();
         return;
     }
     DefaultInfo.BlackEnPassantEndangered = false;
     try
     {
         gameboard = FIDEnotation.PerformBlackMove(gameboard, notation);
         NumberOfMoves++;
         move = move + " " + notation;
         if (!WhiteKing.IsSafe(gameboard))
         {
             move += "+";
         }
         gamestory.Add(move);
         move = "";
         DefaultInfo.IsWhiteMove = !DefaultInfo.IsWhiteMove;
     }
     catch (ArgumentException)
     {
         // Console.WriteLine(e.Message);
         // BlackMove(ref gameboard, ref notation, gamestory, ref move, ref NumberOfMoves);
         return;
     }
 }
Exemplo n.º 2
0
 private static void WhiteMove(ref ChessBoard gameboard, ref string notation, ref string move)
 {
     Console.SetCursorPosition(0, 12);
     Console.Write("White, your move. Enter \"help\" if you don't know what to do");
     Console.WriteLine();
     notation = Console.ReadLine();
     if (notation == "help")
     {
         Draw.PrintHelp();
         Console.ReadLine();
         return;
     }
     DefaultInfo.WhiteEnPassantEndangered = false;
     try
     {
         gameboard = FIDEnotation.PerformWhiteMove(gameboard, notation);
         move      = move + " " + notation;
         if (!BlackKing.IsSafe(gameboard))
         {
             move += "+";
         }
         DefaultInfo.IsWhiteMove = !DefaultInfo.IsWhiteMove;
     }
     catch (ArgumentException)
     {
         //Console.WriteLine(e.Message);
         return;
         // WhiteMove(ref gameboard, ref notation, ref move);
     }
 }
Exemplo n.º 3
0
        public void TestRooksMove()
        {
            ChessBoard board = new ChessBoard();

            DefaultInfo.SetDefaultValues();
            // board.SetDefaultChessBoard();
            board['a', 1] = (sbyte)DefaultPieces.WhiteRook;
            board['h', 1] = (sbyte)DefaultPieces.WhiteRook;
            board['c', 2] = (sbyte)DefaultPieces.WhiteKing;
            board['a', 8] = (sbyte)DefaultPieces.BlackRook;
            board['h', 8] = (sbyte)DefaultPieces.BlackRook;
            board['c', 7] = (sbyte)DefaultPieces.BlackKing;
            board         = FIDEnotation.PerformWhiteMove(board, "Rae1");
            Assert.IsFalse(DefaultInfo.WhiteAsideRookIsUnMoved);
            board = FIDEnotation.PerformBlackMove(board, "Rhe8");
            Assert.IsFalse(DefaultInfo.BlackHsideRookIsUnMoved);
            board = FIDEnotation.PerformWhiteMove(board, "Rhf1");
            Assert.IsFalse(DefaultInfo.WhiteHsideRookIsUnMoved);
            board = FIDEnotation.PerformBlackMove(board, "Rab8");
            Assert.IsFalse(DefaultInfo.BlackAsideRookIsUnMoved);
            board.DebugConsoleSimpleDraw();
            board = FIDEnotation.PerformWhiteMove(board, "Rf6");
            board = FIDEnotation.PerformWhiteMove(board, "Rfe6");
            board = FIDEnotation.PerformWhiteMove(board, "R6e3");
        }
Exemplo n.º 4
0
        public void TestAmbigiousPieces()
        {
            ChessBoard board = new ChessBoard();

            board['e', 1] = (sbyte)DefaultPieces.WhiteKing;
            board['e', 8] = (sbyte)DefaultPieces.BlackKing;
            board['c', 3] = (sbyte)DefaultPieces.WhitekNight;
            board['g', 3] = (sbyte)DefaultPieces.WhitekNight;
            board['c', 6] = (sbyte)DefaultPieces.BlackkNight;
            board['g', 6] = (sbyte)DefaultPieces.BlackkNight;
            board         = FIDEnotation.PerformWhiteMove(board, "Nce2");
            board         = FIDEnotation.PerformBlackMove(board, "Nce7");
            board['g', 5] = (sbyte)DefaultPieces.WhitekNight;
            board['g', 1] = (sbyte)DefaultPieces.WhitekNight;
            board['g', 4] = (sbyte)DefaultPieces.BlackkNight;
            board['g', 8] = (sbyte)DefaultPieces.BlackkNight;
            board         = FIDEnotation.PerformWhiteMove(board, "N5f3");
            board         = FIDEnotation.PerformBlackMove(board, "N4f6");
            board['a', 1] = (sbyte)DefaultPieces.WhiteBishop;
            board['a', 3] = (sbyte)DefaultPieces.WhiteBishop;
            board['c', 3] = (sbyte)DefaultPieces.WhiteBishop;
            board         = FIDEnotation.PerformWhiteMove(board, "Ba1b2");
            board['a', 8] = (sbyte)DefaultPieces.BlackBishop;
            board['a', 6] = (sbyte)DefaultPieces.BlackBishop;
            board['c', 6] = (sbyte)DefaultPieces.BlackBishop;
            board         = FIDEnotation.PerformBlackMove(board, "Ba8b7");
        }
Exemplo n.º 5
0
        public void TestBlackQueenCastling()
        {
            DefaultInfo.WhiteAsideRookIsUnMoved = true;
            DefaultInfo.WhiteHsideRookIsUnMoved = true;
            DefaultInfo.WhiteKingIsUnMoved      = true;
            DefaultInfo.BlackAsideRookIsUnMoved = true;
            DefaultInfo.BlackKingIsUnMoved      = true;
            DefaultInfo.BlackHsideRookIsUnMoved = true;
            ChessBoard board = new ChessBoard();

            board['a', 1] = (sbyte)DefaultPieces.WhiteRook;
            board['e', 1] = (sbyte)DefaultPieces.WhiteKing;
            board['a', 8] = (sbyte)DefaultPieces.BlackRook;
            board['e', 8] = (sbyte)DefaultPieces.BlackKing;
            ChessBoard sboard = board.ShallowCopy();

            board          = FIDEnotation.PerformBlackMove(board, "0-0-0");
            sboard['a', 8] = 0;
            sboard['e', 8] = 0;
            sboard['c', 8] = (sbyte)DefaultPieces.BlackKing;
            sboard['d', 8] = (sbyte)DefaultPieces.BlackRook;
            board.DebugConsoleSimpleDraw();
            Console.WriteLine();
            sboard.DebugConsoleSimpleDraw();
            Assert.AreEqual(sboard, board);
            //exception!
            board = FIDEnotation.PerformWhiteMove(board, "0-0-0");
        }
Exemplo n.º 6
0
        public void TestPawnEnPassant()
        {
            ChessBoard board = new ChessBoard();

            board.SetDefaultChessBoard();
            board = FIDEnotation.PerformWhiteMove(board, "e4");
            board = FIDEnotation.PerformBlackMove(board, "d5");
            board = FIDEnotation.PerformWhiteMove(board, "e5");
            board = FIDEnotation.PerformBlackMove(board, "d4");
            board = FIDEnotation.PerformWhiteMove(board, "c4");
            board = FIDEnotation.PerformBlackMove(board, "dc3");
            board = FIDEnotation.PerformWhiteMove(board, "a4");
            board = FIDEnotation.PerformBlackMove(board, "f5");
            board = FIDEnotation.PerformWhiteMove(board, "ef6");
            board.DebugConsoleSimpleDraw();
            ChessBoard sndboard = new ChessBoard();

            sndboard.SetDefaultChessBoard();
            sndboard['d', 7] = 0;
            sndboard['f', 7] = 0;
            sndboard['f', 6] = 1;
            sndboard['c', 3] = -1;
            sndboard['c', 2] = 0;
            sndboard['e', 2] = 0;
            sndboard['a', 4] = 1;
            sndboard['a', 2] = 0;
            Assert.AreEqual(board, sndboard);
        }
Exemplo n.º 7
0
        public void TestPawnPromotions()
        {
            ChessBoard board = new ChessBoard();

            board['e', 1] = (sbyte)DefaultPieces.WhiteKing;
            board['e', 8] = (sbyte)DefaultPieces.BlackKing;
            board['a', 7] = (sbyte)DefaultPieces.WhitePawn;
            board['a', 2] = (sbyte)DefaultPieces.BlackPawn;
            board['c', 7] = (sbyte)DefaultPieces.WhitePawn;
            board['c', 2] = (sbyte)DefaultPieces.BlackPawn;
            board['b', 8] = (sbyte)DefaultPieces.BlackRook;
            board['b', 1] = (sbyte)DefaultPieces.WhiteRook;
            ChessBoard sndboard = board.ShallowCopy();

            board            = FIDEnotation.PerformWhiteMove(board, "a8N");
            board            = FIDEnotation.PerformBlackMove(board, "a1N");
            sndboard['a', 7] = 0;
            sndboard['a', 2] = 0;
            sndboard['a', 8] = (sbyte)DefaultPieces.WhitekNight;
            sndboard['a', 1] = (sbyte)DefaultPieces.BlackkNight;
            Assert.AreEqual(board, sndboard);
            board            = FIDEnotation.PerformWhiteMove(board, "cb8B");
            board            = FIDEnotation.PerformBlackMove(board, "cb1B");
            sndboard['c', 7] = 0;
            sndboard['c', 2] = 0;
            sndboard['b', 8] = (sbyte)DefaultPieces.WhiteBishop;
            sndboard['b', 1] = (sbyte)DefaultPieces.BlackBishop;
            Assert.AreEqual(board, sndboard);
        }
Exemplo n.º 8
0
        public void TestPossibleMoves()
        {
            ChessBoard board = new ChessBoard();

            board.SetDefaultChessBoard();
            Assert.IsTrue(FIDEnotation.CheckIfArePossibleMoves(board, true));
            Assert.IsTrue(FIDEnotation.CheckIfArePossibleMoves(board, false));
        }
Exemplo n.º 9
0
        public void TestPiecesMove()
        {
            ChessBoard board = new ChessBoard();

            board.SetDefaultChessBoard();
            ChessBoard sndboard = board.ShallowCopy();

            board = FIDEnotation.PerformWhiteMove(board, "e4");
            board = FIDEnotation.PerformBlackMove(board, "e5");
            board = FIDEnotation.PerformWhiteMove(board, "Nc3");
            board = FIDEnotation.PerformBlackMove(board, "Nc6");
            board = FIDEnotation.PerformWhiteMove(board, "Bc4");
            board = FIDEnotation.PerformBlackMove(board, "Bc5");
            board = FIDEnotation.PerformWhiteMove(board, "d4");
            board = FIDEnotation.PerformBlackMove(board, "d5");
            board = FIDEnotation.PerformWhiteMove(board, "Bf4");
            board = FIDEnotation.PerformBlackMove(board, "Bf5");
            board = FIDEnotation.PerformWhiteMove(board, "Qd3");
            board = FIDEnotation.PerformBlackMove(board, "Qd6");
            board = FIDEnotation.PerformWhiteMove(board, "Ke2");
            board = FIDEnotation.PerformBlackMove(board, "Ke7");
            board = FIDEnotation.PerformWhiteMove(board, "Rd1");
            board = FIDEnotation.PerformBlackMove(board, "Rd8");
            for (char tfile = 'a'; tfile <= 'f'; tfile++)
            {
                sndboard[tfile, 8] = 0;
                sndboard[tfile, 1] = 0;
            }

// 0  0  0 -4  0  0 -2 -4
//-1 -1 -1  0 -6 -1 -1 -1
// 0  0 -2 -5  0  0  0  0
// 0  0 -3 -1 -1 -3  0  0
// 0  0 +3 +1 +1 +3  0  0
// 0  0 +2 +5  0  0  0  0
//+1 +1 +1  0 +6 +1 +1 +1
// 0  0  0 +4  0  0 +2 +4

            sndboard['d', 1] = 4; sndboard['d', 8] = -4;
            sndboard['d', 2] = 0; sndboard['e', 2] = 6;
            sndboard['d', 7] = 0; sndboard['e', 7] = -6;
            sndboard['c', 3] = 2; sndboard['c', 6] = -2;
            sndboard['d', 3] = 5; sndboard['d', 6] = -5;
            sndboard['f', 4] = 3; sndboard['f', 5] = -3;
            sndboard['c', 4] = 3; sndboard['c', 5] = -3;
            sndboard['d', 3] = 5; sndboard['d', 6] = -5;
            sndboard['d', 4] = 1; sndboard['d', 5] = -1;
            sndboard['e', 2] = 6; sndboard['e', 7] = -6;
            sndboard['e', 4] = 1; sndboard['e', 5] = -1;
            sndboard['f', 4] = 3; sndboard['f', 5] = -3;
            //sndboard.DebugConsoleSimpleDraw();
            Assert.AreEqual(board, sndboard);
        }
Exemplo n.º 10
0
        private static void DrawSidesStrength(ChessBoard gameboard)
        {
            List <sbyte> whitepieces = new List <sbyte>();
            List <sbyte> blackpieces = new List <sbyte>();

            for (char tfile = 'a'; tfile <= 'h'; tfile++)
            {
                for (sbyte trank = 1; trank <= 8; trank++)
                {
                    if (gameboard[tfile, trank] > 0)
                    {
                        whitepieces.Add(gameboard[tfile, trank]);
                    }
                    else if (gameboard[tfile, trank] < 0)
                    {
                        blackpieces.Add(Math.Abs(gameboard[tfile, trank]));
                    }
                }
            }
            Console.SetCursorPosition(0, 10);
            Console.Write("White: ");
            //List<string> letters = new List<string>();
            whitepieces.Sort();
            whitepieces.Reverse();

            foreach (sbyte temp in whitepieces)
            {
                if (temp == 1)
                {
                    break;
                }
                Console.Write(FIDEnotation.GetLetter(temp) + " ");
            }
            Console.Write(whitepieces.Count - whitepieces.IndexOf(1));
            Console.Write('P');
            Console.WriteLine();
            //Console.SetCursorPosition(35, 11);
            Console.Write("Black: ");
            blackpieces.Sort();
            blackpieces.Reverse();
            foreach (sbyte temp in blackpieces)
            {
                if (temp == 1)
                {
                    break;
                }
                Console.Write(FIDEnotation.GetLetter(temp) + " ");
            }
            Console.Write(blackpieces.Count - blackpieces.IndexOf(1));
            Console.Write('P');
            Console.WriteLine();
        }
Exemplo n.º 11
0
        public void TestReverseChessboard()
        {
            ChessBoard board = new ChessBoard();

            board.SetDefaultChessBoard();
            board = FIDEnotation.PerformWhiteMove(board, "e4");
            ChessBoard sndboard = new ChessBoard();

            sndboard.SetDefaultChessBoard();
            board.ReverseSides();
            sndboard = FIDEnotation.PerformBlackMove(sndboard, "e5");
            board.DebugConsoleSimpleDraw();
            Console.WriteLine();
            sndboard.DebugConsoleSimpleDraw();
            Assert.AreEqual(board, sndboard);
        }
Exemplo n.º 12
0
        public void TestPawnCapture()
        {
            ChessBoard board = new ChessBoard();

            board.SetDefaultChessBoard();
            ChessBoard sndboard = new ChessBoard();

            sndboard.SetDefaultChessBoard();
            sndboard['e', 2] = 0;
            sndboard['e', 7] = 0;
            sndboard['d', 5] = -1;
            sndboard['d', 7] = 0;
            sndboard['d', 2] = 0;
            sndboard['d', 4] = 1;
            board            = FIDEnotation.PerformWhiteMove(board, "e4");
            board            = FIDEnotation.PerformBlackMove(board, "d5");
            board            = FIDEnotation.PerformWhiteMove(board, "d4");
            board            = FIDEnotation.PerformBlackMove(board, "e6");
            board            = FIDEnotation.PerformWhiteMove(board, "ed5");
            board            = FIDEnotation.PerformBlackMove(board, "ed5");
            sndboard['a', 2] = 0;
            sndboard['b', 7] = 0;
            sndboard['b', 5] = 1;
            board            = FIDEnotation.PerformWhiteMove(board, "a4");
            board            = FIDEnotation.PerformBlackMove(board, "b5");
            board            = FIDEnotation.PerformWhiteMove(board, "ab5");
            Assert.AreEqual(board, sndboard);
            board            = FIDEnotation.PerformBlackMove(board, "a6");
            board            = FIDEnotation.PerformBlackMove(board, "ab5");
            sndboard['a', 7] = 0;
            sndboard['b', 5] = -1;
            Assert.AreEqual(board, sndboard);
            sndboard['h', 2] = 0;
            sndboard['g', 7] = 0;
            sndboard['g', 5] = 1;
            board            = FIDEnotation.PerformWhiteMove(board, "h4");
            board            = FIDEnotation.PerformBlackMove(board, "g5");
            board            = FIDEnotation.PerformWhiteMove(board, "hg5");
            Assert.AreEqual(board, sndboard);
            board            = FIDEnotation.PerformBlackMove(board, "h6");
            board            = FIDEnotation.PerformBlackMove(board, "hg5");
            sndboard['h', 7] = 0;
            sndboard['g', 5] = -1;
            Assert.AreEqual(board, sndboard);
        }
Exemplo n.º 13
0
        public void TestBlackKingCastling()
        {
            DefaultInfo.WhiteHsideRookIsUnMoved = true;
            DefaultInfo.WhiteKingIsUnMoved      = true;
            DefaultInfo.BlackHsideRookIsUnMoved = true;
            DefaultInfo.BlackKingIsUnMoved      = true;
            ChessBoard board = new ChessBoard();

            board['h', 1] = (sbyte)DefaultPieces.WhiteRook;
            board['e', 1] = (sbyte)DefaultPieces.WhiteKing;
            board['h', 8] = (sbyte)DefaultPieces.BlackRook;
            board['e', 8] = (sbyte)DefaultPieces.BlackKing;
            ChessBoard sboard = board.ShallowCopy();

            board          = FIDEnotation.PerformBlackMove(board, "0-0");
            sboard['h', 8] = 0;
            sboard['e', 8] = 0;
            sboard['g', 8] = (sbyte)DefaultPieces.BlackKing;
            sboard['f', 8] = (sbyte)DefaultPieces.BlackRook;
            Assert.AreEqual(sboard, board);
            //exception!
            board = FIDEnotation.PerformWhiteMove(board, "0-0");
        }
Exemplo n.º 14
0
        //TO DO drawns

        static void Main(string[] args)
        {
            ChessBoard gameboard = new ChessBoard();

            gameboard.SetDefaultChessBoard();
            DefaultInfo.SetDefaultValues();
            string        notation  = "";
            List <string> gamestory = new List <string>();
            string        move      = "";
            // Code Review: Назва локальної змінної повинна починатися з малої літери.
            int NumberOfMoves = 1;
            int rows          = 20;
            int rowwidth      = 20;

            //Draw.DrawChessBoard(gameboard);
            Console.Title = "Dan's True Chess Game";
            do
            {
                DrawGameField(gameboard, gamestory, ref move, NumberOfMoves, ref rows, rowwidth);
                if (DefaultInfo.IsWhiteMove)
                {
                    if (!FIDEnotation.CheckIfArePossibleMoves(gameboard, true))
                    {
                        if (!WhiteKing.IsSafe(gameboard))
                        {
                            DefaultInfo.BlackWin = true;
                        }
                        break;
                    }
                    WhiteMove(ref gameboard, ref notation, ref move);
                }
                else
                {
                    if (!FIDEnotation.CheckIfArePossibleMoves(gameboard, false))
                    {
                        if (!BlackKing.IsSafe(gameboard))
                        {
                            DefaultInfo.WhiteWin = true;
                        }

                        break;
                    }
                    BlackMove(ref gameboard, ref notation, gamestory, ref move, ref NumberOfMoves);
                }
            }while (true);

            if (DefaultInfo.WhiteWin)
            {
                gamestory[gamestory.Count] += "+";
                move = " ";
                DrawGameField(gameboard, gamestory, ref move, NumberOfMoves, ref rows, rowwidth);
                Console.WriteLine("White win!");
            }
            if (DefaultInfo.BlackWin)
            {
                gamestory[gamestory.Count - 1] += "+";
                move = " ";
                DrawGameField(gameboard, gamestory, ref move, NumberOfMoves, ref rows, rowwidth);
                Console.WriteLine("Black win!");
            }
            else
            {
                gamestory[gamestory.Count] += "=";
                move = " ";
                DrawGameField(gameboard, gamestory, ref move, NumberOfMoves, ref rows, rowwidth);
                Console.WriteLine("Draw");
            }
        }