Пример #1
0
        /*De volgende methode bepaalt door welke power-up wordt geroept/gespawnt.
        *  De x waarde wordt zo gekozen dat deze in het midden van het scherm zit.*/
        public void CreateNewPowerUp()
        {
            pwp = null;
            Random rnd    = new Random();
            short  choice = (short)rnd.Next(2); //Kiest een willekeurige waarde: 0, 1 of 2. Aan de hand hiervan bepalen we wat voor soort powerup we krijgen.
            short  x      = (short)((rnd.NextDouble() * (blueFrontLine - screenwidth / 4 - redFrontLine) + redFrontLine + screenwidth / 4) - pwpWidth);
            short  y      = (short)Math.Round(rnd.NextDouble() * (screenheight - pwpHeight));

            switch (choice)
            {
            case 0:
                powerUpSprite = PU_Plus;
                break;

            case 1:
                powerUpSprite = PU_Speed;
                break;

            case 2:
                powerUpSprite = PU_Heart;
                break;
            }
            pwp = new PowerUp(x, y, powerUpSprite);
        }
Пример #2
0
        //Met deze functie voeren we veranderingen van plaats op een bal uit.
        public void ExecuteBallPhysics(short id, GameTime gameTime)
        {
            if (!IsGameEnded()) //We willen niet dat dit allemaal nog uitgevoerd wordt als het spel al afgelopen is.
            {
                ballRect     = new Rectangle((int)objBall[id].Position.X, (int)objBall[id].Position.Y, ballWidth, ballHeight);
                ballNextRect = new Rectangle((int)(CalculateNewballPos(id).X), (int)(CalculateNewballPos(id).Y), ballWidth, ballHeight);
                //ballRect is de vierhoek waar de bal zich nu in bevindt. ballNextRect is de vierhoek waar de bal zich de volgende frame in zal bevinden.

                bluePlayerRect = new Rectangle(objBluePlayer.X, objBluePlayer.Y, playerWidth, playerHeight);
                redPlayerRect  = new Rectangle(objRedPlayer.X, objRedPlayer.Y, playerWidth, playerHeight);

                objBall[id].Position = CalculateNewballPos(id);
                objBall[id].Speed   += ballAcceleration * (float)gameTime.ElapsedGameTime.TotalSeconds;
                //Dit zorgt er voor dat de bal versnelt.

                float x = objBall[id].Position.X;
                float y = objBall[id].Position.Y;

                //Wat we allereerst controleren, is of een speler een punt heeft gescoord.
                if (x > blueScoreLine)
                {
                    blueLives--;
                    miss.Play();
                    ResetGame();
                }
                if (x < redScoreLine)
                {
                    redLives--;
                    miss.Play();
                    ResetGame();
                }

                //Met de volgende paar if-statements zorgen we er voor dat de bal stuitert als deze tegen een muur
                //of tegen de balk van speler aankomt.
                if (ballNextRect.Y >= screenheight - ballHeight || y <= 0)
                {
                    Bounce(id, false);
                    wall.Play();
                }
                if (ballNextRect.Intersects(bluePlayerRect) || ballRect.Intersects(bluePlayerRect))
                {
                    objBall[id].Position = new Vector2(objBall[id].Position.X - 10, objBall[id].Position.Y);
                    Bounce(id, true);
                    paddle.Play();
                }
                if (ballNextRect.Intersects(redPlayerRect) || ballRect.Intersects(redPlayerRect))
                {
                    objBall[id].Position = new Vector2(objBall[id].Position.X + 10, objBall[id].Position.Y);
                    Bounce(id, true);
                    paddle.Play();
                }
                //De volgende verklaring checkt regelmatig of de bal een power up raakt of niet.
                if (pwp != null)
                {
                    pwpRect = new Rectangle(pwp.X, pwp.Y, pwp.Sprite.Width, pwp.Sprite.Height);
                    if (ballNextRect.Intersects(pwpRect))
                    {
                        if (pwp.Sprite == PU_Heart)
                        {
                            if (redLives < 5)
                            {
                                redLives++;
                            }
                            if (blueLives < 5)
                            {
                                blueLives++;
                            }
                        }
                        else if (pwp.Sprite == PU_Speed)
                        {
                            objBall[id].Speed += 2;
                        }
                        else if (pwp.Sprite == PU_Plus && amountOfBalls < 5)
                        {
                            //Met de code hieronder maken we een in onze array een nieuwe bal aan die id amountOfBalls meekrijgt
                            //(dus altijd een nog niet bezette id). De richting van de bal is gelijk aan de helft van de richting van
                            //de bal die deze powerup aanraakte, de snelheid is gelijk aan de snelheid van de bal die de powerup aanraakte
                            //maar dan 2 pixels per frame minder, en de positie is gelijk aan de positie van de bal die deze powerup aanraakte.
                            objBall[amountOfBalls] = new Ball((int)(0.5 * objBall[id].Direction), objBall[id].Speed - 2, objBall[id].Position);
                            amountOfBalls         += 1;
                        }
                        pwp = null;
                    }
                }
            }
        }