Pelirunko

Takaisin pääsivulle

Pelirunko

Pelirungot koostuvat lähes aina kolmesta osa-alueesta; kontrollista, eli käyttäjän syötteiden lukemisesta ja niihin reagoimisesta, logiikasta, eli pelin tilanteen päivittämisestä, sekä piirtämisestä, eli pelin piirtämisestä ja näyttämisestä käyttäjälle. Rakennetaan pelirunko, jossa jokaiselle osalle on oma funktio. Alussa runko tulostaa vain viestin jokaisessa osassa, eikä pygamea käytetä.

# -*- coding: utf-8 -*-

def kontrolli():
    print "kontrolli, eli käyttäjän toimintojen kuuntelu ja niihin reagointi"

def logiikka():
    print "logiikka, eli pelin toimintojen suorittaminen; mm. liikkeiden ja törmäysten tarkastaminen"

def piirtaminen():
    print "piirtaminen, eli pelin grafiikan piirtäminen käyttäjälle"
    
def main():
    print "pelihahmojen ym. luominen"

    while True:
        kontrolli()
        logiikka()
        piirtaminen()
        
        print "odotetaan hetki..."

# kun kaikki on valmista, käynnistetään peli
main()

Yllä oleva pelirunko suorittaa jokaisen osa-alueen vuorollaan. Kun piirtäminen on suoritettu, jatketaan taas kontrollista. Alla on esitettynä esimerkkipeli, jossa voidaan siirtää hahmoa oikealle.

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

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

## lataa täällä peliin liittyvät kuvat ja äänet
ukko = pygame.image.load("dude.png")

def kontrolli(hahmon_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
        
    
    # painettujen näppäinten käsittely
    painetut_napit = pygame.key.get_pressed()

    if painetut_napit[pygame.K_RIGHT]:
        hahmon_sijainti[0] = hahmon_sijainti[0] + 1

def logiikka(hahmon_sijainti):
    print "logiikka, eli pelin toimintojen suorittaminen; mm. liikkeiden ja törmäysten tarkastaminen"
    
    # tarkastetaan mennäänkö ulos ruudulta
    if(hahmon_sijainti[0] + ukko.get_width() > ruudun_leveys):
        hahmon_sijainti[0] -= 1

def piirtaminen(ikkuna, hahmon_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))
    
    # piirrä täällä peliisi liittyvät taustakuvat ja hahmot sekä muu grafiikka
    ikkuna.blit(ukko, hahmon_sijainti)

    # tai
    # ikkuna.blit(ukko, [hahmon_sijainti[0], hahmon_sijainti[1]))

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

def main():
    # luo pelihahmojen sijainnit yms (luodaan tietorakenteet)
    ukon_sijainti = [50, 50]
    kello = pygame.time.Clock()

    while True:
        kontrolli(ukon_sijainti)
        logiikka(ukon_sijainti)
        piirtaminen(naytto, ukon_sijainti)
        
        # suoritetaan peliä siten, että sen fps on 40

        kello.tick(fps)
        print ukon_sijainti

# kun kaikki on valmista, käynnistetään peli
main()

Huomaa miten yllä jokaiselle funktiolle annetaan parametrina ukon sijainti. Tällöin funktiot voivat käsitellä sijaintia, ja muuttaa sitä tarpeen vaatiessa.

Takaisin pääsivulle