xxx Van Scratch naar Python xxx

Status: ai-alternatief, niet getest maar te complex

0 Wat gaan we leren?

In deze eerste les krijg je een overzicht van wat je in de komende weken gaat leren.

We gaan aan de slag met Python: een echte programmeertaal die je stap voor stap gaat begrijpen door te werken met bewegingen, logica en herhalingen.

🎯 Wat leer je in deze module?

🧠 Wat is het verschil met Scratch?

In Scratch gebruik je blokjes die je kunt slepen. In Python schrijf je zelf regels code.

Maar de logica is hetzelfde. Kijk maar:

In Scratch In Python
herhaal 10 keer for i in range(10):
als voorwaarde dan if voorwaarde:
zet x op 100 x = 100

📘 Belangrijke basisprincipes

Lees dit vast door, begrijp je het nog niet helemaal dan is er niets aan de hand want we gaan er in deze les in detail op in.

🔹 Inspringen (indentation)

Python gebruikt inspringen (meestal 4 spaties) om aan te geven welke regels bij elkaar horen.

if x > 10:
    print("x is groter dan 10")  # deze regel hoort bij de if
print("klaar")  # deze regel hoort NIET bij de if

🔹 Commentaar

Met een hekje # kun je uitleg toevoegen aan je code:

# Dit is commentaar – de computer doet hier niets mee
x = 5  # We geven x de waarde 5

🔹 If-statements

Met een if-statement laat je de computer beslissingen nemen:

if score >= 10:
    print("Je hebt gewonnen!")

🔹 Loops (herhalingen)

Met een for-loop kun je iets meerdere keren herhalen:

for i in range(5):
    print("Dit gebeurt 5 keer")

🛠️ Opdracht

xxx

📤 Inleveren

xxx

1 Installatie van Python (Thonny) en pygame

Voordat we kunnen beginnen met programmeren, moeten we een paar dingen installeren.

We gaan werken met Thonny, een eenvoudige Python-omgeving die speciaal geschikt is voor beginners.

Daarnaast gebruiken we pygame (of pygame zero) om visuele dingen zoals sprites en bewegingen toe te voegen aan onze code.

🎯 Leerdoelen

📥 Stap 1: Thonny installeren

Ga naar de officiële website van Thonny: https://thonny.org

Klik op de juiste downloadknop voor jouw besturingssysteem (Windows/macOS/Linux).

Na installatie kun je Thonny openen. Het ziet er ongeveer zo uit:

Thonny screenshot

🧩 Stap 2: pygame (zero) installeren

In Thonny ga je naar het menu Tools → Manage packages...

Typ daar pgzero in (dit is de naam van de pygame zero bibliotheek).

Klik op Install om het te installeren.

Installeren van pgzero

📂 Stap 3: Startcode downloaden en uitvoeren

Download de startcode via de volgende link:

📥 startcode-python-scratch.zip

Pak het zip-bestand uit op een logische plek, bijvoorbeeld je bureaublad.

Open het bestand student.py in Thonny.

Druk op de groene Run-knop ▶️ om het programma uit te voeren.

🧠 Uitleg van de structuur

🛠️ Opdracht

📤 Inleveren

Maak een screenshot van het programma in actie (groene stip of sprite op het scherm zichtbaar).

Maak ook een screenshot van je Thonny-scherm met geopende code.

2 De stuiterbal

In deze les maken we een simpele animatie: een groene bal beweegt naar rechts en stuitert terug zodra hij de rand raakt.

Hiermee leer je hoe Python werkt met inspringing (indentation) en vergelijk je dat met hoe Scratch blokken groepeert.

🎯 Leerdoelen

🟢 Voorbeeldcode

from pgzrun import go
from pygame import Rect

WIDTH = 600
HEIGHT = 400

x = 100
y = 200
richting = "rechts"

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 30, "green")

def update():
    global x, richting
    if richting == "rechts":
        x += 5
    if x >= WIDTH:
        richting = "links"
    if richting == "links":
        x -= 5

go()

ℹ️ Uitleg van de code

🔁 Vergelijking met Scratch

Scratch Python
als x > 500 dan
⤷ verander richting
if x > 500:
    richting = "links"
herhaal steeds def update():

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van je bal terwijl hij stuitert.

Schrijf in je eigen woorden wat if x >= WIDTH: doet, en wat er zou gebeuren als je de inspringing vergeet.

3 De stuiterbal – heen en weer

In deze les laten we de bal netjes heen en weer bewegen tussen de linker- en rechterrand van het scherm.

Je leert hoe je if-statements en vergelijkingsoperatoren combineert om dit voor elkaar te krijgen.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go

WIDTH = 600
HEIGHT = 400

x = 100
y = 200
richting = "rechts"

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 30, "green")

def update():
    global x, richting
    if richting == "rechts":
        x += 5
        if x >= WIDTH - 30:
            richting = "links"
    if richting == "links":
        x -= 5
        if x <= 30:
            richting = "rechts"

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van het spel waarin de bal duidelijk een andere richting op beweegt.

Schrijf in één zin uit waarom er twee if-blokken zijn en wat hun functie is.

4 De vierkante beweging

In deze les gaan we de sprite laten bewegen in een vierkant patroon: eerst naar rechts, dan naar beneden, dan naar links en dan weer omhoog.

Je leert hoe je meerdere richtingen beheert met `if`-statements en hoe je beweging op basis van coördinaten controleert.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go

WIDTH = 600
HEIGHT = 400

x = 100
y = 100
richting = "rechts"

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 30, "orange")

def update():
    global x, y, richting

    if richting == "rechts":
        x += 5
        if x >= 500:
            richting = "beneden"
    elif richting == "beneden":
        y += 5
        if y >= 300:
            richting = "links"
    elif richting == "links":
        x -= 5
        if x <= 100:
            richting = "boven"
    elif richting == "boven":
        y -= 5
        if y <= 100:
            richting = "rechts"

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van het spel waarin je sprite zich in een vierkant beweegt.

Schrijf in één zin hoe de richting wordt aangepast en waarom de sprite stopt of draait bij een bepaalde waarde.

5 Vierkant met sprongen op elke hoek

In deze les voegen we sprongen toe aan het vierkante bewegingspatroon.

Telkens als de sprite een hoek bereikt, laat hij een korte sprong omhoog en omlaag zien.

We gebruiken een for-loop om deze herhaalde sprongbeweging te programmeren.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go
import time

WIDTH = 600
HEIGHT = 400

x = 100
y = 100
richting = "rechts"

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 30, "orange")

def spring():
    global y
    for i in range(5):
        y -= 10
        time.sleep(0.05)
        y += 10
        time.sleep(0.05)

def update():
    global x, y, richting

    if richting == "rechts":
        x += 5
        if x >= 500:
            richting = "beneden"
            spring()
    elif richting == "beneden":
        y += 5
        if y >= 300:
            richting = "links"
            spring()
    elif richting == "links":
        x -= 5
        if x <= 100:
            richting = "boven"
            spring()
    elif richting == "boven":
        y -= 5
        if y <= 100:
            richting = "rechts"
            spring()

go()

ℹ️ Uitleg van de code

🔁 Vergelijking met Scratch

Scratch Python
herhaal 5 keer
⤷ verander y met -10
⤷ wacht 0.05 sec
⤷ verander y met 10
for i in range(5):     y -= 10     sleep(0.05)     y += 10

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van je sprite bij een hoek van het vierkant.

Schrijf in één zin uit wat de for-loop doet in de functie spring().

6 Spring vaker op twee hoeken

In deze les laat je de sprite alleen op bepaalde hoeken van het vierkant springen. Zo leer je hoe je voorwaardelijke logica (if-statements) combineert met herhaling (loops).

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go
import time

WIDTH = 600
HEIGHT = 400

x = 100
y = 100
richting = "rechts"

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 30, "purple")

def spring():
    for i in range(3):
        global y
        y -= 15
        time.sleep(0.05)
        y += 15
        time.sleep(0.05)

def update():
    global x, y, richting

    if richting == "rechts":
        x += 5
        if x >= 500:
            richting = "beneden"
            spring()
    elif richting == "beneden":
        y += 5
        if y >= 300:
            richting = "links"
            # geen sprong hier
    elif richting == "links":
        x -= 5
        if x <= 100:
            richting = "boven"
            spring()
    elif richting == "boven":
        y -= 5
        if y <= 100:
            richting = "rechts"
            # geen sprong hier

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van de sprite terwijl hij springt bij één van de actieve hoeken.

Beschrijf in 1 of 2 zinnen hoe je bepaalt waar de sprong wel of niet plaatsvindt.

7 Spiraal – stap 1

In deze les gaan we de sprite in een spiraal laten bewegen. Bij elke stap draait hij een hoek op, en de afstand die hij aflegt blijft (voor nu) steeds hetzelfde.

Het effect: een vierkante spiraalvormige beweging.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go
import time

WIDTH = 600
HEIGHT = 400

x = 300
y = 200
richting = "rechts"
afstand = 50

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 20, "blue")

def update():
    global x, y, richting, afstand

    if richting == "rechts":
        x += afstand
        richting = "beneden"
    elif richting == "beneden":
        y += afstand
        richting = "links"
    elif richting == "links":
        x -= afstand
        richting = "boven"
    elif richting == "boven":
        y -= afstand
        richting = "rechts"

    time.sleep(0.4)  # animatie vertragen

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van de sprite tijdens de spiraalbeweging.

Schrijf in één zin uit wat er gebeurt als je richting niet telkens verandert.

8 Spiraal – stap 2

In deze les ga je de sprite niet alleen in een spiraal laten bewegen, maar bij elke stap ook de afstand iets kleiner maken.

Het resultaat is een spiraal die langzaam naar het midden krult.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go
import time

WIDTH = 600
HEIGHT = 400

x = 300
y = 200
richting = "rechts"
afstand = 80

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 20, "teal")

def update():
    global x, y, richting, afstand

    if richting == "rechts":
        x += afstand
        richting = "beneden"
    elif richting == "beneden":
        y += afstand
        richting = "links"
    elif richting == "links":
        x -= afstand
        richting = "boven"
    elif richting == "boven":
        y -= afstand
        richting = "rechts"

    afstand -= 5  # afstand verkleinen bij elke stap
    if afstand <= 0:
        afstand = 0  # stop op 0, anders negatief

    time.sleep(0.4)

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van jouw spiraal tijdens of net voor het einde van de beweging.

Schrijf kort op hoe de afstand -= 5 regel het gedrag van de sprite beïnvloedt.

8 Spiraal – stap 2

In deze les ga je de sprite niet alleen in een spiraal laten bewegen, maar bij elke stap ook de afstand iets kleiner maken.

Het resultaat is een spiraal die langzaam naar het midden krult.

🎯 Leerdoelen

🟢 Codevoorbeeld

from pgzrun import go
import time

WIDTH = 600
HEIGHT = 400

x = 300
y = 200
richting = "rechts"
afstand = 80

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 20, "teal")

def update():
    global x, y, richting, afstand

    if richting == "rechts":
        x += afstand
        richting = "beneden"
    elif richting == "beneden":
        y += afstand
        richting = "links"
    elif richting == "links":
        x -= afstand
        richting = "boven"
    elif richting == "boven":
        y -= afstand
        richting = "rechts"

    afstand -= 5  # afstand verkleinen bij elke stap
    if afstand <= 0:
        afstand = 0  # stop op 0, anders negatief

    time.sleep(0.4)

go()

ℹ️ Uitleg van de code

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van jouw spiraal tijdens of net voor het einde van de beweging.

Schrijf kort op hoe de afstand -= 5 regel het gedrag van de sprite beïnvloedt.

9 Spiraal – stap 3

Tot nu toe liet je de sprite bewegen in een steeds kleinere spiraal. In deze les leer je hoe je het programma automatisch laat stoppen met een break-statement.

Zo kun je zelf bepalen wanneer een herhaling moet stoppen op basis van een voorwaarde.

🎯 Leerdoelen

🟢 Codevoorbeeld

import pgzrun
import time

WIDTH = 600
HEIGHT = 400

x = 300
y = 200
richting = "rechts"
afstand = 80

bewegingen = []

def draw():
    screen.clear()
    screen.draw.filled_circle((x, y), 20, "green")

def update():
    global x, y, richting, afstand

    if afstand <= 5:
        print("Spiraal gestopt.")
        exit()

    if richting == "rechts":
        x += afstand
        richting = "beneden"
    elif richting == "beneden":
        y += afstand
        richting = "links"
    elif richting == "links":
        x -= afstand
        richting = "boven"
    elif richting == "boven":
        y -= afstand
        richting = "rechts"

    afstand -= 5
    time.sleep(0.4)

pgzrun.go()

ℹ️ Uitleg van de code

🔁 Variant met while-loop en break

while True:
    if afstand <= 5:
        break
    # beweging uitvoeren
    ...

🛠️ Opdracht

💡 Extra uitdaging

📤 Inleveren

Maak een screenshot van de laatste positie van de sprite vóór het stoppen.

Schrijf in één zin uit waarom en wanneer de break of exit() wordt uitgevoerd.

10 Reflectie: wat heb je geleerd?

Je hebt in de afgelopen lessen veel geleerd over programmeren met Python. In deze afsluitende les kijk je terug op wat je hebt gedaan, wat je hebt geleerd en waar je nog verder in wilt groeien.

Door hierover na te denken, wordt je bewuster van je eigen leerproces en kun je gerichter verder leren.

🎯 Leerdoelen

🛠️ Reflectieopdracht

Beantwoord de volgende vragen in een apart document of onderaan je Python-bestand als commentaar.

📎 Extra vragen (optioneel)

📤 Inleveren

📄 Voorbeeld van reflectie als commentaar

# Reflectie:
# Ik vond het leuk dat je de sprite kon laten bewegen met steeds kleinere stappen.
# Het lastigst vond ik de richting goed laten wisselen, maar met hulp lukte het.
# Ik heb geleerd hoe je loops en if-statements kunt combineren.
# Ik ben trots dat mijn spiraal echt stopt aan het eind.
# Volgende keer wil ik proberen met meerdere sprites te werken.

---

1 Thonny installeren

🛠️ Je moet eerst Thonny installeren. Dat is een eenvoudige Python-omgeving voor beginners.
Ga naar https://thonny.org en volg de installatie-instructies voor jouw besturingssysteem (Windows, Mac of Linux).

📦 Als Thonny geïnstalleerd is, kun je het openen en een nieuw Python-bestand aanmaken. Plak onderstaande code in je bestand:

import pygame
import time

# Begin pygame en maak scherm
pygame.init()
screen = pygame.display.set_mode((500, 500))

# Laad een afbeelding (zorg dat 'bal.png' in dezelfde map staat)
ball = pygame.image.load("bal.png")
x = 100
y = 100

# Oneindige lus (druk op sluiten om te stoppen)
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # Wis het scherm
    screen.fill((255, 255, 255))

    # Teken de bal
    screen.blit(ball, (x, y))

    # Verplaats de bal
    x += 1
    y += 1

    # Wacht even en werk het scherm bij
    pygame.display.flip()
    time.sleep(0.01)

pygame.quit()

🖼️ Je hebt een afbeelding nodig met de naam bal.png in dezelfde map als je script. Maak bijvoorbeeld een klein rondje in Paint of een andere tekenapp, sla het op als bal.png en zet het in dezelfde map.

✅ Klaar? Druk op Run (de groene afspeelknop) in Thonny. Als het goed is, zie je een venster waarin een bal diagonaal beweegt.


Revision #9
Created 22 May 2025 13:04:06 by Max
Updated 14 June 2025 20:38:29 by Max