Pygame 8

We maakten in het vorige stuk een scorebord voor volleybal. We breiden dit systeem nu uit zodat het grafisch aantrekkelijker wordt.

Opgave 67

Zoek eerst je code voor opgave 66 op, zodat je hieraan kan verder programmeren. Plaats de code in GitHub in een nieuw project met naam scoreboard.

Opgave 68

We willen voor beide teams een logo tonen. Zorg ervoor dat aan de linkerkant het logo van team A (thuisploeg) getoond wordt, en aan de rechterkant het logo van team B.

Gebruik de bestanden teamA-logo.png en teamB-logo.png voor de logo’s van team A en team B.

Om een image te laden uit een JPEG of PNG bestand:

team_a_logo = pygame.image.load("teamA-logo.png")

Zie ook op: https://www.pygame.org/docs/ref/image.html#pygame.image.load

Opgave 69

We willen ook de team-namen makkelijk aanpasbaar maken: Dus, we willen de team-namen kunnen aanpassen zonder de code te moeten aanpassen.

Typisch wordt hiervoor gebruik gemaakt van een configuratiebestand. Op Windows-systemen wordt hier vaak gebruikt gemaakt van .ini bestanden.

Zo zouden we bijvoorbeeld het volgende bestand kunnen voorzien om de teamnamen op te slaan:

[teamA]
naam = Greenyard Maaseik

[teamB]
naam = Knack Roeselare

Een voordeel van het gebruik van .ini bestanden is, dat ze makkelijk leesbaar zijn (voor mensen). Python voorziet in de standaardbibliotheek een module configparser die je kan gebruiken om .ini files in te lezen:

import configparser

config = configparser.ConfigParser()
config.read("config.ini")
ploegnaam = config["teamA"]["naam"]
print(ploegnaam)

Zie ook: https://docs.python.org/3/library/configparser.html#configparser.ConfigParser.getint

Een andere mogelijkheid is het gebruik van JSON:

{
    "teamA": "Greenyard Maaseik",
    "teamA_logo": "maaseik.jpg",
    "teamB": "Knack Roeselare"
}

Of, als we meer dan enkel de naam willen kunnen opslaan:

{
    "teamA": {
        "naam": "Greenyard Maaseik",
        "logo": "maaseik.jpg"
    },
    "teamB": {
        "naam": "Knack Roeselare"
    }
}

Het voordeel hiervan is dat het erg lijkt op een Python dictionary, en ook makkelijk in te laden is via de json module in de Python standaardbibliotheek:

import json
config = json.load(open("config.json", "r"))
ploegnaam = config["teamA"]["naam"]
print(ploegnaam)

Pas de code aan zodat je de ploegnaam uit een configuratiebestand inleest. Gebruik hiervoor het .ini bestandsformaat.

Opgave 70

Pas de code aan zodat je de logo’s van de ploegen uit hetzelfde configuratiebestand inleest.

Opgave 71

Voeg een sectie generic (algemeen) toe aan het configuratiebestand:

[generic]
background-color = black
font-color= red

[teamA]
naam = Greenyard Maaseik

[teamB]
naam = Knack Roeselare

Gebruik de backgroundcolor om de kleur van de achtergrond in te stellen. Gebruik de fontcolor om de kleur van de letters aan te passen.

Opgave 72

Via de module sys kan je commandline parameters opvragen:

import sys
print(sys.argv[1])
print(sys.argv[2])

De uitvoer van het programma:

python testje.py abcdef 0123

Toont:

abcdef
0123

Pas nu je programma aan, zodat je het configuratiebestand als parameter aan je programma kan meegeven.

Om bijvoorbeeld je scoreboard met configuratiebestand maaseik_roeselare.ini op te starten zou je als volgt te werk gaan:

python scoreboard.py maaseik_roeselare.ini

Een voorbeeld:

[generic]
background-color = white
color = black
font-family = comicsansms
font-size = 30
title = Bekerwedstrijd
footer-image = reclame-footer.png
top-image = reclame-top.png

[teamA]
name=Maaseik
logo=maaseik.jpg

[teamB]
name=Roeselare
logo=roeselare.png
_images/banner.png