1 2022-02-21: Pygame Tetris

1.1 Introductie

Vandaag implementeren we Tetris.

De GIT-repository is te vinden op:

https://github.com/takis-mosa/prog4-exercises/tree/main/src

Zorg dat de testen in test_t2_tetris.py werken.

Hiervoor dien je onder andere de methods van een class “Board” te implementeren.

Als je deze class geimplementeerd hebt, dien je een tweede class af te werken: “PygameBoard”. Deze erft van “Board” maar voegt de draw en draw_shape methods toe om respectievelijk het bord en de huidige blok te tekenen.

 1class Board:
 2    def __init__(self, width, height):
 3        pass
 4    
 5    # ...
 6
 7
 8class PygameBoard(Board):
 9    def draw(self):
10        pass
11
12    def draw_shape(self):
13        pass

Hier zie je de voorstelling van een leeg bord:

1
2data = [
3    [-1, -1, -1, -1],
4    [-1, -1, -1, -1],
5    [-1, -1, -1, -1],
6    [-1, -1, -1, -1],
7    [-1, -1, -1, -1],
8]

Hier zie je de voorstelling van een bord met 2 geplaatste blokken, linksonder een vierkante blok in kleur 4, en uiterst rechts een rechthoekige blok van 4 blokken hoog met kleur 2:

1
2data = [
3    [-1, -1, -1, +2],
4    [-1, -1, -1, +2],
5    [-1, -1, -1, +2],
6    [+4, +4, -1, +2],
7    [+4, +4, -1, +2],
8]

1.2 Vormen

In het bestand t2_tetris_shapes.py vind je de voorstellingen van alle Tetris blokken, inclusief alle rotaties van de blokken.

Hier zie je hoe de O vorm (vierkante blok) voorgesteld wordt:

1shape_o = [
2    [[1, 1], [1, 1]],
3]

Deze blok heeft slechts 1 rotatie.

Hier zie je hoe de I vorm (lange rechthoekige blok) voorgesteld wordt:

 1shape_i = [
 2    [
 3        [1],
 4        [1],
 5        [1],
 6        [1],
 7    ],
 8    [
 9        [1, 1, 1, 1],
10    ],
11]

Deze blok heeft 2 rotaties.

1.3 Kleuren

In het bestand t2_tetris_colors.py vind je de kleuren die voor de blokken gebruikt kunnen worden.

1COLORS = [
2    (255, 0, 0),
3    (0, 255, 0),
4    (0, 0, 255),
5    (0, 255, 255),
6    # ...
7]

1.4 Spel

In het bestand t2_testris_game.py wordt het spel zelf met behulp van pygame geimplementeerd.