/*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); }
//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; } } } }