public virtual void Setup()
 {
     gridMock = new Mock <IEditableGameGrid>();
     //Setup good standard sizes.
     gridMock.Setup(m => m.Width).Returns(8);
     gridMock.Setup(m => m.Height).Returns(20);
     gameGridDecorator = new GameGridShapeDecorator(gridMock.Object);
 }
            public void WhenGridHasNoFullRowsNoneAreCleared()
            {
                var color  = Color.Red;
                var points = new List <ColouredPoint>()
                {
                    new ColouredPoint(color, new Point(0, 0)),
                    new ColouredPoint(color, new Point(1, 1))
                };

                gridMock = new Mock <IEditableGameGrid>();
                //Setup good standard sizes.
                gridMock.Setup(m => m.Width).Returns(5);
                gridMock.Setup(m => m.Height).Returns(5);
                gridMock.Setup(m => m.GetEnumerator()).Returns(points.GetEnumerator());
                gameGridDecorator = new GameGridShapeDecorator(gridMock.Object);

                var result = gameGridDecorator.ClearFullRows();

                Assert.AreEqual(0, result);
            }
            public void WhenGridHasTwoFullRowsBothAreClearedAndOthersMoveDown()
            {
                var color  = Color.Red;
                var points = new List <ColouredPoint>()
                {
                    new ColouredPoint(color, new Point(0, 4)),
                    new ColouredPoint(color, new Point(1, 4)),
                    new ColouredPoint(color, new Point(2, 4)),
                    new ColouredPoint(color, new Point(3, 4)),
                    new ColouredPoint(color, new Point(4, 4)),
                    new ColouredPoint(color, new Point(0, 3)),
                    new ColouredPoint(color, new Point(1, 3)),
                    new ColouredPoint(color, new Point(2, 3)),
                    new ColouredPoint(color, new Point(3, 3)),
                    new ColouredPoint(color, new Point(4, 3)),
                    new ColouredPoint(color, new Point(2, 2)),
                    new ColouredPoint(color, new Point(3, 1))
                };

                var pointsAfter = new List <ColouredPoint>()
                {
                    new ColouredPoint(color, new Point(2, 4)),
                    new ColouredPoint(color, new Point(3, 3))
                };

                //Due to complexity of this method use a real GameGrid.  Does increase chance of failure.
                var gameGrid = new GameGrid(5, 5);

                gameGrid.TryAdd(points);

                gameGridDecorator = new GameGridShapeDecorator(gameGrid);
                var result = gameGridDecorator.ClearFullRows();

                Assert.AreEqual(2, result, string.Format("Expected two rows to be removed but was {0}", result));
                Assert.AreEqual(2, gameGrid.Count(), string.Format("Expected two points remaining but there were {0}", gameGrid.Count()));
                pointsAfter.ForEach(p => Assert.Contains(p, gameGrid.ToList()));
            }
Example #4
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            var shapeFactory    = new TetrisShapeFactory(new Random());
            var colorFactory    = new ColorFactory(new Random());
            var gameGrid        = new GameGrid(8, 20);
            var previewGameGrid = new GameGrid(5, 5);
            var gameGridMgr     = new GameGridShapeDecorator(gameGrid);
            var gameController  = new GameController(gameGridMgr);
            var scoreManager    = new ScoreManager();

            Action updatePreviewPane = () =>
            {
                previewGameGrid.Clear();
                var nextShape  = shapeFactory.PeekNext();
                var nextColour = colorFactory.PeekNext();
                previewGameGrid.TryAdd(
                    Array.ConvertAll(nextShape.Points,
                                     p => new ColouredPoint(nextColour, p.Move(new Point((previewGameGrid.Width - 1) / 2, 3)))));
            };

            var form = new TetrisForm();

            form.PreviewGrid    = previewGameGrid;
            form.GameGrid       = gameGridMgr;
            form.GameController = gameController;
            form.ScoreManager   = scoreManager;

            gameGridMgr.SetShape(shapeFactory.GetNext(), colorFactory.GetNext());
            updatePreviewPane();

            Timer ticky = new Timer()
            {
                Interval = 500,
            };

            ticky.Tick += (a, b) =>
            {
                if (!gameGridMgr.MoveDown())
                {
                    if (!gameGridMgr.CommitShape())
                    {
                        ticky.Stop();
                        return;
                    }
                    gameGridMgr.SetShape(shapeFactory.GetNext(), colorFactory.GetNext());
                    updatePreviewPane();
                    scoreManager.ProcessShapeLanded();
                }
                var rows = gameGridMgr.ClearFullRows();
                if (rows > 0)
                {
                    scoreManager.ProcessRowsRemoved(rows);
                }

                form.Refresh();
            };
            ticky.Start();


            Application.Run(form);
        }