не допускать наложения фотобоксов - PullRequest
0 голосов
/ 28 апреля 2019

Привет, поэтому я создал базовую игру, похожую на spcae invaders, я использую список, чтобы враги падали с верхней части экрана, и он отлично работает, за исключением того, что я получаю врагов, которые часто перекрывают друг друга, и мне было интересно, есть лиспособ установить его так, чтобы, если они чрезмерно расширяются, они либо удаляются, либо получают новое местоположение

private List<Invader> invaders = new List<Invader>(); 
        private List<Laser> lasers = new List<Laser>();

        int invaderNumber = 0;
        int score = 0;




    public Form1()
        {
            InitializeComponent();
        }



    private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            // moves the spacefighter up when clicked
            if (e.KeyCode.Equals(Keys.W)) 
            {
                if (SpaceFighter.Top > 0)
                {
                    SpaceFighter.Top = SpaceFighter.Top - 30;

                }
            }
            // moves the spacefighter left when clicked
            if (e.KeyCode.Equals(Keys.A))
            {
                if (SpaceFighter.Left > 0)
                {
                    SpaceFighter.Left = SpaceFighter.Left - 10;

                }
            }
            // moves the spacefighter right when clicked
            if (e.KeyCode.Equals(Keys.D))
            {
                if (SpaceFighter.Right < this.Width)
                {
                    SpaceFighter.Left = SpaceFighter.Left + 10;

                }
            }
            // moves the spacefighter down when clicked
            if (e.KeyCode.Equals(Keys.S))
            {
                if (SpaceFighter.Bottom < this.Height - 10)
                {
                    SpaceFighter.Top = SpaceFighter.Top + 10;

                }
            }
            // fires lasers when clicked
            if (e.KeyCode.Equals(Keys.Space))
            {
                this.lasers.Add(new Laser(this, SpaceFighter));
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            // introduces 5 enemies once the game starts
            if (invaderNumber > 4 )
                {
                    timer1.Enabled = false;
                    timer2.Enabled = true;
                }
                else
                {
                    invaders.Add(new Invader(this));
                    invaderNumber++;
                }






        }

        private void timer2_Tick(object sender, EventArgs e)
        {

            // detects if the enemy ship interacts with the spacefighter and ends the game if this happens
            invaders.RemoveAll(ship => ship.isDisposed);
            foreach(Invader ship in invaders)
            {
                ship.MoveInvader(this);
                if (SpaceFighter.Bounds.IntersectsWith(ship.ship.Bounds))
                {
                    timer2.Enabled = false;
                    timer3.Enabled = false;
                    timer4.Enabled = true;
                    listBox1.Items.Add(lblScore.Text + "          " + lblName.Text); // adds score to listbox
                    MessageBox.Show("You Lose!");
                    return;

                }
            }
            // detects if an enemy ship his hit by a laser
            lasers.RemoveAll(laser => laser.isDisposed);
            foreach (Laser laser in lasers)
            {
                laser.MoveLaser(this);
                foreach (Invader ship in invaders)
                {
                    if (laser.laser.Bounds.IntersectsWith(ship.ship.Bounds))
                    {
                        laser.isDisposed = true;
                        laser.laser.Dispose();
                        ship.ship.Image = SpaceInvaders.Properties.Resources.explosionGIF1;

                        score = score + 2; //adds 2 points to players score if enemy is hit
                        lblScore.Text = score.ToString(); //updates the score label


                    }
                }

            }



        }




        private void btnStart_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true; // activates timer 1
            timer3.Enabled = true; // activates timer 3
            btnStart.Visible = false; // hidesthe start button
            lblName.Text = txtName.Text;  
            txtName.Visible = false; // hides the textbox
            lblEnterName.Visible = false; // hides the enter name label
            SpaceFighter.Visible = true; // makes the spacefighter visible


            {
            if(s > 0)
            {

                s = s - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + s.ToString();
            }
            if(s == 0)
            {
                s = 59;
                m = m - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + s.ToString();
            }
            if(s < 10)
            {
                s = s - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + "0" + s.ToString();
            }
            if (m < 0)
            {
                m = 00;
                s = 00;
                timer3.Enabled = false;
                timer4.Enabled = true;
                listBox1.Items.Add(lblScore.Text + "          " + lblName.Text); // adds scores to lisbox
            }

        }
        }

        // code for the countdown clock
        int m = 2;
        int s = 60;
        private void timer3_Tick(object sender, EventArgs e)
        {
            if(s > 0)
            {

                s = s - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + s.ToString();
            }
            if(s == 0)
            {
                s = 59;
                m = m - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + s.ToString();
            }
            if(s < 10)
            {
                s = s - 1;
                lblTimer.Text = "0" + m.ToString() + ":" + "0" + s.ToString();
            }
            if (m < 0)
            {
                listBox1.Items.Add(lblScore.Text + "          " + lblName.Text); // adds score to list box
                timer4.Enabled = true;
            }
            if (m >= 0)
            {
                invaderNumber--;
                timer1.Enabled = true;
            }


        }

        private void Form1_Load(object sender, EventArgs e)
        {
            SpaceFighter.Visible = false; // hides the space fighter until the player starts the game
            listBox1.Visible = false;
            lblScoreTable.Visible = false;
            lblNameTable.Visible = false;
        }

        private void Timer4_Tick(object sender, EventArgs e)
        {
            lblTimer.Text = "00:00"; // sets game timer to 00:00
            timer3.Enabled = false; // disbales timer 3
            listBox1.Visible = true; // makes score card visible
            lblNameTable.Visible = true;
            lblScoreTable.Visible = true;
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...