python - 生成多个敌人 pygame

标签 python pygame

我有一个任务,我必须在随机位置生成 3 个敌人,但我只能生成 1 个敌人,有人可以帮助我吗?

import pygame
import random

# Initialize the pygame modules to get everything started.
pygame.init()

# The screen that will be created needs a width and a height.
screen_width = 1300
screen_height = 800
screen = pygame.display.set_mode((screen_width, screen_height))

# This creates the player and gives it the image found in this folder.
player = pygame.image.load("player.jpg")

# Creating multiple enemies
enemy = []
enemy_height = []
enemy_width = []
enemyXPosition = []
enemyYPosition = []
num_enemies = 3

for i in range(num_enemies):
    enemy.append().image.load("monster.jpg")
    enemyheight = enemy.get_height()
    enemywidth = enemy.get_width()
    enemyXPosition = random.randint(1100, screen_width)
    enemyYPosition = random.randint(0, screen_height - enemyheight)

# Get the width and height of the images in order to do boundary detection (i.e. make sure the image stays within screen boundaries or know when the image is off the screen).
image_height = player.get_height()
image_width = player.get_width()

print("This is the height of the player image: " + str(image_height))
print("This is the width of the player image: " + str(image_width))

# Store the positions of the player as variables.
playerXPosition = 100
playerYPosition = 50

# Creating conditions for game to run
keyUp = False
keyDown = False
keyLeft = False
keyRight = False

# The game loop for running game till told to stop and drawing player and enemy
while 1:

    screen.fill(0)
    screen.blit(player, (playerXPosition, playerYPosition))
    screen.blit(enemies[i], (enemiesXPosition[i], enemiesYPosition[i]))

    pygame.display.flip()

    # This loops through events in the game.
    for event in pygame.event.get():

        # This event checks if the user quits the program, then if so it exits the program.
        if event.type == pygame.QUIT:
            pygame.quit()
            exit(0)
        
        # Event for Key presses
        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_UP:
                keyUp = True
            if event.key == pygame.K_DOWN:
                keyDown = True
            if event.key == pygame.K_LEFT:
                keyLeft = True
            if event.key == pygame.K_RIGHT:
                keyRight = True

        # Event to check if key is released
        if event.type == pygame.KEYUP:

            if event.key == pygame.K_UP:
                keyUp = False
            if event.key == pygame.K_DOWN:
                keyDown = False
            if event.key == pygame.K_LEFT:
                keyLeft = False
            if event.key == pygame.K_RIGHT:
                keyRight = False

    # Checks which keys are pressed and moves player accordingly
    if keyUp == True:
        if playerYPosition > 0:
            playerYPosition -= 1

    if keyDown == True:
        if playerYPosition < screen_height - image_height:
            playerYPosition += 1

    if keyLeft == True:
        if playerXPosition > 0:
            playerXPosition -= 1

    if keyRight == True:
        if playerXPosition < screen_width - image_width:
            playerXPosition += 1

    # Bounding box for the player:
    playerBox = pygame.Rect(player.get_rect())
    playerBox.top = playerYPosition
    playerBox.left = playerXPosition

    # Make enemy approach the player.
    for i in range(num_enemies):
        enemiesXPosition[i] -= 0.15

        # Bounding box for the enemy:
        enemyBox = pygame.Rect(enemies[i].get_rect())
        enemyBox.top = enemiesYPosition[i]
        enemyBox.left = enemiesXPosition[i]

    #Test collision of the boxes:
    if playerBox.colliderect(enemyBox):
        print("You lose!")

    # If the enemy is off the screen the user wins the game:
    if enemiesXPosition[i] < 0 - enemy_width[i]:
        print("You win!")

最佳答案

大概您希望敌人对象的属性包含在以下列表中:

enemy = []
enemy_height = []
enemy_width = []
enemyXPosition = []
enemyYPosition = []

但是,在敌人初始化中,您直接分配给这些变量,而不是附加到它们:

enemyXPosition = random.randint(1100, screen_width)
enemyYPosition = random.randint(0, screen_height - enemyheight)

此外,您似乎缺少高度和宽度中的一些下划线

enemyheight = enemy.get_height()
enemywidth = enemy.get_width()

大概您想将这些值附加到 enemy_heightenemy_width

关于python - 生成多个敌人 pygame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63523461/

相关文章:

python - 计算二维数组中跨维度的平均值

python - Django 条件模板标签库加载器

python - 扭曲属性错误

python - pygame 项目无法运行 : "pygame.error: No available video device"

python - 我的 pygame 游戏中的子弹不会删除,只会穿过敌人

python - pandas.DataFrame.shift() fill_value 不工作

Python - Tkinter( Canvas ) - 左上角像素丢失?

python - 如何使用两个字段进行排序?

python - Pygame 绘制一个矩形

Pygame 如何修复 'trailing pixels' ?