Programmera ett hoppa-och-ducka spel i Python

av apr 20, 2021

I denna videoserie ska vi bygga spelet “Blob Runner”, ett slags klassiskt hoppa-och-ducka spel där fiender kommer flygandes fram över spelplanen. Vårt uppdrag som spelare är att undvika fienderna och samla på oss så mycket poäng som möjligt.

Denna serie kommer i tre delar på vår YouTube-kanal och passar både för dig som redan gjort vår kurs inom spelprogrammering, men också för dig som kan grunderna i Python är intresserad av att testa på att programmera egna spel i 2D.

Programmera hoppa ducka spel i Python

Saker vi kommer lära oss i detta spel är bl.a:

  • Hur man kan skapa enkel gravitation i ett spel
  • Hur vi kan animera vår spelare genom att använda oss av olika bilder
  • Hur vi hanterar tangenttryckningar för att hoppa och ducka (och samtidigt undvika buggar)

I detta spel kommer vi att använda oss av spelmotorn Pygame Zero som är perfekt för att komma igång med spelprogrammering i 2D. Vi programmerar i Python och använder oss av Pycharm för att programmera.

Vi kommer att använda oss av bilder från Kenney. Dessa är fria att använda som man vill (CC0 licens). Du hittar bilderna här:
https://kenney.nl/assets/abstract-platformer

Videoserien ”Blob Runner”

I första delen skapar vi vår spelare (vår “blob”). Denna kan hoppa med hjälp av enkel gravitation. Vi skapar också en fiende som flyger in från högra kanten av spelplanen.

I andra delen så lägger vi till kollision i spelet, så att man faktiskt kan förlora när man träffar fienden. Vi animerar också spelaren genom att använda olika bilder beroende på om spelaren hoppar eller inte. Slutligen lägger vi också till poäng i spelet.

I tredje delen så introducerar vi svårighetsgrader i spelet. Desto längre man kommit i spelet, desto svårare blir också spelet. Vi gör så att spelaren kan ducka, och väljer att slumpa fram om fienden ska komma på en lägre eller högre höjd. Spelet är nu klart!

Vill du lära dig mer om spelprogrammering? Kolla in våra kurser! Vi har en kurs specifikt för spelprogrammering i Python.

Kod till “Blob Runner”

import pgzrun
import random

WIDTH = 700
HEIGHT = 400

marknivå = HEIGHT - 100

spelare = Actor("spelare", (100,100))
fiende = Actor("fiende", (WIDTH, marknivå))

gravitation = 0.8
hastighet = 0
svårighetsgrad = 8

poäng = 0

game_over = False
spelare_duckar = False

def draw():
    screen.fill((50,0,80))
    spelare.draw()
    fiende.draw()
    screen.draw.text(str(poäng), center=(WIDTH/2, 100), fontsize=40)

def update():
    global game_over
    if not game_over:
        update_spelare()
        update_fiende()
        update_svårighetsgrad()
    else:
        spelare.image = "spelare_dog"

    # om spelare kolliderar med fiende -> spelet slut
    if spelare.colliderect(fiende):
        game_over = True

def update_svårighetsgrad():
    global svårighetsgrad

    if poäng < 100:
        svårighetsgrad = 8
    elif poäng < 200:
        svårighetsgrad = 12
    elif poäng < 300:
        svårighetsgrad = 14
    else:
        svårighetsgrad = 16

def update_fiende():
    global poäng
    fiende.x -= svårighetsgrad
    fiende.angle += 1
    if fiende.x < 0:
        fiende.x = WIDTH
        poäng += 10 
        fiende.y = random.choice([marknivå, marknivå -40])

def update_spelare():
    global hastighet
    if hastighet > 0:
        spelare.image = "spelare_faller"
    elif hastighet < 0:
        spelare.image = "spelare_hoppar"
    elif spelare_duckar:
        spelare.image = "spelare_duckar" 
    else: 
        spelare.image = "spelare" 

    spelare.y += hastighet 
    hastighet += gravitation 

    if spelare.y > marknivå:
        hastighet = 0

# tangent är nedtryckt
def on_key_down(key):
    global hastighet, spelare_duckar
    if key == keys.SPACE and hastighet == 0 and not spelare_duckar:
        hastighet = -12
    # spelare duckar (och är inte i luften)
    if key == keys.DOWN and hastighet == 0:
        spelare_duckar = True
        spelare.y += 20

def on_key_up(key):
    global spelare_duckar
    if key == keys.DOWN and spelare_duckar:
        spelare_duckar = False
        spelare.y -= 20

pgzrun.go()

Unga Programmerare håller kurser i programmering för barn och ungdomar. Unga Programmerare startades av studenter från Chalmers Tekniska Högskola.

Följ oss

Nyhetsbrev