<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Sessie 7: Bug Zapper :: CoderDojo Python &amp; Pygame</title><link>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/index.html</link><description>Bugs vallen van boven naar beneden. Jij schiet omhoog om ze te raken. In deze sessie leer je OOP: je schrijft je eerste eigen klasse (Bug), en daarna twee subklassen: een die slingert en een die op je duikt. Klassen zijn de bouwstenen van bijna alle grote programma’s.
Wat je vandaag leert Een klasse schrijven met __init__ en eigen methoden Overerving: een subklasse die een bestaande klasse uitbreidt Bullets (kogels) bijhouden in een lijst Botsingsdetectie tussen kogels en bugs Stap 0: Installeren Open Thonny. Download de starter via deze link, pak de ZIP uit en open main.py in Thonny. Klik op Run. Je ziet een scherm met een speler onderaan, maar nog geen bugs en geen kogels. Problemen? Vraag een coach. Stap 1: Bugs spawnen en schieten De Bug-klasse</description><generator>Hugo</generator><language>nl</language><atom:link href="https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/index.xml" rel="self" type="application/rss+xml"/><item><title>Sessie 7: Coach-notities</title><link>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/mentor-notes/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/mentor-notes/index.html</guid><description>Doel van deze sessie Aan het einde van de Basic checkpoint kan een ninja:
Een klasse schrijven met __init__, attributen en een update()-methode. Bugs instantiëren en in een lijst bijhouden. Botsingsdetectie toepassen tussen kogels en bugs. Wat niet verwacht wordt na sessie 7: subklassen, math.sin-beweging, DuikBug. Die zijn Stretch/Expert-materiaal.
Voorbereiding (30 min vóór de sessie) Klassen uitleggen in 5 minuten op de projector. Dit is het belangrijkste nieuwe concept. Gebruik een eenvoudig voorbeeld: class Hond: met self.naam en een blaf()-methode. Vraag ninjas naar analogieën. import math staat al in de starter, dus ninjas hoeven dat niet zelf te zoeken voor Stap 3. Controleer de spawn-timer in de starter (standaard elke 90 frames). Pas dit aan als de moeilijkheidsgraad niet klopt voor je groep. Tijdsindeling (3 uur) Tijd Activiteit 0:00 tot 0:10 Welkom, terugblik sessie 6 0:10 tot 0:25 Projector: uitleg klassen en instanties 0:25 tot 1:30 Zelfstandig werken: stap 1 en 2 1:30 tot 2:15 Stretch (SlingerBug) 2:15 tot 2:45 Expert (DuikBug) + buffer 2:45 tot 3:00 Showcase + cliffhanger Veelgestelde vragen “AttributeError: ‘Bug’ object has no attribute ‘alive’” self.alive = True ontbreekt in __init__. Laat de ninja __init__ controleren: is het inspringing correct? Staat self. voor alive?</description></item><item><title>Sessie 7: Cheatsheet</title><link>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/cheatsheet/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/cheatsheet/index.html</guid><description>Klasse schrijven class Bug: def __init__(self, x, y): self.x = x self.y = y self.alive = True def update(self): self.y += 2 def draw(self, screen): pygame.draw.circle(screen, GREEN, (int(self.x), int(self.y)), 15) Klasse gebruiken mijn_bug = Bug(200, 0) # aanmaken mijn_bug.update() # methode aanroepen mijn_bug.draw(screen) Subklasse (overerving) class SlingerBug(Bug): def __init__(self, x, y): super().__init__(x, y) # roept Bug.__init__ aan self.timer = 0 def update(self): # overschrijft Bug.update self.timer += 0.05 self.x = self.start_x + math.sin(self.timer) * 60 self.y += 1.5 math.sin voor slingeren import math self.x = start_x + math.sin(timer) * amplitude # timer ophogen elke frame: timer += 0.05 Kogels bijhouden bullets = [] # Aanmaken: bullets.append(pygame.Rect(x - 3, y - 20, 6, 12)) # Bewegen: for b in bullets[:]: b.y -= 10 if b.y &lt; 0: bullets.remove(b) Botsing kogel ↔ bug bug_rect = pygame.Rect(bug.x - 15, bug.y - 15, 30, 30) for bullet in bullets[:]: if bullet.colliderect(bug_rect): bug.alive = False bullets.remove(bullet) score += 1 break Spawn-timer met USEREVENT SPAWN = pygame.USEREVENT + 1 pygame.time.set_timer(SPAWN, 1500) # elke 1,5 seconden for event in pygame.event.get(): if event.type == SPAWN: bugs.append(Bug(random.randint(30, WIDTH - 30), -20))</description></item><item><title>Sessie 7: Demo opname</title><link>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/demo/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://python.coderdojohasselt.be/sessions/python/07-bug-zapper/demo/index.html</guid><description>Sessie 7 gebruikt pure pygame. Toon een GIF van de oplossing op de sessiepagina.
Hoe opnemen Run de oplossing: cd code/sessions/07-bug-zapper/solution &amp;&amp; python main.py. Gebruik een schermrecorder: Linux: Peek of SimpleScreenRecorder. Windows: ScreenToGif. macOS: QuickTime → exporteer naar GIF via ffmpeg of Kap. Neem ~15 seconden op: toon een gewone Bug, een SlingerBug en een DuikBug worden neergeschoten. Sla op als bug-zapper.gif in static/sessions/07-bug-zapper/. Verwijs ernaar in de worksheet via: ![Demo](/sessions/07-bug-zapper/bug-zapper.gif). Mikgrootte: ~800×500 pixels, ≤ 2 MB.</description></item></channel></rss>