web-dev-qa-db-fra.com

Des ennemis tirent sur un problème de joueur? pygame

J'essaie de forcer mon ennemi à tirer sur mon joueur mais pour une raison quelconque, les balles ne sont pas visibles ni ne tirent sur le joueur, je ne sais même pas pourquoi, je tire même les balles sur ma fenêtre VIDÉO

bulls = []
runninggame = True
while runninggame:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            runninggame = False

    for bull in bulls:
        if bull.x < 500 and bull.x > 0:
            bull.x += bull.vel  # Moves the bullet by its vel
        else:
            for enemys in enemying:
                if playerman.x - 100 <= enemys.x <= playerman.x + 100 and playerman.y - 100 <= enemys.y <= playerman.y + 100:
                    bulls.pop(bulls.index(bull))
                    bulls.append(enemybullets(round(enemys.x+enemys.width//2), round(enemys.y + enemys.height//2), 6, (0,0,0), facing)) 


alors je l'ai appelé ci-dessous

    for bull in bulls:
        bull.draw(window)

ma classe de projectiles ennemis

# enemys bullets
class enemybullets(object):
    def __init__(self,x,y,radius,color,facing):
        self.x = x
        self.y = y
        self.radius = radius
        self.color = color
        self.facing = facing
        self.vel = 8 * facing

    def draw(self,win):
        pygame.draw.circle(win, self.color, (self.x,self.y), self.radius)



3
Habib Ismail

C'est le code d'un jeu très similaire que j'ai créé à l'aide d'un tutoriel il y a quelque temps.

Ma première suggestion est d'essayer de réduire la vitesse des balles afin de vous assurer que rien ne vous manque à l'écran.

Assurez-vous ensuite que vous mettez à jour correctement le contenu des écrans.

Il est difficile de donner une réponse complète sans jeter un coup d'œil à votre code complet.J'ai inclus mon code ici afin que vous puissiez référencer et résoudre le problème.

J'espère que cela t'aides.

import pygame

pygame.init()

win = pygame.display.set_mode((800, 480))

clock = pygame.time.Clock()

char = pygame.image.load('standing.png')

bulletSound = pygame.mixer.Sound('gshot.wav')
shotHit = pygame.mixer.Sound('bounce.wav')
backSound = pygame.mixer.music.load('music.mp3')
pygame.mixer.music.play(-1)


walkLeft = [pygame.image.load('L1.png'), pygame.image.load('L2.png'), pygame.image.load('L3.png'),
            pygame.image.load('L4.png'), pygame.image.load('L5.png'),
            pygame.image.load('L6.png'), pygame.image.load('L7.png'), pygame.image.load('L8.png'),
            pygame.image.load('L9.png')]

walkRight = [pygame.image.load('R1.png'), pygame.image.load('R2.png'), pygame.image.load('R3.png'),
             pygame.image.load('R4.png'), pygame.image.load('R5.png'),
             pygame.image.load('R6.png'), pygame.image.load('R7.png'), pygame.image.load('R8.png'),
             pygame.image.load('R9.png')]

b_walkLeft = [pygame.image.load('L1E.png'), pygame.image.load('L2E.png'), pygame.image.load('L3E.png'),
            pygame.image.load('L4E.png'), pygame.image.load('L5E.png'),
            pygame.image.load('L6E.png'), pygame.image.load('L7E.png'), pygame.image.load('L8E.png'),
            pygame.image.load('L9E.png'), pygame.image.load('L10E.png'), pygame.image.load('L11E.png')]
b_walkRight = [pygame.image.load('R1E.png'), pygame.image.load('R2E.png'), pygame.image.load('R3E.png'),
             pygame.image.load('R4E.png'), pygame.image.load('R5E.png'),
             pygame.image.load('R6E.png'), pygame.image.load('R7E.png'), pygame.image.load('R8E.png'),
             pygame.image.load('R9E.png'), pygame.image.load('R10E.png'), pygame.image.load('R11E.png')]

pygame.display.set_caption("My Samurai(v1.0)")

x, y = 50, 50
bx, by = 250, 250
p_width, p_height = 40, 50
b_width, b_height = 40, 50

jumpCount = 5
walkCount = 0


class bullets:

    def __init__(self, x, y, surface, mov_speed):
        self.x = x
        self.y = y
        self.surface = surface
        self.mov_speed = mov_speed

    def draw(self):
        pygame.draw.circle(self.surface, (200, 20, 20), (self.x, self.y), 3, 1)
        self.x += self.mov_speed






class figure:

    def __init__(self, x, y, width, height, surface):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.surface = surface
        self.jumpCount = 5
        self.jump = False
        self.walkCount = 0
        self.move = False
        self.maxCount = 0
        self.hitboxWidth = 55
        self.hitboxHeight = 55
        self.hitbox = [self.x, self.y, self.hitboxWidth, self.hitboxHeight]

    def p_jump(self):
        if self.jump:
            print("i came here")
            if self.jumpCount > 0:
                self.y -= int((self.jumpCount ** 2) / 2) * 6
                self.jumpCount -= 1
                print("im here 1", self.jumpCount, "y pos", self.y)
            else:
                self.y += int((self.jumpCount ** 2) / 2) * 6
                self.jumpCount -= 1
                print("i came here 2", self.jumpCount)

            if self.jumpCount == -6:
                self.jumpCount = 5
                self.jump = False
                print(jump)

    def draw(self, dirL, dirR, surface, arrayL, arrayR):
        #pygame.draw.rect(self.surface, (255, 0, 0), (self.hitbox[0], self.hitbox[1], self.hitboxWidth, self.hitboxHeight), 1)
        if dirL:
            if self.move:
                surface.blit(arrayL[self.walkCount // 3], (self.x, self.y))
                self.walkCount += 1
            else:
                surface.blit(arrayL[self.walkCount // 3], (self.x, self.y))

        if dirR:
            if self.move:
                surface.blit(arrayR[self.walkCount // 3], (self.x, self.y))
                self.walkCount += 1
            else:
                surface.blit(arrayR[self.walkCount // 3], (self.x, self.y))

        if self.walkCount > self.maxCount:
            self.walkCount = 0


speed = 5
jump = False
run = True
left = False
right = True
player = figure(x, y, p_width, p_height, win)
beast = figure(bx, by, b_width, b_height, win)
player.maxCount = 24
beast.maxCount = 30
beast.move = True
player.hitboxWidth = 42
beast.hitboxWidth = 42
body = []
i = 0
bSpeed = 8
score = 0
score_font = pygame.font.SysFont('arial', 20, 1, 1)
hit_font = pygame.font.SysFont('calibri', 80, 1, 1)
while run:
    pygame.time.delay(50)
    pygame.display.update()
    clock.tick(27)
    bg = pygame.image.load('bg.jpg')
    win.blit(bg, (0, 0))
    score_display = score_font.render("Score: {}".format(score), 1, (0, 0, 0))
    win.blit(score_display, (700, 10))
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player.x > 0:
        player.x -= speed
        left = True
        right = False
        player.move = True
        bSpeed = -8
    Elif keys[pygame.K_RIGHT] and player.x + p_width + speed + 5 < 800:
        player.x += speed
        left = False
        right = True
        player.move = True
        bSpeed = 8
    else:
        player.move = False
        player.walkCount = 0

    if keys[pygame.K_UP] and player.y > 0 and not jump:
        player.y -= speed
    if keys[pygame.K_DOWN] and player.y + p_height + speed + 5 < 480 and not jump:
        player.y += speed
    if keys[pygame.K_SPACE]:
        player.jump = True
    if keys[pygame.K_s] and i <= 0:
        body.append(bullets(player.x + 32, player.y + 40, win, bSpeed))
        i = 4
        bulletSound.play()
    for bullet in body:
        bullet.draw()
        if beast.x + 25 < bullet.x < beast.x + beast.hitboxWidth:
            if beast.y < bullet.y < beast.y + beast.hitboxHeight:
                body.pop(body.index(bullet))
                score += 1
                shotHit.play()


    # beast position cal
    if beast.x - player.x > 0:
        b_right = False
        b_left = True
        beast.x -= int((beast.x - player.x) * 0.025)
    else:
        b_right = True
        b_left = False
        beast.x -= int((beast.x - player.x) * 0.025)

    if beast.y - player.y > 0:
        beast.y -= int((beast.y - player.y) * 0.025)
    else:
        beast.y -= int((beast.y - player.y) * 0.025)

    if i > 0:
        i -= 1

    player.p_jump()
    player.draw(left, right, win, walkLeft, walkRight)
    beast.draw(b_left, b_right, win, b_walkLeft, b_walkRight)

    player.hitbox = [player.x + 10, player.y + 8, player.hitboxWidth, player.hitboxHeight]
    beast.hitbox = [beast.x + 10, beast.y + 5, beast.hitboxWidth, beast.hitboxHeight]

    if (player.hitbox[0] < beast.hitbox[0] < player.hitbox[0] + player.hitbox[2] - 20) or\
            (player.hitbox[0] + 15 < beast.hitbox[0] + beast.hitbox[2] <= player.hitbox[0] + player.hitbox[2]):
        if (player.hitbox[1] < beast.hitbox[1] < player.hitbox[1] + player.hitbox[3] - 10) or\
                (player.hitbox[1] + 10 < beast.hitbox[1] + beast.hitbox[3] < player.hitbox[1] + player.hitbox[3]):
            score -= 5
            hit_display = hit_font.render("-5", 1, (255, 0, 0))
            win.blit(hit_display, (400, 200))
            pygame.display.update()
            pygame.time.delay(1000)
            player.x, player.y = 100, 100
            beast.x, beast.y = 600, 300
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False



pygame.quit()
1
AfiJaabb