1

So I'm creating a simple minigame for my University classes. I'm new to Python/Pygame and I've come across minor bugs. I want to make my Player(Sprite) jump and have jumping animation when i click "w" or "key_up" but it doesn't seem to work. Walking animations work no problem. Also I want the Enemy when hits certain x position to stop walking animation and start attacking animation but it also doesn't seem to work.

import pygame
from glob import glob
import sys
from pygame.locals import *

# background = pygame.Surface((640, 400))
# background.fill((30, 90, 120))
# background = pygame.image.load('91cc401f51287f6cde01233e7f01623f-700x400.png')
background = pygame.image.load('game_background_1.png')

# W, H = 640, 400
W, H = 960, 540
HW, HH = W / 2, H / 2
AREA = W * H
FPS = 60
bg_x = 0
isJump = False
jumpCount = 10

pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((W, H))
window = pygame.display.set_mode((W, H))


class Sprite(pygame.sprite.Sprite):
    def __init__(self, x, y):
        super(Sprite, self).__init__()
        self.isJump = False
        self.jumpCount = 10
        self.x = x
        self.y = y
        self.SpriteWalking = glob("Knight/Walking/*.png")
        self.SpriteIdle = glob("Knight/Idle/*png")
        self.load_images()

        self.rect = self.image.get_rect()
        self.rect.topleft = [x, y]
        self.rect.x = 50
        self.rect.y = 200


    def load(self, x):
        return pygame.image.load(x).convert_alpha()

    def flip(self, x):
        return pygame.transform.flip(self.load(x), 1, 0)

    def load_images(self):
        self.walkList = [self.load(f) for f in self.SpriteWalking]
        self.walkList_flip = [self.flip(f) for f in self.SpriteWalking]
        self.idleList = [self.load(f) for f in self.SpriteIdle]
        self.idleList_flip = [self.flip(f) for f in self.SpriteIdle]
        self.counter = 0
        self.image = self.walkList[0]
        self.rect = self.image.get_rect()
        self.dir = ""
        self.prov = ""
        g.add(self)

    def update_counter(self, vel, img_list):
        self.counter += vel
        if self.counter >= len(img_list):
            self.counter = 0
        self.image = img_list[int(self.counter)]

    def update(self):
        if moveRight:
            self.update_counter(.3, self.walkList)
            self.prov = self.dir

        if moveLeft:
            self.update_counter(.1, self.walkList_flip)
            # self.image = self.listflip[int(self.counter)]
            self.prov = self.dir

        if self.dir == "":
            self.update_counter(.1, self.idleList)

            if moveRight:
                self.image = self.idleList[int(self.counter)]

            else:
                self.image = self.idleList_flip[int(self.counter)]

    def jump(self):
        global jumpCount, isJump
        if pressed_keys[K_UP] or pressed_keys[K_w]:
            if jumpCount >= -10:
                isJump = True
                # skok = pygame.image.load('0_Fallen_Angels_Falling Down_003.png')
                # window.blit(skok, self.x, self.y)
                neg = 1
                if jumpCount < 0:
                    neg = -1
                self.y -= (jumpCount ** 2) * 0.1 * neg
                jumpCount -= 1
            else:
                isJump = False
                jumpCount = 10

    def crouch(self):
        crouch_jpg = pygame.image.load('0_Fallen_Angels_Throwing_007.png')
        window.blit(crouch_jpg, (self.x, self.y))


g = pygame.sprite.Group()
# player = Rycerz(50, 200)
player = Sprite(50, 250)
# g.add(player)
moveLeft = False
moveRight = False

MOVESPEED = 3

class Ogre2(pygame.sprite.Sprite):
    def __init__(self, x, y):
        self.x = x
        self.y = y
        super().__init__()
        self.walk_animation = False
        self.sprites = []
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_000.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_002.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_004.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_006.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_008.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_010.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_012.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_014.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_016.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_018.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_020.png'))
        self.sprites.append(pygame.image.load('enemy/Walking/0_Ogre_Walking_022.png'))
        self.current_sprite = 0
        self.image = self.sprites[self.current_sprite]

        self.swing_animation = False
        self.ataki = []
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_000.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_001.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_002.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_003.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_004.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_005.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_006.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_007.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_008.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_009.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_010.png'))
        self.ataki.append(pygame.image.load('enemy/Attak/0_Ogre_Slashing_011.png'))
        self.image2 = self.ataki[self.current_sprite]

        self.rect = self.image.get_rect()
        self.rect.topleft = [x, y]

        self.rect.x = 700

        self.speedy = 0.05
        # if x > 120:
        #     x -= 0.3

    def update2(self):
        self.rect.x -= self.speedy
        if self.rect.x == 90:
            self.speedy = 0

    def swingattack(self):
        self.swing_animation = False
        if self.rect.x == 90:
            self.swing_animation = True

    def attack(self):
        self.walk_animation = True
        if self.rect.x == 90:
            self.walk_animation = False

    def update(self, speed):
        if self.walk_animation:
            self.current_sprite += speed
            if int(self.current_sprite) >= len(self.sprites):
                self.current_sprite = 0
                self.walk_animation = False

        self.image = self.sprites[int(self.current_sprite)]

    def updateattack(self, speed):
        if self.swing_animation:
            self.current_sprite += speed
            if int(self.current_sprite) >= len(self.ataki):
                self.current_sprite = 0
                self.swing_animation = False

        self.image2 = self.ataki[int(self.current_sprite)]



class Princess(pygame.sprite.Sprite):
    def __init__(self, pos_x, pos_y):
        super().__init__()
        self.attack_animation = False
        self.sprites = []
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_000.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_001.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_002.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_003.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_004.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_005.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_006.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_007.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_008.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_009.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_010.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_011.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_012.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_013.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_014.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_015.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_016.png'))
        self.sprites.append(pygame.image.load('Princess/0_Fallen_Angels_Idle Blinking_017.png'))
        self.current_sprite = 0
        self.image = self.sprites[self.current_sprite]

        self.rect = self.image.get_rect()
        self.rect.topleft = [pos_x, pos_y]

    def attack(self):
        self.attack_animation = True

    def update(self, speed):
        if self.attack_animation:
            self.current_sprite += speed
            if int(self.current_sprite) >= len(self.sprites):
                self.current_sprite = 0
                self.attack_animation = False

        self.image = self.sprites[int(self.current_sprite)]


enemy = Ogre(500, 200)
enemy2 = Ogre(650, 200)
enemy3 = Ogre(1000, 200)
# Creating the sprites and groups
moving_sprites = pygame.sprite.Group()
princess = Princess(10, 200)
moving_sprites.add(princess)
ogre = Ogre2(650, 200)


moving_sprites.add(ogre)


while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            # Change the keyboard variables.
            if event.key == K_LEFT or event.key == K_a:
                moveRight = False
                moveLeft = True
            if event.key == K_RIGHT or event.key == K_d:
                moveLeft = False
                moveRight = True
                player.image = player.walkList[int(player.counter)]

            if event.key == K_DOWN or event.key == K_s:
                player.crouch = True

        # KEYUP

        if event.type == KEYUP:
            player.counter = 0
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == K_a:
                moveLeft = False
            if event.key == K_RIGHT or event.key == K_d:
                moveRight = False
            if event.key == K_DOWN or event.key == K_s:
                player.crouch = False

    if moveLeft and player.rect.left > -35:
        player.rect.left -= MOVESPEED
        try:
            player.counter += .1
            player.image = pygame.transform.flip(player.walkList[int(player.counter)], True, False)
        except:
            player.counter = 0
            player.image = pygame.transform.flip(player.walkList[int(player.counter)], True, False)
    if moveRight and player.rect.right < W + 35:
        player.rect.right += MOVESPEED
        try:
            player.counter -= .1
            player.image = player.walkList[int(player.counter)]
        except:
            player.counter = 0
            player.image = player.walkList[int(player.counter)]

    # pressed_keys
    pygame.event.pump()
    keys = pygame.key.get_pressed()
    

    clock.tick(FPS)
    pressed_keys = pygame.key.get_pressed()
    screen.blit(background, (bg_x, 0))

    moving_sprites.draw(screen)
    moving_sprites.update(0.25)

    princess.attack()
    princess.update(0.05)

    ogre.attack()
    ogre.update(0.05)
    ogre.update2()
    ogre.swingattack()
    ogre.updateattack(0.25)

    player.jump()

    g.draw(screen)
    g.update()

    pygame.display.update()

Rabbid76
  • 202,892
  • 27
  • 131
  • 174
realpvblo
  • 29
  • 3

0 Answers0