示例#1
0
        public void Update()
        {
            if (Ship != null)
            {
                if ((DateTime.Now - lastSpawn).TotalMilliseconds >= SPAWN_INTERVAL)
                {
                    SpawnEnemy();
                }
            }

            for (int b = 0; b < Bullets.Count; b++)
            {
                Bullets[b].Update();
                Bullets[b].Clear();

                if (Bullets[b].IsInMap)
                {
                    bool hit = false;

                    for (int e = 0; e < Enemies.Count; e++)
                    {
                        if (Enemies[e].IsAtCoordinates(Bullets[b].X, Bullets[b].Y) ||
                            Enemies[e].IsAtCoordinates(Bullets[b].LastX, Bullets[b].LastY))
                        {
                            hit = true;

                            Explosions.Add(new Explosion(this, Bullets[b].X, Bullets[b].LastY));
                            if (Enemies[e].Hit())
                            {
                                DestroyedShips++;
                                Enemies[e].Explode();
                                Enemies[e].Delete();
                                Enemies.RemoveAt(e--);
                            }
                            break;
                        }
                    }

                    if (hit)
                    {
                        Bullets.RemoveAt(b--);
                        IncreaseScore(1);
                    }
                    else
                    {
                        Bullets[b].Redraw();
                    }
                }
                else
                {
                    Bullets.RemoveAt(b--);
                }
            }

            for (int e = 0; e < Enemies.Count; e++)
            {
                Enemies[e].Update();
                Enemies[e].Clear();

                if (Enemies[e].IsInMap)
                {
                    if (Ship != null)
                    {
                        bool hit = false;

                        int y = Enemies[e].Y;
                        foreach (int x in Enemies[e].GetXValues())
                        {
                            if (Ship.IsAtCoordinates(x, y) || Ship.WasAtCoordinates(x, y))
                            {
                                hit = true;
                                break;
                            }
                        }

                        if (hit)
                        {
                            Explosions.Add(new Explosion(this, Ship.X, Ship.Y));

                            Enemies[e].Explode();
                            Enemies[e].Delete();
                            Enemies.RemoveAt(e--);

                            Ship.Explode();
                            Ship.Delete();
                            Ship = null;
                            break;
                        }
                        else
                        {
                            Enemies[e].Redraw();
                        }
                    }

                    Enemies[e].Redraw();
                }
                else
                {
                    Enemies[e].Clear();
                    Enemies.RemoveAt(e--);
                }
            }

            for (int e = 0; e < Explosions.Count; e++)
            {
                Explosions[e].Update();
                Explosions[e].Clear();

                if (Explosions[e].IsFinished)
                {
                    Explosions.RemoveAt(e--);
                }
                else
                {
                    Explosions[e].Redraw();
                }
            }

            if (Ship != null)
            {
                Ship.Update();
                Ship.Clear();
                Ship.Redraw();
            }
        }