python - 在 python/pygame 中使用箭头键使图像移动一格

标签 python image keyboard pygame

我正在尝试创建一个游戏,其中“player_one.png”由箭头键控制移动并躲避一堆随机放置的“player_two.png”,这些“player_two.png”可以在足球上以随机方向自行移动 field 。

我创建了一个显示该字段和两个图像的程序。我很难让“player_two.png”在场上显示多个副本,并且无法让它们移动。

我也无法让“player_one.png”图像根据箭头键移动。我发现了一个使用 Sprites 的程序,它以与我希望我的玩家移动相同的方式移动红色 block ,但无法用我的图像切换 Sprite 。

这是我的初始设置,它显示了场和彼此面对的两个图像。

import pygame
import random
pygame.init()

#colors
black = (0, 0, 0)
white = (255, 255, 255)
green = (0, 100, 0)
red = (255, 0, 0)


size = [1000, 500]
screen = pygame.display.set_mode(size)

pygame.display.set_caption("Tony's newest game attempt")


#boolean for while loop
done = False

#create clock 
clock = pygame.time.Clock()

#declare font
font = pygame.font.Font(None, 25)

player_one = pygame.image.load("player_one.png").convert()
player_one.set_colorkey(white)

player_two = pygame.image.load("player_two.png").convert()
player_two.set_colorkey(white)

while done == False:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True             


    screen.fill(green)

    for x in range(60,940,35):
        pygame.draw.line(screen, white, [x, 0], [x, 500], 1)


    score = 0
    text = font.render("Score:" +str(score), True, black)

    screen.blit(text, [0, 0])
    screen.blit(player_one, [940, 240])

    screen.blit(player_two, [60, 240])


    pygame.display.flip()

    clock.tick(20)

pygame.quit()

使用类(我无法处理图像的东西)的 Sprite 程序使用以下代码移动玩家 Sprite :(请注意,这不是整个程序)。

class Player(pygame.sprite.Sprite):
    # Constructor function
    def __init__(self, color, x, y):
        # Call the parent's constructor
        pygame.sprite.Sprite.__init__(self)

        # Set height, width
        self.image = pygame.Surface([35, 35])
        self.image.fill(color)

        # Make our top-left corner the passed-in location.
        self.rect = self.image.get_rect()
        self.rect.x = 930
        self.rect.y = 250

    def reset_player(self):
        self.rect.x = 930
        self.rect.y = 250

    # Find a new position for the player
    def update(self):
        self.rect.x += self.change_y
        self.rect.y += self.change_x

while done == False:

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

        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                player.rect.x -= player.rect.width
            elif event.key == pygame.K_RIGHT:
                player.rect.x += player.rect.width
            elif event.key == pygame.K_UP:
                player.rect.y -= player.rect.height
            elif event.key == pygame.K_DOWN:
                player.rect.y += player.rect.height


    # -- Draw everything
    # Clear screen
    screen.fill(green)

    for x in range(60,940,35):
        pygame.draw.line(screen, white, [x, 0], [x, 500], 1)


    # Draw sprites  
    all_sprites_list.draw(screen)

    text = font.render("Score: "+str(score), True, black)
    screen.blit(text, [10, 10])


    # Flip screen   
    pygame.display.flip()

    # Pause
    clock.tick(20)  

pygame.quit()

有人可以帮我弄清楚如何让我的图像按照 Sprite 的方式移动吗?或者帮助我在整个 field 上显示“player_two.png”并朝随机方向移动。如果“player_two.png”每按箭头键 3 次就移动一次,那就最好了。如果这不清楚,请给我发电子邮件,我可以发送我的代码。我需要在两周内完成这个游戏!

最佳答案

对游戏的多条评论 -

  1. 我没有看到 self.change_y 的定义位置。另外,更新函数不应该像 - self.rect.x += self.change_x 而不是 self.rect.x += self.change_y 吗? p>

  2. 此外,主循环应该是这样的

    while not done:
    
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                done=True
    
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    if player.rect.x > 0:
                        player.rect.x -= player.rect.width
                elif event.key == pygame.K_RIGHT:
                    if player.rect.x < screen_width: # the screen/game width
                        player.rect.x += player.rect.width
                # Something similar for the up & down keys
    

我建议您查看this question .

关于python - 在 python/pygame 中使用箭头键使图像移动一格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052067/

相关文章:

ios - 关闭键盘时,如何将现有文本字段保留在同一位置?

python - 合并长度不等的pandas数据框

angular - 如何在 Angular 中重置更改事件

python - 为什么 str.translate 在 Python 3 中不起作用?

java - 不断收到 nullpointerException?我正在尝试打印图像

python - 如何在 Python 中查找 base64 编码图像的文件扩展名

wpf - 在 WPF 中的 WindowsFormsHost 控件中捕获键盘输入

shell - 如何在 tcsh shell 上映射 Delete 和 End 键?

python - INSPECTDB 和 INSPECTDB_REFACTOR 生成空模型

python - 将相对图像路径绑定(bind)到 *.py 文件