Animaatio

Takaisin pääsivulle

Esimerkki: Liikkuva pelihahmo

Seuraava koodi näyttää animaation, jossa pelihahmo liikkuu ruudun halki vasemmalta oikealle:

# -*- coding: utf-8 -*-
import pygame

# peliin liittyvät yleiset muuttujat ja niiden alustaminen
ruudun_leveys = 640
ruudun_korkeus = 400
naytto = pygame.display.set_mode((ruudun_leveys, ruudun_korkeus))
pygame.display.set_caption("Pelin otsikko")

# ladataan kuvat ym
ukko = pygame.image.load("ukko.png")

# funktiot
def kontrolli(sijainti):
    print "kontrolli, eli käyttäjän toimintojen kuuntelu. Tarkistetaan vain lopetus"
    for tapahtuma in pygame.event.get():
        if tapahtuma.type == pygame.QUIT:
            exit()

def logiikka(sijainti):
    print "hahmon siirtäminen tapahtuu logiikka-osiossa."
    sijainti[0] = sijainti[0] + 1

def piirtaminen(ikkuna, sijainti):
    print "piirtaminen, eli pelin grafiikan piirtäminen käyttäjälle"

    # tyhjennetään ruutu, tässä käytetty valkoista väriä
    #            red green blue
    ikkuna.fill((255, 255, 255))

    ikkuna.blit(ukko, sijainti)

    # näytetään kuva
    pygame.display.flip()

def main():
    # alusta käytettävät muuttujat (luodaan tietorakenteet)
    sijainti = [50, 50]
    kello = pygame.time.Clock()

    while True:
        kontrolli(sijainti)
        logiikka(sijainti)
        piirtaminen(naytto, sijainti)

        # päivitetään peliä 20 kertaa sekunnissa
        kello.tick(20)
        
# kun kaikki on valmista, käynnistetään peli
main()

Ideana on, että pelin päämetodissa olevan pääsilmukan jokaisella kierroksella kutsutaan logiikka-funktiota, joka kasvattaa pelihahmon x-koordinaattia yhdellä.

Lisäksi silmukan lopussa on komento kello.tick, joka tahdistaa silmukan niin, että silmukassa oleva koodi suoritetaan 20 kertaa sekunnissa. Tämän ansiosta pelihahmo liikkuu sopivalla tasaisella nopeudella.

Esimerkki: Näppäimistöohjaus

Aiemmissa esimerkeissä näppäimistön käsittelyn ongelmana oli, että vaikka näppäintä piti pohjassa, pelihahmo liikkui vain askeleen. Tämä ongelma on korjattu seuraavassa koodissa:

# -*- coding: utf-8 -*-
import pygame

# peliin liittyvät yleiset muuttujat ja niiden alustaminen
ruudun_leveys = 640
ruudun_korkeus = 400
naytto = pygame.display.set_mode((ruudun_leveys, ruudun_korkeus))
pygame.display.set_caption("Pelin otsikko")

# ladataan kuvat ym
ukko = pygame.image.load("ukko.png")

# funktiot
def kontrolli(sijainti):
    print "kontrolli, eli käyttäjän toimintojen kuuntelu. Tarkistetaan vain lopetus"
    for tapahtuma in pygame.event.get():
        if tapahtuma.type == pygame.QUIT:
            exit()

    napit = pygame.key.get_pressed()
    if napit[pygame.K_RIGHT]:
        sijainti[0] = sijainti[0] + 5
    if napit[pygame.K_LEFT]:    
        sijainti[0] = sijainti[0] - 5
    if napit[pygame.K_DOWN]:    
        sijainti[1] = sijainti[1] + 5
    if napit[pygame.K_UP]:    
        sijainti[1] = sijainti[1] - 5


def logiikka(sijainti):
    print "Ei tehdä mitään.."

def piirtaminen(ikkuna, sijainti):
    print "piirtaminen, eli pelin grafiikan piirtäminen käyttäjälle"

    # tyhjennetään ruutu, tässä käytetty valkoista väriä
    #            red green blue
    ikkuna.fill((255, 255, 255))

    ikkuna.blit(ukko, sijainti)

    # näytetään kuva
    pygame.display.flip()

def main():
    # alusta käytettävät muuttujat (luodaan tietorakenteet)
    sijainti = [50, 50]
    kello = pygame.time.Clock()

    while True:
        kontrolli(sijainti)
        logiikka(sijainti)
        piirtaminen(naytto, sijainti)

        # päivitetään peliä 20 kertaa sekunnissa
        kello.tick(20)
        
# kun kaikki on valmista, käynnistetään peli
main()

Tässä esimerkissä pyydämme ensin kaikkien näppäinten tilat komennolla pygame.key.get_pressed, joka palauttaa listan. Tämä lista sijoitetaan muuttujaan napit, josta kysytään sen jälkeen jokaiselle napille erikseen ovatko ne painettuina.

Takaisin pääsivulle