/// <summary>
        /// Performs all bullet and player/alien collision detection.  Also handles game logic
        /// when a hit occurs, such as killing something, adding score, ending the game, etc.
        /// </summary>
        void CheckHits()
        {
            if (gameOver)
            {
                return;
            }

            for (int i = 0; i < playerBullets.Count; ++i)
            {
                if (playerBullets[i].IsAlive == false)
                {
                    continue;
                }

                for (int a = 0; a < aliens.Count; ++a)
                {
                    if (aliens[a].IsAlive == false)
                    {
                        continue;
                    }

                    if ((playerBullets[i].Position.X >= aliens[a].Position.X && playerBullets[i].Position.X <= aliens[a].Position.X + aliens[a].Width) && (playerBullets[i].Position.Y >= aliens[a].Position.Y && playerBullets[i].Position.Y <= aliens[a].Position.Y + aliens[a].Height))
                    {
                        playerBullets[i].IsAlive = false;
                        aliens[a].IsAlive        = false;

                        hitStreak++;

                        player.Score += aliens[a].Score * (hitStreak / 5 + 1);

                        if (player.Score > highScore)
                        {
                            highScore = player.Score;
                        }

                        if (player.Score > nextLife)
                        {
                            player.Lives++;
                            nextLife += nextLife;
                        }

                        levelKillCount--;
                        if (levelKillCount <= 0)
                        {
                            AdvanceLevel();
                        }

                        particles.CreateAlienExplosion(new Vector2(aliens[a].Position.X + aliens[a].Width / 2, aliens[a].Position.Y + aliens[a].Height / 2));

                        alienDied.Play();
                    }
                }
            }

            if (player.IsAlive == false)
            {
                return;
            }

            for (int i = 0; i < alienBullets.Count; ++i)
            {
                if (alienBullets[i].IsAlive == false)
                {
                    continue;
                }

                if ((alienBullets[i].Position.X >= player.Position.X + 2 && alienBullets[i].Position.X <= player.Position.X + player.Width - 2) && (alienBullets[i].Position.Y >= player.Position.Y + 2 && alienBullets[i].Position.Y <= player.Position.Y + player.Height))
                {
                    alienBullets[i].IsAlive = false;

                    player.IsAlive = false;

                    hitStreak = 0;

                    player.RespawnTimer = 3.0f;
                    particles.CreatePlayerExplosion(new Vector2(player.Position.X + player.Width / 2, player.Position.Y + player.Height / 2));

                    playerDied.Play();

                    if (player.Lives <= 0)
                    {
                        gameOver = true;
                    }
                }
            }
        }