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); }
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); }