Peli pythonilla, pitkästä aikaa

Mitä saadaan, kun yhdistetään peliohjelmointikurssi ja hieman aikaa? Oppilaat joutuvat tietenkin töihin. Mietin pari päivää sitten, että miten tehdään yksinkertainen labyrinttipeli. Tänään sitten aloin tutkimaan ja toteuttamaan sitä. Toiveena oli, että labyrintin luominen olisi yksinkertaista ja sen muokkaaminen helppoa. Yksinkertaisuuden vuoksi pohjan muodostaa ruudukko (tässä tapauksessa 13×8), jonka kokoa voi helposti muuttaa. Ruutukoko on 50×50 pikseliä. Pelin grafiikka on tarkoitettu opetustarkoitukseen. Pelin taustakuvana on myös opettavainen.

Pelin pohja. Ruudukko esittää karttaruudukkoa ja luvut esittävät pelin oikeita koordinaatteja
Pelin pohja. Ruudukko esittää karttaruudukkoa ja luvut esittävät pelin oikeita koordinaatteja

Lähdekoodi

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

naytto = pygame.display.set_mode((650, 400))
pygame.display.set_caption("Laatikkopeli")
pygame.font.init()
fontti = pygame.font.Font(None,18)

sankari = pygame.image.load("sankari.png")
pois = pygame.image.load("exit.png")
laatikko = pygame.image.load("laatikko.png")
tausta = pygame.image.load("tausta.png")

def main():
    elossa = True
    sankarin_paikka = [1,1]

    kartta = ["xxxxxxxxxxxxx",
              "x        x  x",
              "x  xxxxxxx  x",
              "x  x        x",
              "x  x  xxx xxx",
              "x  x  x   xxe",
              "x     x      ",
              "xxxxxxxxxxxxx"]

    while elossa:
        tapahtuma = pygame.event.poll()
        if tapahtuma.type == pygame.QUIT:
            elossa = False    

        if tapahtuma.type == pygame.KEYDOWN:
            if tapahtuma.key == pygame.K_RIGHT:
                if kartta[sankarin_paikka[1]][sankarin_paikka[0]+1] != "x":
                    sankarin_paikka[0] += 1
            if tapahtuma.key == pygame.K_LEFT:
                if kartta[sankarin_paikka[1]][sankarin_paikka[0]-1] != "x":
                    sankarin_paikka[0] -= 1
            if tapahtuma.key == pygame.K_DOWN:
                if kartta[sankarin_paikka[1]+1][sankarin_paikka[0]] != "x":
                    sankarin_paikka[1] +=  1
            if tapahtuma.key == pygame.K_UP:
                if kartta[sankarin_paikka[1]-1][sankarin_paikka[0]] != "x":
                    sankarin_paikka[1] -= 1
        
        naytto.blit(tausta, (0, 0))

        korkeus = len(kartta)
        leveys = len(kartta[0])

        for y in range(korkeus):
            for x in range(leveys):
                if kartta[y][x] == "x":
                    naytto.blit(laatikko, (x*50, y*50))
                if kartta[y][x] == "e":
                    naytto.blit(pois, (x*50, y*50))
        

        naytto.blit(sankari, (sankarin_paikka[0]*50, sankarin_paikka[1]*50))

        if kartta[sankarin_paikka[1]][sankarin_paikka[0]] == "e":
            naytto.blit( fontti.render("JIPPII", True, (255,0,0)), (sankarin_paikka[0]*50, sankarin_paikka[1]*50-25))
            
        pygame.display.flip()

main()
pygame.quit()

Tämä luo pelin, joka näyttää tältä

Hieno labyrinttipeli. Grafiikkaa saa parantaa vapaasti.
Hieno labyrinttipeli. Grafiikkaa saa parantaa vapaasti.

Lähdekoodissa on heikkouksia, siinä käytetään main()-metodia, mutta itse toiminnot on kirjoitettu perinteisesti lohkomuodossa. Esimerkki on siis huono, anteeksi.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close