예제 #1
0
        public void Transposition_ExecuteMove_Tests()
        {
            var transposition = new TranspositionTables();

            transposition.Initialize();

            var board = new Board();

            board.InitializeEmptyBoard();

            //
            var firstPawnMove = new SingleMove("d2", "d4");
            var firstMoveHash = board.Shared.Transpositions.GetNewBoardHash(firstPawnMove, board, board.BoardHash);

            board.ExecuteMove(firstPawnMove);
            firstMoveHash.ShouldBe(board.BoardHash);

            //
            var second         = new SingleMove("e7", "e5");
            var secondMoveHash = board.Shared.Transpositions.GetNewBoardHash(second, board, board.BoardHash);

            board.ExecuteMove(second);
            secondMoveHash.ShouldBe(board.BoardHash);

            //
            var capture         = new SingleMove("d4", "e5", true);
            var captureMoveHash = board.Shared.Transpositions.GetNewBoardHash(capture, board, board.BoardHash);

            board.ExecuteMove(capture);
            captureMoveHash.ShouldBe(board.BoardHash);
        }
예제 #2
0
        public void KingLocationsUpdateOk()
        {
            var white = new King(true, "a1");
            var black = new King(false, "a8");

            var board = new Board();

            board.AddNew(white, black);
            board.Kings = (white, black);

            var move = new SingleMove("a1", "a2");
            //player1.Board.ExecuteMove(move);
            var player1 = new Logic(true, new Board(board, move));

            var kingReference = player1.Board.Kings.white;

            kingReference.ShouldNotBeNull();
            if (kingReference == null)
            {
                throw new ArgumentException();
            }
            kingReference.CurrentPosition.ToAlgebraic().ShouldBe("a2");

            var listReference = player1.Board.PieceList.First(p => p.IsWhite);

            listReference.CurrentPosition.ToAlgebraic().ShouldBe("a2");

            var arrayReference = player1.Board.ValueAtDefinitely("a2".ToTuple());

            arrayReference.CurrentPosition.ToAlgebraic().ShouldBe("a2");
        }
예제 #3
0
        public void Transposition_DifferentMoves_SameHash()
        {
            // 8   K
            // 7
            // 6
            // 5
            // 4P
            // 3   K
            // 2
            // 1
            //  ABCDEFGH

            var board1 = new Board();
            var board2 = new Board();
            var pieces = new List <PieceBase>
            {
                new Pawn(false, "a4"),
                new King(true, "d3"),
                new King(false, "d8")
            };

            board1.AddNew(pieces);
            board2.AddNew(pieces);

            var move1a = new SingleMove("d3", "c4");

            board1.ExecuteMove(move1a);
            var move2a = new SingleMove("c4", "d5");

            board1.ExecuteMove(move2a);

            var move1b = new SingleMove("d3", "d4");

            board2.ExecuteMove(move1b);
            var move2b = new SingleMove("d4", "d5");

            board2.ExecuteMove(move2b);

            board1.BoardHash.ShouldBe(board2.BoardHash);
        }
예제 #4
0
        private void ImageButton_Click(object sender, RoutedEventArgs e)
        {
            var contxt = (sender as Button)?.Content;
            var data   = (contxt as Image)?.DataContext;
            var card   = (data as Card);

            if (card == null)
            {
                return;
            }
            var cardsList = new List <Card>();

            foreach (var currentCard in ImagesCollectionName.ItemsSource)
            {
                cardsList.Add(currentCard as Card);
            }
            var tempCard = cardsList.FirstOrDefault(c => c.ImageName.Equals(card.ImageName) &&
                                                    c.CardType.Equals(card.CardType));

            if (tempCard.Inverted == true)
            {
                return;
            }
            SingleMove.SetCard(tempCard);
            tempCard.Inverted = true;
            tempCard.RefreshImgValue();
            System.Threading.Thread.Sleep(30);
            if (SingleMove.TwoCardsSet)
            {
                cardsList.Where(c => c.ImageName == SingleMove.FirstCard.ImageName || c.ImageName == SingleMove.SecondCard.ImageName)
                .ToList()
                .ForEach(c =>
                {
                    c.Inverted = SingleMove.FirstEqualsSecond();
                    c.RefreshImgValue();
                });
                SingleMove.Clear();
            }
        }