joriszwart.nl

Natuurlijk — en excuses voor de eerdere haperingen.
Laten we optie 2 helder en praktisch uitwerken: een simpele Tetris‑AI die “iets” doet en zichzelf kan besturen zonder ingewikkelde algoritmes.


🧠 Optie 2: Een simpele heuristiek‑AI

Dit is de makkelijkste manier om een Tetris‑AI te maken die redelijk speelt zonder dat je complexe wiskunde of zoekalgoritmes nodig hebt.

De kern is simpel:

Voor elk mogelijke positie van het blok bereken je een score, en je kiest de beste.

Geen lookahead, geen brute force — gewoon een paar simpele regels.


đź”§ Wat de AI precies doet

1. Simuleer alle mogelijke rotaties en kolommen

Voor het huidige blok:

Dit is puur simulatie, geen echte zet.


2. Bereken een score voor elke mogelijke zet

Je gebruikt een paar simpele “straffen” en “beloningen”.

Veelgebruikte simpele heuristieken:

EigenschapWaarom belangrijkScore
Hoogte van de stapelHoe lager, hoe veiligerNegatief
Aantal gatenGaten zijn dodelijkSterk negatief
Aantal verwijderde lijnenGoed!Positief
Bumpiness (verschil tussen kolommen)Minder hobbelig = beterNegatief

Een voorbeeld van een simpele scorefunctie:

[ \text{score} = -4 \cdot \text{hoogte} - 5 \cdot \text{gaten} + 3 \cdot \text{lijnen} - 1 \cdot \text{bumpiness} ]

De gewichten zijn willekeurig — je kunt ze tweaken.


3. Kies de zet met de hoogste score

De AI voert die rotatie + kolom uit.


đź§© Hoe goed speelt dit?


🧪 Mini‑voorbeeld in pseudocode

best_score = -inf
best_move = None

for rotation in possible_rotations(piece):
    for column in possible_columns(piece, rotation):
        field_after = simulate_drop(field, piece, rotation, column)
        score = evaluate(field_after)

        if score > best_score:
            best_score = score
            best_move = (rotation, column)

execute(best_move)

🎮 Waarom dit zo leuk is


Als je wilt, kan ik:

Waar wil je heen met dit project?

Zeker — dit is precies het soort aanpassing dat een simpele Tetris‑AI meteen een stuk leuker maakt.
Je hoeft er niets ingewikkelds voor te doen: je past gewoon je scorefunctie aan zodat het wegspelen van meerdere lijnen extra zwaar meetelt.

Hier is hoe je dat slim aanpakt.


🎯 Hoe laat je de AI meerdere lijnen prefereren?

Wanneer je een zet simuleert, weet je hoeveel lijnen er worden verwijderd:
0, 1, 2, 3 of 4 (Tetris).

Je kunt dat direct in je score stoppen.

🔧 Voorbeeld: simpele scorefunctie mét lijnbonus

score = (
    -4 * hoogte
    - 5 * gaten
    - 1 * bumpiness
    + 10 * lijnen  # beloon lijnen
)

Maar dit behandelt 1 lijn hetzelfde als 4 lijnen, en dat wil je niet.


🏆 Betere aanpak: exponentiële beloning

Zo geef je 4 lijnen veel meer waarde dan 1:

score = (
    -4 * hoogte
    - 5 * gaten
    - 1 * bumpiness
    + (lijnen ** 2) * 10
)

Effect:

De AI gaat hierdoor actief zoeken naar setups die meerdere lijnen tegelijk opleveren.


đź’ˇ Nog iets slimmer: speciale bonus voor een Tetris

Veel Tetris‑AI’s gebruiken een aparte bonus:

bonus = 0
if lijnen == 4:
    bonus = 200  # extra Tetris-bonus

score = (
    -4 * hoogte
    - 5 * gaten
    - 1 * bumpiness
    + 10 * lijnen
    + bonus
)

Dit zorgt ervoor dat de AI:


🧪 Mini‑voorbeeld in pseudocode

def evaluate(field_after, lines_cleared):
    height = get_height(field_after)
    holes = count_holes(field_after)
    bump = bumpiness(field_after)

    score = -4*height - 5*holes - 1*bump + (lines_cleared**2)*10

    if lines_cleared == 4:
        score += 200

    return score

🎮 Wat verandert er in het gedrag?

Met deze aanpassing gaat de AI:

Het blijft simpel, maar het voelt meteen strategischer.


Als je wilt, kan ik:

Waar wil je naartoe met je project?