1. PyGame: aken
Pygame on üks võimalikest moodulitest, mis aitab Pythonis lihtsamalt luua graafilisi programme. Pygame'i leidmisest ja installeerimisest oli juttu kursuse esimeses peatükis, küllap leidsite sealt ka näidiskoodi, mille õnnestunud käivitamine näitab, et kõik vajalik on installeeritud.
Sarnaselt teistele moodulitele tuleb ka see kasutamiseks eelnevalt programmi importida ning see ka käivitada, hilisemaks kasutamiseks impordime ka sys-mooduli:
import pygame, sys pygame.init()
Kui programmi töökaustas on fail nimega pygame.py, siis imporditakse "õige" PyGame'i asemel hoopis see. Kuna aga selles vajalikke funktsioone pole, antakse veateade (näiteks "'module' object has no attribute 'init'"). Seega: ärge andke oma failidele moodulite nimesid!
Töö graafilises kasutajaliideses toimub akna abil, seega tuleb luua aken (praegusel juhul on akna suurus 800 korda 600 punkti):
ekraan = pygame.display.set_mode([800, 600])
Saame muuta ka akna omadusi, näiteks pealkirja:
pygame.display.set_caption("Pealkiri")
Aknasse hakkame lisama erinevaid kujundeid, neid muutma jne. Selleks, värskendataks ka reaalset ekraanipilti, tuleb kasutada pärast joonistamiskäske sisaldavaid ridu käsku "flip":
pygame.display.flip()
Kuna hakkame looma programme, mis ootavad kasutajalt hiire või klaviatuuri abil antavaid käsklusi, siis peaksime programmi lisama tsükli, mis "kuulab" (inglise k. listen) korraldusi ning reageerib neile vastavalt. Järgnev tsükkel on lõppematu (kuna while True on alati tõene), kuid sellele on lisatud for-tsükkel, mis kontrollib pidevalt (iga tsükli sammu ajal) sündmusi. Iga leitud sündmuse puhul tehakse kontroll, kas antud sündmus on üks meile olulistest ning käitutakse vastavalt sellele. Antud näites kontrollitakse vaid üht tegevust (akna sulgemist vastava nupu abil) ning antakse käsk programmi töö lõpetada.
while True: for i in pygame.event.get(): if i.type == pygame.QUIT: sys.exit()
Kui käivitame programmi IDLEs, siis võime märgata, et programmi sulgemine sel viisil ei tööta korralikult, probleeme tekitab IDLE ja Pygame'i erinevad sulgemismeetodid. Py-laiendiga faili lihtsalt topeltklõpsuga käivitades peaks kõik korras olema.
Teine võimalus, kuidas programmiakent sulgeda, mis toimib mõlemal juhul. Defineerime muutuja running, mille väärtus on True, kogu programmi töö jooksul. Sarnaselt eelmisele näitele, kontrollime for-tsükliga, kas kasutaja on akna sulgemise nupule vajutanud ning kui on, siis muudetakse muutuja running väärtus False'iks (vääraks), mis lõpetab tsükli töö. Viimasel real pärast tsüklit sulgeme pygame'i, mis ühtlasi sulgeb programmi akna.
running = True # Muutuja "running" väärtustamine while running: #Tsükli käivitamine kui muutuja on tõene for i in pygame.event.get(): # Kuulame programmi tööd if i.type == pygame.QUIT: # Kui vajutame akna sulgemise nuppu running = False # Muudame muutuja väärtuse vääraks pygame.quit() # Sulgeme programmi akna
Sarnaselt eelmisele näites olnud if-lausele võime lisada teisi analoogilisi tingimuslauseid, mis kontrollivad teiste sündmuste esinemist (hiireklõpse, klahvivajutusi jne).
Kokkuvõtvalt on kood enne järgmisi samme selline:
import pygame, sys # Impordime vajalikud moodulid pygame.init() # Käivitame Pygame'i ekraan = pygame.display.set_mode([800, 600]) # Loome vajaliku suurusega akna pygame.display.set_caption("Pealkiri") # Paneme aknale pealkirja pygame.display.flip() # Näitame akent running = True # Muutuja "running" väärtustamine while running: #Tsükli käivitamine kui muutuja on tõene for i in pygame.event.get(): # Kuulame programmi tööd if i.type == pygame.QUIT: # Kui vajutame akna sulgemise nuppu running = False # Muudame muutuja väärtuse vääraks pygame.quit() # Sulgeme programmi akna
Lisamaterjalid
Creative Commons litsentsiga Autorile viitamine + Mitteäriline eesmärk 3.0 Eesti (CC BY-NC 3.0 EE) - https://creativecommons.org/licenses/by-nc/3.0/ee/