簡體   English   中英

無法在 pygame 中生成多個敵人

[英]Can't generate multiple enemies in pygame

我試圖在我的游戲中添加多個敵人,但即使我已經輸入了代碼,但顯示的敵人不超過一個。 我試圖調試以找到任何錯誤,但我找不到任何錯誤。

import random
import math
import pygame

# initialise pygame
pygame.init()

# player 1
playerimage = pygame.image.load("Main Player.png")
playerX = 365
playerY = 700
playerX_change = 0

# laser
# ready - bullet not on screen
# fire - bullet is shown on screen and is moving
laserimage = pygame.image.load("laser.png")
laserX = 0
laserY = 700
laserY_change = 10
laser_currentstate = "ready"

# alien player / random movement = random.randint()
alienimage = []
alienX = []
alienY = []
alienX_change = []
alienY_change = []
amount_aliens = 3

我試圖制作多個外星人,但代碼也不起作用。

for i in range(amount_aliens):
    alienimage.append(pygame.image.load('alien.png'))
    alienX.append(random.randint(0, 735))
    alienY.append(random.randint(50, 200))
    alienX_change.append(4)
    alienY_change.append(7)

score = 0


# define player
def main_player(x, y):
    screen.blit(playerimage, (x, y))


# define laster
def fire_laser(x, y):
    global laser_currentstate
    laser_currentstate = "fire"
    screen.blit(laserimage, (x + 16, y + 10))


# define alien
def alien(x, y, i):
    screen.blit(alienimage[i], (x, y))


# collision detection
def hascollision(alienX, alienY, laserX, laserY):
    distance = math.sqrt((math.pow(alienX - laserX, 2)) + (math.pow(alienY - laserY, 2)))
    if distance < 27:
        return True
    else:
        return False


# background
background = pygame.image.load('stars.png')

# display and screen title/icon
(width, height) = (800, 800)
screen = pygame.display.set_mode((width, height))
flip = pygame.display.flip()
pygame.display.set_caption("space fighters")
pygame.event.get()
icon = pygame.image.load('logo.png')
pygame.display.set_icon(icon)

from sys import exit

# loop of functions
executed = True
while executed:
    screen.fill((63, 62, 63))
    # image background
    screen.blit(background, (0, 0))
    for event in pygame.event.get():
        # if key pressed, check which input, right or left?
        if event.type == pygame.KEYDOWN:
            print("key pressed")
            if event.key == pygame.K_a:
                playerX_change = -6
            if event.key == pygame.K_s:
                playerX_change = 6
        if event.type == pygame.KEYUP:
            if event.key == pygame.K_a or event.key == pygame.K_s:
                playerX_change = 0
            if event.key == pygame.K_SPACE:
                if laser_currentstate is "ready":
                    laserX = playerX
                fire_laser(laserX, laserY)

    # bounrary algorithm, prevents player moving out/enemy.
    playerX += playerX_change

    if playerX <= 0:
        playerX = 0
    elif playerX >= 736:
        playerX = 736

    # boundry algorithm, make sure alien doesn't go out of bountry
    for i in range(amount_aliens):
        alienX[i] += alienX_change[i]
        if alienX[i] <= 0:
            alienX_change[i] = 4
            alienY[i] += alienY_change[i]
        elif alienX[i] >= 736:
            alienX_change[i] = -4
            alienY[i] += alienY_change[i]

    # collision
    collision = hascollision(alienX[i], alienY[i], laserX, laserY)
    if collision:
        laserY = 650
        laser_currentstate = "ready"
        score += 5
        print(score)
        alienX[i] = random.randint(0, 735)
        alienY[i] = random.randint(50, 200)

    alien(alienX[i], alienY[i], i)

    # movement of laser shot
    if laserY <= 0:
        laserY = 650
        laser_currentstate = "ready"

    if laser_currentstate is "fire":
        fire_laser(laserX, laserY)
        laserY -= laserY_change

    # updates screen to show screen
    main_player(playerX, playerY)
    pygame.display.update()
pygame.quit()

我也無法通過按按鈕退出游戲。

問題是你只打電話

 alien(alienX[i], alienY[i], i)

一次,你應該為你的每個外星人調用一次(所以在你的for循環中)

這是縮進的問題

碰撞檢測和alien(alienX[i], alienY[i], i)必須在for循環中完成,它迭代所有外星人:

executed = True
while executed:
    # [...]

    # boundry algorithm, make sure alien doesn't go out of bountry
    for i in range(amount_aliens):
        alienX[i] += alienX_change[i]
        if alienX[i] <= 0:
            alienX_change[i] = 4
            alienY[i] += alienY_change[i]
        elif alienX[i] >= 736:
            alienX_change[i] = -4
            alienY[i] += alienY_change[i]

        # INDENTATION !!!

        # collision
        collision = hascollision(alienX[i], alienY[i], laserX, laserY)
        if collision:
            laserY = 650
            laser_currentstate = "ready"
            score += 5
            print(score)
            alienX[i] = random.randint(0, 735)
            alienY[i] = random.randint(50, 200)

        alien(alienX[i], alienY[i], i)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM