gpt4 book ai didi

python - 更新矩形坐标未在 pygame 中注册?

转载 作者:行者123 更新时间:2023-12-01 08:52:20 26 4
gpt4 key购买 nike

我正在尝试自学在 pygame 中编写代码,目前正在为家庭项目制作一个简单的游戏。我编写的代码认为它应该根据玩家的输入来更新游戏循环的每次迭代中玩家的矩形坐标。然而,矩形的坐标被重置,而不是改变。任何帮助将不胜感激。

import pygame, sys

from pygame.locals import*
from sys import exit

pygame.init()

##Set up the colours
WHITE =(255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
ORANGE = (255, 165, 0)
PINK = (255, 192, 203)
YELLOW = (255, 255, 0)
KHAKI = (189, 183, 107)
MAGENTA = (255, 0, 255)

##Set up the window
WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')


##Set up level variable
level = 1

##Run game loop
while True:
##Check for quit event
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit(); sys.exit()


##Check for level
if level == 1:
screen.fill(WHITE)
MOVESPEED = 10

##Enemy rectangles
e1 = pygame.Rect(200, 0, 50, 100)
e2 = pygame.Rect(250, 50, 50, 100)
e3 = pygame.Rect(300, 100, 50, 100)
e4 = pygame.Rect(450, 250, 50, 100)
e5 = pygame.Rect(500, 300, 50, 100)
e6 = pygame.Rect(550, 350, 50, 100)

enemies = [e1, e2, e3, e4, e5, e6]

##Draw enemy rectangles
pygame.draw.rect(screen, RED, e1, 0)
pygame.draw.rect(screen, RED, e2, 0)
pygame.draw.rect(screen, RED, e3, 0)
pygame.draw.rect(screen, RED, e4, 0)
pygame.draw.rect(screen, RED, e5, 0)
pygame.draw.rect(screen, RED, e6, 0)

##Player rectangle
player = pygame.Rect(25, 25, 50, 50)

##Change keyboard variables

if event.type == KEYDOWN:
if event.key == K_LEFT or event.key == K_a:
moveRight = False
moveLeft = True
if event.key == K_RIGHT or event.key == K_d:
moveLeft = False
moveRight = True
if event.key == K_UP or event.key == K_w:
moveDown = False
moveUp = True
if event.key == K_DOWN or event.key == K_s:
moveUp = False
moveDown = True
if event.type == KEYUP:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.key == K_LEFT or event.key == K_a:
moveLeft = False
if event.key == K_RIGHT or event.key == K_d:
moveRight = False
if event.key == K_UP or event.key == K_w:
moveUp = False
if event.key == K_DOWN or event.key == K_s:
moveDown = False
##Move the player with the keyboard

if event.type == KEYDOWN:
if event.key == K_LEFT or event.key == K_a:
player.left -= MOVESPEED
if event.key == K_DOWN or event.key == K_s:
player.top += MOVESPEED
if event.key == K_RIGHT or event.key == K_d:
player.left += MOVESPEED
if event.key == K_UP or event.key == K_w:
player.top -= MOVESPEED

##Check if player is in the window
if player.top < 0:
#The player has moved past the top
player.top += 1

if player.bottom > WINDOWHEIGHT:
#The player has moved past the bottom
player.top -= 1

if player.left < 0:
#The player has moved past the left side
player.left += 1

if player.right > WINDOWWIDTH:
#The player has moved past the right side
player.left -= 1

#Draw player onto the screen
pygame.draw.rect(screen, GREEN, player)
pygame.display.flip()

最佳答案

您在每次循环迭代中一次又一次地定义敌人和玩家。您需要定义它们一次。然后在循环中更新并绘制它们。这就是您问题的解决方案。

我尝试了你的代码并进行了一些更改。为了简单起见,我删除了您目前不使用的部分,并组合了一些 if 条件。

这是我的代码:

import pygame, sys

from pygame.locals import *
from sys import exit


#SET UP
pygame.init()

WHITE =(255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)

WINDOWHEIGHT = 500
WINDOWWIDTH = 1000
MOVESPEED = 10

e1 = pygame.Rect(200, 0, 50, 100)
e2 = pygame.Rect(250, 50, 50, 100)
e3 = pygame.Rect(300, 100, 50, 100)
e4 = pygame.Rect(450, 250, 50, 100)
e5 = pygame.Rect(500, 300, 50, 100)
e6 = pygame.Rect(550, 350, 50, 100)

player = pygame.Rect(25, 25, 50, 50)

screen = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
pygame.display.set_caption('Tower')

##GAME LOOP
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()

if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()

if (event.key == K_LEFT or event.key == K_a) and player.left > MOVESPEED:
player.left -= MOVESPEED
player.right -= MOVESPEED

if (event.key == K_RIGHT or event.key == K_d) and player.right < WINDOWWIDTH - MOVESPEED:
player.left += MOVESPEED
player.right += MOVESPEED

if (event.key == K_DOWN or event.key == K_s) and player.bottom < WINDOWHEIGHT - MOVESPEED:
player.top += MOVESPEED
player.bottom += MOVESPEED

if (event.key == K_UP or event.key == K_w) and player.top > MOVESPEED:
player.top -= MOVESPEED
player.bottom -= MOVESPEED

#DRAW SCREEN AT EACH ITERATION
screen.fill(WHITE)

pygame.draw.rect(screen, RED, e1, 0)
pygame.draw.rect(screen, RED, e2, 0)
pygame.draw.rect(screen, RED, e3, 0)
pygame.draw.rect(screen, RED, e4, 0)
pygame.draw.rect(screen, RED, e5, 0)
pygame.draw.rect(screen, RED, e6, 0)

pygame.draw.rect(screen, GREEN, player)

pygame.display.flip()

关于python - 更新矩形坐标未在 pygame 中注册?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031059/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com