Pygame 4 ======================== In de vorige opgave werden reeds botsingen gedetecteerd tussen onze kogel en het vijandelijke ruimteschip. We speelden een geluid af als we raak geschoten hadden, maar helaas leek er iets niet te kloppen. Je geluid werd meermaals afgespeeld, en je zag ook meermaals 'hit' op het scherm verschijnen. Dit is omdat de kogel het ruimteschip raakte, maar zowel de kogel als de vijand verdwenen niet, waardoor de kogel het ruimteschip opnieuw bleef raken zolang ze elkaar overlapten. Opgave 25 --------- We passen in de code de gegevens die we bijhouden over het vijandelijk ruimteschip uit met het al dan niet in geraakt zijn van het vijandelijke ruimteschip. We gebruiken hiervoor een variabele van het type "bool". Hieronder vinden jullie de onvolledige code voor deze aanpassing. Bekijk de regels gemarkeerd met 'nieuw' aandachtig, en pas ze aan zodat een kogel de vijand slechts eenmaal raakt. .. literalinclude:: ex/opgave25.py Link naar :download:`opgave25.py ` Opgave 26 --------- Hoewel we in de vorige opdracht het ruimteschip raakten, veranderde er visueel niets aan het ruimteschip. .. image:: images/enemyship_slain.png Pas de code in opgave 25 aan zodat je na het raken van een vijandelijk ruimteschip, de nieuwe afbeelding gebruikt bij het tekenen van het vijandelijk ruimteschip. Dit doe je door: - De nieuwe afbeelding in te laden net zoals je de kogel, je eigen ruimteschip, en het vijandelijk ruimteschip nu al inlaadt. - Bij het raken van het ruimteschip, de afbeelding 'enemy' te vervangen door 'enemy_slain'. Meerdere kogels --------------- Je hebt vast gemerkt dat hoeveel je ook schiet, je slechts 1 kogel op het scherm kan doen verschijnen. De vorige kogel lijkt te verdwijnen zodra je een tweede maal schiet. De reden hiervoor is dat we ook slechts informatie over 1 kogel bijhouden in ons spel:: # Positie van de kogel, en verplaatsing van de kogel bullet_x = 0 bullet_y = 0 bullet_x_change = 0 bullet_y_change = 0 Je zou een tweede kogel kunnen toevoegen, door nieuwe variabelen te introduceren:: # Positie van kogel 2, en verplaatsing van kogel 2 bullet2_x = 0 bullet2_y = 0 bullet2_x_change = 0 bullet2_y_change = 0 Maar, dit zou snel problematisch worden als je vele kogels zou willen afvuren. Merk trouwens op, dat we eigenlijk niet alle gegevens per kogel hoeven bij te houden. We kunnen veronderstellen dat iedere kogel even snel vliegt, en dan per kogel enkel een nieuw paar x- en y-coördinaten bijhouden:: # Positie van de kogel, en verplaatsing van de kogel bullet_x_change = 0 bullet_y_change = 0 bullet1_x = 0 bullet1_y = 0 bullet2_x = 0 bullet2_y = 0 Hoewel dit de code een beetje eenvoudiger maakt, is ook deze code niet praktisch bruikbaar als je veel kogels wil kunnen afschieten. Wat we zouden willen doen, is zoveel kogels afschieten als we willen, en het programma de posities van alle kogels laten bijhouden. Dit kunnen we doen door gebruik te maken van een lijst:: # Positie van de kogel, en verplaatsing van de kogel bullet_x_change = 0 bullet_y_change = 0 # Een Python lijst waarin we de coördinaten van kogels bijhouden bullets = [ 0, 0, # bullet1_x, bullet1_y 0, 0, # bullet2_x, bullet2_y ] In sectie :ref:`Lijsten` leren we lijsten gebruiken. Nadien kunnen we die kennis gebruiken om ons spel uit te breiden met meerdere kogels.