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
[sourcecode language=”python”]
# -*- 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()
[/sourcecode]

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.

How Much Did It Cost YouTube To Stream Gangnam Style? – Forbes

Törmäsin tällaiseen Forbesin (aika luotettava taho) laskelmaan siitä, kannattaako Youtuben pitää Spy:n biisiä palvelimellaan: How Much Did It Cost YouTube To Stream Gangnam Style? – Forbes.

Eniten siinä hämmästyttää kohta ”Map of World Wide distribution of high speed Internet access”. Suomi ja muut pohjoismaat ovat valkoisia, aivan kuten Afrikan mantereen maat… Mielenkiintoista!

Viikon sovellus: DSLR Remote

Törmäsin kuvasarjatuli-blogissa ohjelmaan nimeltä DSLR-controller (maksullinen) ja sen ilmaiseen pikkuveljeen DSLR-remote, joilla voi ohjata omaa kameraansa Android-laitteella. Maksullisella versiolla saa tehtyä timelapse-videoita (tai siis oikeastaan otettua tietyin ajanjaksoin kuvia) ja käytettyä laitteen näyttöä kameran etsimenä. Livekuva kameran näytöstä voisi olla joskus tarpeen, mutta timelapseen on tähän saakka riittänyt eBayn kautta Hong Kongista tilattu timer remote.

Vastaava ohjelma on myös remote release, mutta se vaatii itsetehdyn kaapelin. Luultavasti se ei ole vaikea tehdä, sillä olen tehnyt kaapelin 15v sitten vanhalle filmikameralleni (500N), joka toimi vielä 500D:lläkin 🙂