Exemple #1
0
        public static void NextLevel()
        {
            CancellationTokenSource.Cancel();
            Thread.Sleep(100);
            CancellationTokenSource = new CancellationTokenSource();

            if (Level != null)
            {
                Console.Clear();
            }

            GameScreen.SetLevelScreen();

            var nextLevel = (LevelType)Enum.Parse(typeof(LevelType),
                                                  _currentLevel > 9 ?
                                                  "_" + _currentLevel :
                                                  "_0" + _currentLevel);

            IsGameLevelRunning = true;
            Level = new Level(nextLevel);
            Level.Write();
            ScoreScreen.SideScreen(Level.Player1, Level.Type, Level.AITanks);
        }
Exemple #2
0
        private void AttachEvents(IEntity entity)
        {
            entity.MoveEvent += () =>
            {
                if (CheckPositionInMatrix(entity.Position))
                {
                    entity.IsHidden = false;
                    var  obstacles = GetObstacles(entity);
                    bool result    = !obstacles.Any() && CheckPositionInMatrix(entity.GetDirectionPosition());
                    foreach (var obstacle in obstacles)
                    {
                        result = entity.ApplyAffection(obstacle);
                        if (!result)
                        {
                            break;
                        }
                    }

                    if (entity is Player)
                    {
                        this._playerPosition = entity.Position;
                    }

                    if (entity is AI)
                    {
                        this.SpawnNextAI();
                    }

                    if (result)
                    {
                        //SetTankPosition(entity);
                    }

                    if (!IsPositionOccupied(entity))
                    {
                        return(false);
                    }

                    return(result);
                }
                else if (entity.EntityType == EntityType.Item)
                {
                    entity.IsDestroyed = true;
                    entity.Position    = this.GetPreviousPosition(entity);
                    if (!entity.IsHidden)
                    {
                        entity.Clear();
                    }
                    this.Layout[entity.Position.X, entity.Position.Y] = new Item(ItemType.Nothing, entity.Position);
                }
                return(false);
            };

            entity.DestroyEvent += () =>
            {
                if (entity is ITank)
                {
                    var tank = entity as ITank;

                    if (tank is AI)
                    {
                        Statistics.DestroyTankPoints(tank.Type);
                    }

                    if (tank.Lives > 0)
                    {
                        if (tank is Player)
                        {
                            this.Spawn(tank);
                        }
                    }
                    else if (Statistics.Player1Points % 50 == 0)
                    {
                        if (tank is AI)
                        {
                            this.SpawnItem(tank);
                        }
                    }

                    ScoreScreen.SideScreen(this.Player1, this.Type, this.AITanks);
                }
                else if (!(entity is Item) || (entity as Item).Type != ItemType.Projectile)
                {
                    this.Layout[entity.Position.X, entity.Position.Y] = new Item(ItemType.Nothing, entity.Position);
                }
                return(true);
            };

            if (entity is AI)
            {
                (entity as AI).AIDownEvent += () =>
                {
                    Entities.Remove(entity);
                    this.AIsSpawned--;
                    SpawnNextAI();
                };
            }
            return;
        }