Exemple #1
0
        public void AvailableMovesFound()
        {
            var board = builder.FromTypeGrid("0110 0212 2012 2222");
            var logic = new PlayLogic(board);

            Assert.IsTrue(logic.HasAvailableMoves());
        }
Exemple #2
0
        public void NoAvailableMoves()
        {
            var board = builder.FromTypeGrid("01 01");
            var logic = new PlayLogic(board);

            Assert.IsFalse(logic.HasAvailableMoves());
        }
        public void NewPieceHasExpectedCoords()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 0 },
                { 1, 0, 0, 2 },
                { 1, 1, 1, 2 },
                { 0, 1, 1, 2 }
            });
            var game = new Game(board, GameRules.ClassicRules, PieceType.GetRange(0, 3));

            var moves = new PlayLogic(board).AvailableMoves();

            foreach (var move in moves)
            {
                var simulator = MoveSimulator.FromPotentialMove(board, move, game.NextPieceIfPlaying(move));
                simulator.Simulate();
                var coord          = simulator.moveCoord;
                var piece          = simulator.oldPiece;
                var actions        = simulator.GetMove().consequences;
                var newPieceAction = actions.First(IsNewPieceAction) as NewPieceAction;
                Assert.AreEqual(new Coord {
                    col = coord.col, row = board.Size - piece.size
                }, newPieceAction.coord);
            }
        }
Exemple #4
0
        public void FindsObstaclesAbove()
        {
            var board     = builder.FromTypeGrid("0012 0011 1211 0120");
            var logic     = new PlayLogic(board);
            var expected  = new Piece[] { board.Get(c02) };
            var piece     = board.Get(c11);
            var obstacles = logic.GetObstaclesAbove(piece);

            CollectionAssert.AreEqual(expected, obstacles);
        }
Exemple #5
0
        public void MovesSearchDoesNotChangeBoard()
        {
            var board = boardGen.GenerateRandom(8, 4);
            var logic = new PlayLogic(board);

            var clone = board.Clone();

            logic.AvailableMoves();
            Assert.IsTrue(clone.Matches(board), "board matches after searching for available moves");
        }
Exemple #6
0
        public void NoObstaclesAbove()
        {
            var board = builder.FromTypeGrid("0102 1011 1221 0120");
            var logic = new PlayLogic(board);

            foreach (var piece in board.Pieces.Keys)
            {
                CollectionAssert.IsEmpty(logic.GetObstaclesAbove(piece));
            }
        }
Exemple #7
0
        void AvailableMovesAreValid(Board board, int fromType, int numTypes)
        {
            var game  = new Game(board, GameRules.ClassicRules, PieceType.GetRange(fromType, numTypes));
            var logic = new PlayLogic(board);

            foreach (var move in logic.AvailableMoves())
            {
                System.Console.WriteLine("move: " + move);
                game.Execute(move);
                game.Undo();
            }
        }
        public PlayResponse Play(string gameId, int playerId, Book request)
        {
            var logic = (LogicContainer)HttpContext.Current.Cache[gameId + playerId];
            var play  = new PlayLogic(gameId, logic, request).Play(out logic);

            logic.HandCards.Remove(play);
            HttpContext.Current.Application[gameId + playerId] = logic;

            return(new PlayResponse {
                card = play.ToString()
            });
        }
Exemple #9
0
        public void FindsDroppablesAboveDouble()
        {
            var board       = builder.FromTypeGrid("0101 1101 1100 1110");
            var logic       = new PlayLogic(board);
            var expected    = Coord.SquareRange(c02, 2).Select(c => board.Get(c));
            var pieceCoords = Coord.SquareRange(c00, 2);

            foreach (var coord in pieceCoords)
            {
                var droppables = logic.GetDroppablesAbove(board.Get(coord));
                CollectionAssert.AreEquivalent(expected, droppables);
            }
        }
Exemple #10
0
        public void SpecialCaseAvailableMoves()
        {
            var board = builder.FromTypeGrid("0111 0011 1100 1100");

            board.RotateRight();
            var game  = new Game(board, GameRules.ClassicRules, PieceType.GetRange(0, 2));
            var logic = new PlayLogic(board);

            foreach (var move in logic.AvailableMoves())
            {
                game.Execute(move);
                game.Undo();
            }
            Assert.Pass("All moves could be done");
        }
        public void CanAlwaysSimulateAvailableMovesRnd()
        {
            for (int i = 0; i < 10; i++)
            {
                var board = generator.GenerateRandom(8, 3);
                var game  = new Game(board, GameRules.ClassicRules, PieceType.GetRange(0, 3));

                var logic = new PlayLogic(board);
                var moves = logic.AvailableMoves();
                foreach (var move in moves)
                {
                    var simulator = MoveSimulator.FromPotentialMove(board, move, game.NextPieceIfPlaying(move));
                    simulator.Simulate();
                    Assert.IsTrue(simulator.IsMovePossible());
                }
            }
        }
Exemple #12
0
        public void NotDroppableIfNotAligned()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 2 },
                { 1, 1, 2, 2 },
                { 1, 0, 0, 1 },
                { 0, 0, 0, 1 }
            });
            var logic    = new PlayLogic(board);
            var bigPiece = board.Get(c22);

            foreach (var piece in board.GetAll(c10, c20, c11, c21))
            {
                var droppables = logic.GetDroppablesAbove(piece);
                CollectionAssert.DoesNotContain(droppables, bigPiece);
            }
        }
Exemple #13
0
        public void AvailableMovesAreSameWhenRotating()
        {
            var board    = builder.FromTypeGrid("0111 0011 1100 1100");
            var movesTop = new PlayLogic(board).AvailableMoves();

            board.RotateTo(Orientation.Right);
            var movesRight = new PlayLogic(board).AvailableMoves();

            board.RotateTo(Orientation.Left);
            var movesLeft = new PlayLogic(board).AvailableMoves();

            board.RotateTo(Orientation.Bottom);
            var movesBottom = new PlayLogic(board).AvailableMoves();

            CollectionAssert.AreEquivalent(movesTop, movesRight);
            CollectionAssert.AreEquivalent(movesTop, movesLeft);
            CollectionAssert.AreEquivalent(movesTop, movesBottom);
        }
Exemple #14
0
        public void AlonePieces()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 0 },
                { 1, 1, 0, 2 },
                { 1, 2, 1, 1 },
                { 0, 1, 1, 0 }
            });
            var logic = new PlayLogic(board);

            foreach (var coord in new Coord[] { c00, c11, c22 })
            {
                Assert.IsTrue(logic.IsAlone(coord));
            }

            foreach (var coord in new Coord[] { c01, c02, c12 })
            {
                Assert.IsFalse(logic.IsAlone(coord));
            }
        }
Exemple #15
0
        public void PiecesInAvailableMovesAreAlone()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 0 },
                { 1, 0, 0, 2 },
                { 1, 1, 1, 2 },
                { 0, 1, 1, 2 }
            });
            var logic       = new PlayLogic(board);
            var moves       = logic.AvailableMoves();
            var orientation = board.Orientation;

            foreach (var move in moves)
            {
                board.RotateTo(move.orientation);
                var matchingPieces = board.GetMatchingNeighbours(board.Get(move.coord));
                Assert.IsEmpty(matchingPieces);
                board.RotateTo(orientation);
            }
        }
        public void NewPieceHasExpectedSize()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 0 },
                { 2, 1, 0, 2 },
                { 1, 2, 1, 1 },
                { 0, 1, 1, 1 }
            });

            var game  = new Game(board, GameRules.ClassicRules, PieceType.GetRange(0, 3));
            var logic = new PlayLogic(board);

            foreach (var move in logic.AvailableMoves())
            {
                var simulator = MoveSimulator.FromPotentialMove(board, move, game.NextPieceIfPlaying(move));
                simulator.Simulate();
                var actions        = simulator.GetMove().consequences;
                var newPieceAction = actions.First(IsNewPieceAction) as NewPieceAction;
                Assert.AreEqual(simulator.oldPiece.size, newPieceAction.newPiece.size);
            }
        }
Exemple #17
0
        public void FindsDroppablesAbove()
        {
            var board = builder.FromTypeGrid(new int[, ] {
                { 0, 1, 2, 0 },
                { 1, 1, 0, 2 },
                { 1, 2, 1, 1 },
                { 0, 1, 1, 1 }
            });
            var logic = new PlayLogic(board);
            var tests = new Dictionary <Coord, Coord[]> {
                { c00, new Coord[] { c01, c02, c03 } },
                { c02, new Coord[] { c03 } },
                { c11, new Coord[] { c12, c13 } },
                { c20, new Coord[] { c22, c23, c32, c33 } }
            };

            foreach (var coord in tests.Keys)
            {
                var droppables = logic.GetDroppablesAbove(board.Get(coord));
                var expected   = board.GetAll(tests[coord]);
                CollectionAssert.AreEquivalent(expected, droppables);
            }
        }
        public void FallActionsFallPieceSizeRnd()
        {
            for (int i = 0; i < 50; i++)
            {
                var board = generator.GenerateRandom(4, 3);
                var game  = new Game(board, GameRules.ClassicRules, PieceType.GetRange(0, 3));

                var logic = new PlayLogic(board);
                foreach (var potentialMove in logic.AvailableMoves())
                {
                    var simulator = MoveSimulator.FromPotentialMove(board, potentialMove, game.NextPieceIfPlaying(potentialMove));
                    simulator.Simulate();
                    var move        = simulator.GetMove();
                    var fallActions = move.consequences.Where(IsFallAction);
                    foreach (var action in fallActions)
                    {
                        var orientatedCoord = board.TransportCoord(potentialMove.coord, potentialMove.orientation);
                        var removedPiece    = board.Get(orientatedCoord);
                        Assert.AreEqual(removedPiece.size, (action as FallAction).rows,
                                        "Fall Action:\n" + action + ",\nboard:\n" + board + "\nmove:\n" + potentialMove);
                    }
                }
            }
        }
 void Awake()
 {
     m_Instance = this;
     topLimitParentObject = GameObject.Find(ConstantValue.TopLimitParenObjectName);
 }