Making sprite objects move on their own and by user control. Sprite objects do not react to keys being pressed

22 Views Asked by At

Currently the objects do not react or move at all when key is being pressed. I'm trying to make a game with a player(menneske, menneske_gruppe)) that can move with the arrowkeys. And a couple enemysprites(spokelse, spokelser_gruppe) that will move on their own, but only inside the inner square of the game.

I've managed to draw all my object but i'm not able to move them. There is no edit code, but my objects don't move at all. And the player does not react when i press the arrow keys.

Here's all my code:

# Write your code here :-)
import pygame as pg
from pygame.locals import (K_UP, K_DOWN, K_LEFT, K_RIGHT)
import math as m
import random

# Initialize Pygame
pg.init()

class Spillebrett():
    def __init__(self, bredde:int,hoyde:int, objektListe):
        self.bredde = bredde
        self.hoyde = hoyde
        self.objektListe = []
    def lagSpillebrett(self):
        """metode for å lage spillebrettet"""
        spillebrett = pg.display.set_mode((self.bredde, self.hoyde))
        spillebrett.fill((47, 79, 79))
        frisone1 = pg.draw.rect(spillebrett, (240,240,179), (0,0,self.bredde/5,self.hoyde))
        frisone2 = pg.draw.rect(spillebrett, (240,240,179), (self.bredde*4/5,0,self.bredde/5,self.hoyde))
    def leggTilObjekt(spillobjekt):
        self.objektliste.append(spillobjekt)
    def fjernObjekt(spillobjekt):
        self.objektliste.remove(spillobjekt)

class SpillObjekt(pg.sprite.Sprite):
    def __init__(self, xposisjon:int, yposisjon:int, bredde:int, hoyde:int, farge, brett):
        super().__init__()
        self.xposisjon = xposisjon
        self.yposisjon = yposisjon
        self.bredde = bredde
        self.hoyde = hoyde
        self.farge = farge
        self.brett = brett
    def tegn(self):
        """Metode for å tegne figuren"""
        pg.draw.rect(self.brett, self.farge, (self.xposisjon, self.yposisjon, self.bredde, self.hoyde)) 
      
    def finnAvstand(self, annetObjekt):
        """Metode for å finne avstanden til et annet objekt"""
        xAvstand2 = (self.x - annetObjekt.x)**2  # x-avstand i andre
        yAvstand2 = (self.y - annetObjekt.y)**2  # y-avstand i andre
        sentrumsavstand = m.sqrt(xAvstand2 + yAvstand2)

        radiuser = self.radius + annenBall.radius

        avstand = sentrumsavstand - radiuser

        return avstand


class Menneske(SpillObjekt):
    def __init__(self, xposisjon, yposisjon, bredde, hoyde, farge, brett, fart:int, poeng:int, bererSau:bool):
        super().__init__(xposisjon, yposisjon, bredde, hoyde, farge, brett)
        self.image = pg.Surface([bredde, hoyde])
        self.image.fill(farge)
        self.rect = self.image.get_rect()
        self.rect.center = [xposisjon, yposisjon]
        self.fart = fart
        self.poeng = poeng
        self.bererSaur = bererSau
    def update(self, taster):
        """Metode for å flytte spilleren"""
        if taster[K_UP]:
          self.yposisjon -= self.fart
        if taster[K_DOWN]:
          self.yposisjon += self.fart
        if taster[K_LEFT]:
          self.xposisjon -= self.fart
        if taster[K_RIGHT]:
          self.xposisjon += self.fart

    def reduserFart(int):
        self.fart = self.fart - 0.2
    def økPoeng(int):
        self.poeng = self.poeng + 1

class Spokelse(SpillObjekt):
    def __init__(self, xposisjon, yposisjon, bredde, hoyde, farge, brett, xFart, yFart):
        super().__init__(xposisjon, yposisjon, bredde, hoyde, farge, brett)
        self.xFart = xFart
        self.yFart = yFart
        self.image = pg.Surface([bredde, hoyde])
        self.image.fill(farge)
        self.rect = self.image.get_rect()
        self.rect.center = [xposisjon, yposisjon]
        self.dx = 0.5  # Or whatever speed you want you enemies to walk in.
        self.platform = brett
    def update(self):
        """Metode for å flytte spøkelse"""
        # Sjekker om hinderet er utenfor høyre/venstre kant
        if ((self.xposisjon - 0.1) <= 160) or ((self.xposisjon + self.bredde) >= 840):
          self.xFart = -self.xFart
        
        # Sjekker om hinderet er utenfor øvre/nedre kant
        if ((self.yposisjon- 0.1) <= 0) or ((self.yposisjon + self.hoyde) >= self.brett.get_height()):
          self.yFart = -self.yFart

        # Flytter hinderet
        self.xposisjon += self.xFart
        self.yposisjon += self.yFart


objektliste = []
spillebrett = pg.display.set_mode((1000, 600))


#Lager spillerobjektet
menneske_gruppe = pg.sprite.Group()
menneske = Menneske(10,300,15, 30, (255, 38, 129), spillebrett, 0.1, 0, False)
menneske_gruppe.add(menneske)

# Lager et Hinder-objekt

spokelser_gruppe = pg.sprite.Group()
for s in range(7):
    spokelse = Spokelse(random.randrange(160,840), random.randrange(0,600), 15, 32, (255,255,255), spillebrett, 0.08, 0.12)
    spokelser_gruppe.add(spokelse)

pg.display.flip()

# Gjenta helt til brukeren lukker vinduet
fortsett = True
while fortsett:

    # Sjekker om brukeren har lukket vinduet
    for event in pg.event.get():
        if event.type == pg.QUIT:
            fortsett = False
            
        # Henter en ordbok med status for alle tastatur-taster
    trykkede_taster = pg.key.get_pressed()
    spillebrett.fill((47, 79, 79))
    frisone1 = pg.draw.rect(spillebrett, (240,240,179), (0,0,160,600))
    frisone2 = pg.draw.rect(spillebrett, (240,240,179), (840,0,160,600))

    # Tegner og flytter spiller og hinder
    menneske_gruppe.draw(spillebrett)
    menneske_gruppe.update(trykkede_taster)
    spokelser_gruppe.draw(spillebrett)
    spokelser_gruppe.update()
    # Oppdaterer alt innholdet i vinduet
    pg.display.flip()

# Avslutter pygame
pg.quit()

0

There are 0 best solutions below