public void PickUp(IGameComponent item)
        {
            if (item.Type == GameComponentType.Apple)
            {
                Apples.Remove((IFoodComponent)item);
            }

            _drawableObjs.Remove(item);
        }
Exemple #2
0
        private void DoWithPackman()
        {
            //подбор яблок
            foreach (var a in Apples)
            {
                if (AllCollision.BoxCollides(kolobok.X, kolobok.Y, 20, 20, a.X, a.Y, 15, 15))
                {
                    Apples.Remove(a);
                    GameCount++;
                    CreateApples();
                    break;
                }
            }

            //столкновение пакмена с границей
            switch (kolobok.TankDirection)
            {
            case Direction.Left:
                if (kolobok.X - 1 < 0)
                {
                    kolobok.TurnAround();
                }
                break;

            case Direction.Right:
                if (kolobok.X + 21 > _fieldWidth)
                {
                    kolobok.TurnAround();
                }
                break;

            case Direction.Up:
                if (kolobok.Y - 1 < 0)
                {
                    kolobok.TurnAround();
                }
                break;

            case Direction.Down:
                if (kolobok.Y + 21 > _fieldHeight)
                {
                    kolobok.TurnAround();
                }
                break;
            }

            //столкновение пакмена со стеной
            foreach (var a in Walls)
            {
                bool wallFlag = false;
                switch (kolobok.TankDirection)
                {
                case Direction.Left:
                    if (AllCollision.BoxCollides(kolobok.X - 1, kolobok.Y, 20, 20, a.XLeft, a.YUp, a.XRight - a.XLeft, a.YDown - a.YUp))
                    {
                        wallFlag = true;
                    }
                    break;

                case Direction.Right:
                    if (AllCollision.BoxCollides(kolobok.X + 1, kolobok.Y, 20, 20, a.XLeft, a.YUp, a.XRight - a.XLeft, a.YDown - a.YUp))
                    {
                        wallFlag = true;
                    }
                    break;

                case Direction.Up:
                    if (AllCollision.BoxCollides(kolobok.X, kolobok.Y - 1, 20, 20, a.XLeft, a.YUp, a.XRight - a.XLeft, a.YDown - a.YUp))
                    {
                        wallFlag = true;
                    }
                    break;

                case Direction.Down:
                    if (AllCollision.BoxCollides(kolobok.X, kolobok.Y + 1, 20, 20, a.XLeft, a.YUp, a.XRight - a.XLeft, a.YDown - a.YUp))
                    {
                        wallFlag = true;
                    }
                    break;
                }
                if (wallFlag)
                {
                    kolobok.TurnAround();
                }
            }

            // столкновение пакмена с пулей или танком
            foreach (var a in Projectiles)
            {
                if (AllCollision.BoxCollides(kolobok.X, kolobok.Y, 20, 20, a.X, a.Y, 10, 10))
                {
                    GameOver();
                }
            }

            foreach (var a in Tanks)
            {
                if (AllCollision.BoxCollides(kolobok.X, kolobok.Y, 20, 20, a.X, a.Y, 20, 20))
                {
                    GameOver();
                }
            }
        }
        private void Collision(float dt)
        {
            var delWalls   = new List <WallViewModel>();
            var delTanks   = new List <TankViewModel>();
            var delApples  = new List <AppleViewModel>();
            var delBullets = new List <BulletViewModel>();

            if (IsGame)
            {
                DynamicEntity player = Player.Clone() as DynamicEntity;
                player.Move(dt);

                if (ObjectInScreen(player) &&
                    Rivers.Find(river => IsCollision(river, player)) == null &&
                    Walls.Find(wall => IsCollision(wall, player)) == null)
                {
                    bool isFree = true;

                    foreach (var tank in Tanks)
                    {
                        if (IsCollision(tank, player))
                        {
                            isFree = false;
                            CreateBang(player);
                            GameOver();
                        }
                    }

                    if (isFree)
                    {
                        Player.Move(dt);
                    }
                }

                Apples.ForEach(apple =>
                {
                    if (IsCollision(player, apple))
                    {
                        delApples.Add(apple);
                        Score++;
                    }
                });
            }

            Tanks.ForEach(t =>
            {
                t.Move(dt);
                if (!ObjectInScreen(t) ||
                    Walls.Find(wall => IsCollision(wall, t)) != null ||
                    Rivers.Find(river => IsCollision(river, t)) != null ||
                    Tanks.Find(tnk => tnk != t ? IsCollision(tnk, t) : false) != null)
                {
                    t.ChangeDirection();
                    t.Move(dt);
                }
            });

            Bullets.ForEach(bullet =>
            {
                bool delBullet = false;

                if (!ObjectInScreen(bullet))
                {
                    delBullet = true;
                }

                Walls.ForEach(wall =>
                {
                    if (IsCollision(bullet, wall))
                    {
                        if (wall.Destroyable)
                        {
                            delWalls.Add(wall);
                        }
                        delBullet = true;
                        CreateBang(bullet);
                    }
                });

                Tanks.ForEach(tank =>
                {
                    if (IsCollision(tank, bullet) && bullet.Shooter != tank)
                    {
                        delBullet = true;
                        delTanks.Add(tank);
                        CreateBang(tank);
                    }
                });

                if (IsGame)
                {
                    if (IsCollision(bullet, Player) && bullet.Shooter != Player)
                    {
                        delBullet = true;
                        CreateBang(Player);
                        GameOver();
                    }
                }

                if (delBullet)
                {
                    delBullets.Add(bullet);
                }
                else
                {
                    bullet.Move(dt);
                }
            });

            delWalls.ForEach(wall => Walls.Remove(wall));
            delTanks.ForEach(tank => Tanks.Remove(tank));
            delApples.ForEach(apple => Apples.Remove(apple));
            delBullets.ForEach(bullet => Bullets.Remove(bullet));
        }