Skapa ett spel med Pygame

Ett spel behöver vara aktivt hela tiden. Spelet ska dels rita ut all grafik, dels lyssna till tangentryckningar och hantera all logik beroende på vad som händer i spelet. Detta hanterar vi med en game-loop.

Skapa en Game-loop till Pygame

Vi ska nu skapa skelettet till spelet, en så kallad game-loop som hanterar all logik och hantering av spelplanen. Game-loopen ska även hantera input av tangenttryckningar. Mycket av detta kommer gratis i biblioteket pygame.

1: Importera biblioteket pygame

Vi börjar med att importera Pygame:

# 1: Importa biblioteket 
pygame import 
pygame from pygame.locals import *

Du kan nu använda funktioner från Pygame. Pygame.locals innehåller exempelvis funktioner för att känna av tangenttryckningar.

2: Initiera Pygame-modulen

Vi kan sedan initiera alla moduler som vi kommer använda oss av.

# 2: initiera pygame-modulen 
pygame.init() 
pygame.font.init()

pygame.init() initierar alla moduler som vi tidigare har importerat och pygame.font.init() gör så att vi kan använda oss av fonter, det vill säga skriva ut texter på spelplanen. Man kan säga att vi har aktiverat de moduler som vi vill använda oss av.

3: Bestäm storleken på spelplanen

Vi ska nu bestämma storleken på spelplanen. För att underlätta, delar vi in spelplanen i ett rutnät där varje ruta är 64 x 64 pixlar stor. Vi bestämmer att bredden ska vara 10 rutor, och höjgden 8 rutor.

# 3: Bestäm storleken på spelplanen 
width, height = 64*10, 64*8

Vi kan sedan skapa spelplanen i pygame genom att anropa

screen = pygame.display.set_mode((width, height))

4: Skapa x- och y-position för spelaren

När vi ska rita ut vår spelare, behöver vi en x- och en y-position. Vi skapar helt enkelt två variabler som bestämmer var på som spelaren ska ritas ut.

# 4: Skapa x och y position för spelaren 
player_x = 200 
player_y = 200

Observera att koordinaten (0,0) är högst upp i vänstra hörnet i Pygame.

5: Ladda in bilder

Vi börjar med att ladda in bilden på spelaren. Bilden är i detta fall 64 x 64 pixlar stor. Det innebär alltså att bilden kommer vara exakt lika stor som en ruta i spelplanen.

# 5: Ladda in bilder 
player = pygame.image.load("hero.png")

Bilden på spelare “hero.png”, lägger vi i samma mapp som vi sparat våran kod för att bilden ska hittas vid inläsningen.

6: Skapa en evighetsloop

Nu är allt initierat. Vi kan nu skapa en evighetsloop som upprepas för alltid.

while 1:

Denna loop kommer alltid vara uppfylld. Den kommer alltså pågå för alltid. I denna loop kan vi nu sköta all logik och rita ut spelplanen.

7-9: Rita ut alla objekt

I while-loopen kan vi nu rita ut alla objekt genom att anropa pygames funktioner.

 # 7: Rita ut en vit spelplan 
screen.fill((255,255,255)) 

# 8: Rita ut bilden player på en x, y koordinat 
screen.blit(player, (player_x, player_y)) 

# 9: Updatera spelplanen 
pygame.display.flip()

10: Gå igenom alla event

Pygame.event innehåller alla event som skett sen senaste loop. Det är här vi senare kommer känna av tangenttryckningar. Just nu kollar vi enbart om spelplanen har stängts ner (pygame.QUIT). I så fall avbryter vi programmet (exit(0)) och spelet (while-loopen bryts och spelet slutförs).

 # 10: Gå igenom alla nya event 
for event in pygame.event.get(): # Kolla om spelplanen stängs ner. I så fall, stäng av programmet 
    if event.type == pygame.QUIT: # if it is quit the game 
        pygame.quit()
        exit(0)

Sammanställer vi all kod, ser den ut såhär:

# 1: Importa biblioteket pygame
import pygame
from pygame.locals import *

# 2: initiera pygame-modulen 
pygame.init()
pygame.font.init()

# 3: Bestäm storleken på spelplanen
width, height = 64*10, 64*8
screen=pygame.display.set_mode((width, height))

# 4: Skapa x och y position för spelaren
player_x = 200
player_y = 200

# 5: Ladda in bilder
player = pygame.image.load("hero.png")

# 6: Skapa en evighetsloop som aldrig tar slut
while 1:
    # 7: Rita ut en vit spelplan
    screen.fill((255,255,255))

    # 8: Rita ut bilden player på en x, y koordinat
    screen.blit(player, (player_x, player_y))

    # 9: Updatera spelplanen
    pygame.display.flip()

    # 10: Gå igenom alla nya event 
    for event in pygame.event.get():
        # Kolla om spelplanen stängs ner. I så fall, stäng av programmet
        if event.type == pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0)

Om vi kör programmet kommer enbart spelaren ritas ut på position (200,200). Stänger man av programmet så avbryts while-loopen och programmet stängs av.

gameloop för ett spel i pygame
Bakåt    |    Framåt