Osa 13

Pygame käyttöön

Kurssin kahdella viimeisellä viikolla tutustumme Pygame-kirjastoon, joka on peliohjelmointiin tarkoitettu Python-kirjasto. Pygamen avulla pystyy piirtämään grafiikkaa, käsittelemään näppäimistön ja hiiren tapahtumia ja tekemään muuta peleissä tarvittavaa.

Pygamen asentaminen

Linux

Avaa komentorivi ja kirjoita pip3 install pygame.

pygame linux

Windows

Avaa Windowsin terminaali napauttamalla vasemman alakulman Windows-painiketta. Kirjoita aukeavaan ikkunaan cmd ja paina enter:

13 1 1

Kirjoita auenneeeseen komentokehoteikkunaan seuraava komentosarja ja paina enter:

pip3 install pygame

Tämä asentaa Pygame-paketin koneellesi.

Asennus voi vaatia järjestelmänvalvojan oikeuksia. Jos ylläoleva ei toimi, voit yrittää ajaa terminaalin järjestelmänvalvojana (valitse Windows-valikko, paina hiiren kakkospainiketta CMD-valinnan päällä ja valitse "Run as administrator" tai "Aja järjestelmänvalvojana").

Huomaa, että asennus vaatii että olet asennusvaiheessa ohjeiden mukaisesti valinnut kohdan "Add Python 3.XX to path", katso ohjeet

Mac

Avaa Terminaali, esim. painamalla oikean yläkulman suurennuslasi-symbolia:

13 1 2

Kirjoita aukeavaan teksikenttään terminal ja paina enter:

13 1 3

Kirjoita auenneeeseen komentokehoteikkunaan seuraava komentosarja ja paina enter:

pip3 install pygame

13 1 4

Tämä asentaa Pygame-paketin koneellesi.

Ensimmäinen ohjelma

Tässä on yksinkertainen Pygamea käyttävä testiohjelma:

import pygame

pygame.init()
naytto = pygame.display.set_mode((640, 480))

naytto.fill((0,0,0))
pygame.display.flip()

while True:
    for tapahtuma in pygame.event.get():
        if tapahtuma.type == pygame.QUIT:
            exit()

Kun ohjelma käynnistetään, se näyttää käyttäjälle seuraavanlaisen ikkunan:

Ohjelmassa ei ole kuitenkaan vielä muuta sisältöä kuin ikkunan näyttäminen. Ohjelman suoritus jatkuu niin kauan, kunnes käyttäjä sulkee ikkunan.

Katsotaan seuraavaksi tarkemmin, miten ohjelma on rakentunut. Ohjelman alussa rivi import pygame ottaa mukaan Pygame-kirjaston. Kirjaston käyttäminen alkaa kutsumalla funktiota pygame.init, minkä jälkeen ohjelma luo ikkunan funktiolla pygame.display.set_mode.

pygame.init()
naytto = pygame.display.set_mode((640, 480))

Muuttujan naytto kautta ikkunaan voidaan viitata myöhemmin esimerkiksi grafiikan piirtämistä varten. Parametri (640, 480) tarkoittaa, että tässä ohjelmassa ikkunan leveys on 640 pikseliä ja korkeus on 480 pikseliä.

Seuraavaksi ohjelmassa on kaksi komentoa:

naytto.fill((0, 0, 0))
pygame.display.flip()

Metodi fill täyttää näytön annetulla värillä. Tässä tapauksessa värinä on (0, 0, 0), mikä tarkoittaa mustaa. Sitten metodi pygame.display.flip päivittää näytön sisällön.

Tämän jälkeen alkaa ohjelman pääsilmukka:

while True:
    for tapahtuma in pygame.event.get():
        if tapahtuma.type == pygame.QUIT:
            exit()

Pääsilmukka käsittelee tapahtumat, jotka käyttöjärjestelmä välittää ohjelmalle. Joka kierroksella funktio pygame.event.get antaa listan tapahtumista, jotka ovat syntyneet funktion edellisen kutsukerran jälkeen.

Tässä tapauksessa ohjelma käsittelee vain tyyppiä pygame.QUIT olevat tapahtumat. Tällainen tapahtuma syntyy, kun käyttäjä sulkee ohjelman esimerkiksi painamalla ikkunan ylänurkassa olevaa raksia. Tämän tapahtuman seurauksena ohjelma sulkee itsensä kutsumalla exit-funktiota.

Voit kokeilla, mitä tapahtuu, jos ohjelma ei käsittele tapahtumaa pygame.QUIT. Tällöin raksin painamisen ei pitäisi vaikuttaa ohjelman toimintaan, mikä on hämmentävää käyttäjälle. Ohjelman voi kuitenkin tässäkin tapauksessa sulkea väkisin komentoriviltä painamalla Control+C.

Kuva ohjelmaan

Laajennetaan seuraavaksi ohjelmaa niin, että se näyttää ikkunassa kuvan. Tämä onnistuu seuraavasti:

import pygame

pygame.init()
naytto = pygame.display.set_mode((640, 480))

robo = pygame.image.load("robo.png")

naytto.fill((0, 0, 0))
naytto.blit(robo, (100, 50))
pygame.display.flip()

while True:
    for tapahtuma in pygame.event.get():
        if tapahtuma.type == pygame.QUIT:
            exit()

Koodi käyttää kuvaa robo.png, jossa on robotin kuva:

robo

Tiedoston robo.png tulee olla samassa hakemistossa ohjelman lähdekoodin kanssa, jotta ohjelma löytää kuvan. Tämän viikon tehtävissä robotin kuva on valmiina tehtäväpohjissa.

Nyt ikkuna näyttää tältä:

Tässä funktio pygame.image.load lataa muuttujaan tiedostossa robo.png olevan kuvan. Tämän jälkeen metodi blit piirtää kuvan ikkunaan kohtaan (100, 50) ja sitten funktio pygame.display.flip päivittää ikkunan sisällön. Kohta (100, 50) tarkoittaa, että kuvan vasen yläkulma on kyseisessä kohdassa.

Huomaa, että Pygamessa ja yleensä muutenkin ohjelmoinnissa koordinaatisto on rakennettu niin, että piirtoalueen vasen yläkulma on kohdassa (0, 0) ja koordinaatit kasvavat x-suunnassa oikealle ja y-suunnassa alaspäin. Tässä tapauksessa ikkunan oikean alakulman koordinaatit ovat (640, 480).

Kuvan voi piirtää moneenkin kohtaan ikkunassa. Esimerkiksi seuraava koodi piirtää kuvan kolmeen eri kohtaan:

naytto.blit(robo, (0, 0))
naytto.blit(robo, (300, 0))
naytto.blit(robo, (100, 200))

Tällöin ikkuna näyttää seuraavalta:

Seuraava koodi puolestaan piirtää kuvan ikkunan keskelle:

leveys = robo.get_width()
korkeus = robo.get_height()
naytto.blit(robo, (320-leveys/2, 240-korkeus/2))

Nyt ikkuna näyttää tältä:

Tässä metodi get_width antaa kuvan leveyden ja vastaavasti metodi get_height antaa kuvan korkeuden. Ikkunan keskikohta on (320, 240), joten tämän avulla saadaan laskettua sopiva kohta kuvan vasemmalle yläkulmalle niin, että kuva sijoittuu ikkunan keskelle.

Loading
Loading
Loading
Loading
Seuraava osa: