Ejemplo n.º 1
0
        private Dictionary <Entity, int> CalculateCellsOffsets(GameFieldSize gameSettings)
        {
            GravityDirection         gravityDirection = _helper.Gravity;
            CellsMap                 map            = new CellsMap(EntityManager);
            Dictionary <Entity, int> offsettedCells = new Dictionary <Entity, int>();
            var i = new IntIterator(new IteratorSettings(0, gameSettings.Width - 1, 1));

            while (i.MoveNext())
            {
                var j = new IntIterator(new IteratorSettings(0, gameSettings.Height - 1, -(int)gravityDirection));
                while (j.MoveNext())
                {
                    if (map.GetCell(i, j, out var cell))
                    {
                        continue;
                    }

                    var k = new IntIterator(new IteratorSettings(
                                                j - (int)gravityDirection,
                                                IteratorSettings.GetTo(0, gameSettings.Height - 1, -(int)gravityDirection),
                                                -(int)gravityDirection));
                    while (k.MoveNext())
                    {
                        if (!map.GetCell(i, k, out var affectedCell))
                        {
                            continue;
                        }

                        if (!offsettedCells.TryGetValue(affectedCell, out var o))
                        {
                            offsettedCells[affectedCell] = 0;
                        }

                        offsettedCells[affectedCell] += (int)gravityDirection;
                    }
                }
            }

            return(offsettedCells);
        }
Ejemplo n.º 2
0
        public static void Main(params string[] commandLineArgs)
        {
            isDebugMode = commandLineArgs.Contains("-debug");
            gameForm.Show();
            var gameFieldSize = new GameFieldSize(gameForm.GameFieldSize.Height, gameForm.GameFieldSize.Width);

            var renderersLoader = new ResourcesLoader(Path.Combine(PathHelpers.RootPath, "Resources"),
                                                      playerSizesByStates,
                                                      enemiesSizesByBehavior);

            texturesRepository = renderersLoader.LoadTextures();
            var renderersSet = renderersLoader.LoadRenderers();

            gameRenderer = new GameRenderer(
                new PointF(gameForm.GameFieldSize.Width - (float)gameFieldSize.Width, (float)gameFieldSize.Height),
                renderersSet);

            var game = new GameModel(
                new RandomBehaviorEnemyFactory(enemiesSizesByBehavior,
                                               StandingEnemyBehavior.Creator(),
                                               FlyingEnemyBehavior.Creator(1),
                                               FlyingEnemyBehavior.Creator(2),
                                               RunningEnemyBehavior.Creator(1),
                                               RunningEnemyBehavior.Creator(1.5)),
                gameFieldSize, playerSizesByStates);

            gameForm.KeyDown += (_, args) => keyboardController.KeyPressed(args.KeyCode);
            gameForm.KeyUp   += (_, args) => keyboardController.KeyReleased(args.KeyCode);

            RedrawEnvironment();
            using var timer = new Timer { Interval = BetweenTicksDelay };
            timer.Tick     += (_, __) =>
            {
                game.Tick(keyboardController.ActiveAction);
                UpdateGameField(game);
            };

            timer.Start();
            Application.Run(gameForm);
        }