【发布时间】:2020-03-02 22:04:04
【问题描述】:
我删除了之前的帖子,因为有类似的帖子。我很感激,但是因为我对 pygame 非常缺乏经验(我实际上是上周开始使用它的),所以我无法确定代码的正面或反面。另外,我发现很难应用到我的游戏中。首先,我不需要它与移动的玩家角色相关,因为他们总是从设定的位置(400、450)移动。另外,当按下鼠标左键时,我最好需要它来执行此操作,但是如果使用键更容易,那很好。我根本不具备使用过去帖子并将其应用于我的程序的专业知识。谢谢。澄清一下,我的游戏将是一款类似于猎鸭的目标射击游戏。
#Setting window dimensions and caption (Module 1)
pygame.init()
window = pygame.display.set_mode((800, 575))
pygame.display.set_caption("TARGET PRACTICE")
#Colour variables (Module 1)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (200, 0, 0)
GREEN = (0, 200, 0)
BLUE = (0, 0, 200)
exec = True
#Target class created (Module 5)
class Target:
def __init__(self, x, y, h, w, v):
self.x = x
self.y = y
self.h = h
self.w = w
self.v = v
#Instantiation of targets (Module 5)
target_1 = Target(0, 80, 60, 40, 0.5)
target_2 = Target(0, 100, 60, 40, 0.5)
target_3 = Target(0, 50, 60, 40, 0.5)
target_4 = Target(0, 75, 60, 40, 0.5)
target_5 = Target(0, 45, 60, 40, 0.5)
target_6 = Target(0, 85, 60, 40, 0.5)
#Declaring variables to be used in the while loop (Module 5)
clock = 0
target_2_threshold = 500
target_3_threshold = 1000
target_4_threshold = 1500
target_5_threshold = 2000
target_6_threshold = 2500
#Setting player sprite dimension variables (Module 6)
player_sprite_x = 357.5
player_sprite_y = 450
player_sprite_h = 125
player_sprite_w = 85
while exec:
pygame.time.delay(1)
for event in pygame.event.get():
if event.type == pygame.QUIT:
exec = False
#Defines movement of targets and sets delay between drawings (Module 5)
clock += 1
target_1.x += target_1.v
if clock > target_2_threshold:
target_2.x += target_2.v
if clock > target_3_threshold:
target_3.x += target_3.v
if clock > target_4_threshold:
target_4.x += target_4.v
if clock > target_5_threshold:
target_5.x += target_5.v
if clock > target_6_threshold:
target_6.x += target_6.v
#Fill the background (Module 5)
window.fill(RED)
#Redraw each target in every frame (Module 5)
pygame.draw.rect(window, BLUE, (target_1.x, target_1.y, target_1.h, target_1.w))
if clock > target_2_threshold:
pygame.draw.rect(window, BLUE, (target_2.x, target_2.y, target_2.h, target_2.w))
if clock > target_3_threshold:
pygame.draw.rect(window, BLUE, (target_3.x, target_3.y, target_3.h, target_3.w))
if clock > target_4_threshold:
pygame.draw.rect(window, BLUE, (target_4.x, target_4.y, target_4.h, target_4.w))
if clock > target_5_threshold:
pygame.draw.rect(window, BLUE, (target_5.x, target_5.y, target_5.h, target_5.w))
if clock > target_6_threshold:
pygame.draw.rect(window, BLUE, (target_6.x, target_6.y, target_6.h, target_6.w))
#Draw the player sprite (Module 6)
pygame.draw.rect(window, BLUE, (player_sprite_x, player_sprite_y, player_sprite_w, player_sprite_h))
pygame.display.update()
pygame.quit()
【问题讨论】:
-
您想使用鼠标单击,但您甚至没有尝试在代码中使用
pygame.MOUSEBUTTONDOWN。而且您的代码中没有向任何方向射击的子弹。 -
顺便说一句:您可以将目标保留在列表中,然后您可以使用
for-loop 来创建它们、移动它们、绘制它们并检查与项目符号的碰撞 - 代码会更短。跨度> -
@Rabbid76 这个问题说明了我为什么转发。我真的不知道如何将这些其他解决方案应用于我的程序。我不懂语言。不要删除问题,也许人们可以建议不要使用光标瞄准,因为它太复杂了?
标签: python oop pygame shapes bulletphysics