public void PickUp(IGameComponent item) { if (item.Type == GameComponentType.Apple) { Apples.Remove((IFoodComponent)item); } _drawableObjs.Remove(item); }
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)); }