繁体   English   中英

如何添加来自左右的敌人?

[英]How can I add enemies coming from left and right?

我正在创建一个射击游戏,中下玩家可以射击左下和右下的敌人。 我看过在线教程,所有射击游戏都是太空射击,敌人从上到下都是。 这是我现在拥有的代码:

import pygame
import time
import random

# --- constants --- (UPPER_CASE_NAMES)

DISPLAY_WIDTH = 800
DISPLAY_HEIGHT = 600

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

FPS = 60

# - init -

pygame.init()

gameDisplay = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
pygame.display.set_caption("The Adventure of the Excorist's Meter")

# - objects -

background_image = pygame.image.load("skyline_background.jpg").convert()
background_position = [0, 0]


player_image_left = pygame.image.load('character_left.png')
player_image_right = pygame.image.load('character_right.png')

player_image = player_image_left

# Load enemy image
zombie_image = pygame.image.load('zombie_image.png')
devil_image = pygame.image.load('devil_image.png')
ghost_image = pygame.image.load('ghost_image.png')


def enemy(enemy_x,enemy_y):
    gameDisplay.blit(zombie_image, (enemy_x, enemy_y))

player_speed = 0
player_x = DISPLAY_WIDTH * 0.45
player_y = DISPLAY_HEIGHT * 0.65
player_x_change = 0

# - mainloop -

clock = pygame.time.Clock()
crashed = False

while not crashed:

    # - events -

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:
               player_x_change = -5
               player_image = player_image_left

            elif event.key == pygame.K_RIGHT:
                player_x_change = 5
                player_image = player_image_right

        if event.type == pygame.KEYUP:
            if event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                player_x_change = 0

    # - updates -

    player_x += player_x_change

    # - draws -

    gameDisplay.blit(background_image, background_position)

    gameDisplay.blit(player_image, (player_x, player_y))

    pygame.display.update()

    clock.tick(FPS)

# - end -

pygame.quit()

为每个敌人创建pygame.Rect()以保持其大小和位置

zombie_rect = zombie_image.get_rect()
zombie_rect.y = 300
zombie_speed = 10

devil_rect = devil_image.get_rect()
devil_rect.right = DISPLAY_WIDTH
devil_rect.y = 200
devil_speed = -10

并更改敌人x位置- updates -

zombie_rect.x += zombie_speed
devil_rect.x += devil_speed

# change direction
if zombie_rect.left <= 0 or zombie_rect.right >= DISPLAY_WIDTH:
    zombie_speed = -zombie_speed
if devil_rect.left <= 0 or devil_rect.right >= DISPLAY_WIDTH:
    devil_speed = -devil_speed

并吸引敌人- draws -

gameDisplay.blit(zombie_image, zombie_rect)

gameDisplay.blit(devil_image, devil_rect)

简要地说,您必须做一些类似于player事情。

如果教程显示了如何从上到下移动,则必须更改y 要从左向右移动,必须使用x而不是y

顺便说一句:我使用Rect()作为玩家位置( player_rect ),因此我可以检查它是否player_rect敌人。

import pygame
import random

# --- constants --- (UPPER_CASE_NAMES)

DISPLAY_WIDTH = 800
DISPLAY_HEIGHT = 600

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

FPS = 60

# --- classes ---

# --- functions ---

# --- main ---

# - init -

pygame.init()

gameDisplay = pygame.display.set_mode((DISPLAY_WIDTH, DISPLAY_HEIGHT))
pygame.display.set_caption("The Adventure of the Excorist's Meter")

# - objects -

background_image = pygame.image.load("skyline_background.jpg").convert()
background_rect = background_image.get_rect()

player_image_left = pygame.image.load('character_left.png').convert()
player_image_right = pygame.image.load('character_right.png').convert()

player_image = player_image_left
player_rect = player_image.get_rect()

player_rect.x = DISPLAY_WIDTH * 0.45
player_rect.y = DISPLAY_HEIGHT * 0.65

player_speed = 0
player_x_change = 0

# Load enemy image
zombie_image = pygame.image.load('zombie_image.png').convert()
devil_image = pygame.image.load('devil_image.png').convert()
ghost_image = pygame.image.load('ghost_image.png').convert()

zombie_rect = zombie_image.get_rect()
zombie_rect.y = 300
zombie_speed = 10

devil_rect = devil_image.get_rect()
devil_rect.right = DISPLAY_WIDTH
devil_rect.y = 200
devil_speed = -10

# - mainloop -

clock = pygame.time.Clock()
crashed = False

while not crashed:

    # - events -

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_LEFT:
               player_x_change = -5
               player_image = player_image_left

            elif event.key == pygame.K_RIGHT:
                player_x_change = 5
                player_image = player_image_right

        if event.type == pygame.KEYUP:
            if event.key in (pygame.K_LEFT, pygame.K_RIGHT):
                player_x_change = 0

    # - updates -

    player_rect.x += player_x_change

    zombie_rect.x += zombie_speed
    devil_rect.x += devil_speed

    # change direction
    if zombie_rect.left <= 0 or zombie_rect.right >= DISPLAY_WIDTH:
        zombie_speed = -zombie_speed
    if devil_rect.left <= 0 or devil_rect.right >= DISPLAY_WIDTH:
        devil_speed = -devil_speed

    if player_rect.colliderect(zombie_rect):
        print("You touch zombie")
    if player_rect.colliderect(devil_rect):
        print("You touch devil")

    # - draws -

    gameDisplay.blit(background_image, background_rect)

    gameDisplay.blit(player_image, player_rect)

    gameDisplay.blit(zombie_image, zombie_rect)

    gameDisplay.blit(devil_image, devil_rect)

    pygame.display.update()

    clock.tick(FPS)

# - end -

pygame.quit()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM