产生多个敌人

时间:2020-08-21 13:04:33

标签: 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!")

2 个答案:

答案 0 :(得分:3)

为敌人和敌人的坐标创建列表。加载敌人图像并将敌人添加到随机位置:

enemies = []
enemiesXPosition = []
enemiesYPosition = []
num_enemies = 3

enemy = pygame.image.load("monster.jpg")
enemyheight = enemy.get_height()
enemywidth = enemy.get_width()

for i in range(num_enemies):

    enemyx = random.randint(1100, screen_width - enemywidth)
    enemyy = random.randint(0, screen_height - enemyheight)

    enemies.append(enemy)
    enemiesXPosition.append(enemyx)
    enemiesYPosition.append(enemyy)

画出一个循环中的敌人:

while 1:

    screen.fill(0)
    screen.blit(player, (playerXPosition, playerYPosition))
    for i in range(num_enemies):
        screen.blit(enemies[i], (enemiesXPosition[i], enemiesYPosition[i]))

移动敌人并循环测试碰撞:

while 1:
    # [...]

    # 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 - enemywidth:
            print("You win!")

完整的示例代码:

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
enemies = []
enemiesXPosition = []
enemiesYPosition = []
enemy_width = []
enemy_height = []
num_enemies = 3

enemy = image.load("monster.jpg")
enemyheight = enemy.get_height()
enemywidth = enemy.get_width()

for i in range(num_enemies):

    enemyx = random.randint(1100, screen_width - enemywidth)
    enemyy = random.randint(0, screen_height - enemyheight)

    enemies.append(enemy)
    enemiesXPosition.append(enemyx)
    enemiesYPosition.append(enemyy)
    enemy_width.append(enemywidth)
    enemy_height.append(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))
    for i in range(num_enemies):
        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 - enemywidth:
            print("You win!")

答案 1 :(得分:1)

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

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