Kun käyttäjä painaa nappia näppäimistöltä, syntyy tapahtuma
pygame.KEYDOWN
. Tämän jälkeen on mahdollista tarkistaa,
mitä nappia käyttäjä tarkkaan ottaen painoi.
Seuraava koodi tunnistaa tilanteet, joissa käyttäjä painaa näppäintä "A" tai näppäintä "B". Kun käyttäjä painaa näppäintä "A", ikkunaan ilmestyy punainen ympyrä. Kun taas käyttäjä painaa näppäintä "B", ikkunaan ilmestyy sininen ympyrä. Ohjelma on rakennettu osaksi pelirunkoa.
# -*- 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") def kontrolli(pallot): print "kontrolli, eli käyttäjän toimintojen kuuntelu" for tapahtuma in pygame.event.get(): if tapahtuma.type == pygame.QUIT: exit() # ohjelmoi tänne muiden toimintojen käsittely if tapahtuma.type == pygame.KEYDOWN: if tapahtuma.key == pygame.K_a: pallot[0] = 1 if tapahtuma.key == pygame.K_b: pallot[1] = 1 def logiikka(pallot): print "ei tehdä mitään logiikka-osiossa." def piirtaminen(ikkuna, pallot): 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)) if pallot[0] == 1: pygame.draw.circle(ikkuna, (255, 0, 0), (100, 100), 10) if pallot[1] == 1: pygame.draw.circle(ikkuna, (0, 0, 255), (100, 100), 10) # näytetään kuva pygame.display.flip() def main(): # alusta käytettävät muuttujat (luodaan tietorakenteet) naytetaan_pallot = [0, 0] while True: kontrolli(naytetaan_pallot) logiikka(naytetaan_pallot) piirtaminen(naytto, naytetaan_pallot) # kun kaikki on valmista, käynnistetään peli main()
Äskeisessä koodissa tunnus pygame.K_a
viittasi A-näppäimeen ja
tunnus pygame.K_b
viittasi B-näppäimeen. Mistä voi yleisemmin
tietää, mikä tunnus viittaa mihinkin näppäimeen?
Tässä auttaa pygame-kirjaston dokumentaatio kohdassa pygame.key.
Seuraavassa esimerkissä pelaaja voi ohjata pelihahmoa nuolinäppäimin.
Muuttujissa x
ja y
on pelihahmon sijainti
ruudulla. Koodi olettaa, että projektiin kuuluu tiedosto ukko.png, jossa on
pelihahmon kuva.
# -*- 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" for tapahtuma in pygame.event.get(): if tapahtuma.type == pygame.QUIT: exit() # ohjelmoi tänne muiden toimintojen käsittely if tapahtuma.type == pygame.KEYDOWN: if tapahtuma.key == pygame.K_RIGHT: sijainti[0] = sijainti[0] + 10 if tapahtuma.key == pygame.K_LEFT: sijainti[0] = sijainti[0] - 10 if tapahtuma.key == pygame.K_DOWN: sijainti[1] = sijainti[1] + 10 if tapahtuma.key == pygame.K_UP: sijainti[1] = sijainti[1] - 10 def logiikka(sijainti): print "ei tehdä mitään logiikka-osiossa." 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] while True: kontrolli(sijainti) logiikka(sijainti) piirtaminen(naytto, sijainti) # kun kaikki on valmista, käynnistetään peli main()
Huomaa komento naytto.fill
aina ennen pelihahmon piirtämistä.
Sen tarkoituksena on tyhjentää näyttö, jotta pelihahmo on tietyllä hetkellä
vain yhdessä paikassa.
Koodissa on yksi ongelma: vaikka näppäintä pitää pohjassa, pelihahmo liikkuu vain yhden askeleen. Luvussa Animaatio opimme korjaamaan tämän ongelman.