Pygame 8¶
We maakten in het eerste trimester 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