pygame运行时,窗口变黑



我是python的新手,只是跟着视频创建游戏,我做得很好,但游戏窗口/屏幕变黑了。

我期待着游戏以正确的方式运行,但似乎我做错了什么,因为它对我不起作用。

我可以在[i]代码之前玩游戏,我可以回去玩,但我想有多个敌人,一旦我关闭程序,我就可以很快看到它,黑色权杖显示了游戏,但随后它关闭了。

import pygame
import random
import math
# initialize the pygame
pygame.init()
# create the screen
screen = pygame.display.set_mode((800, 600))

# enemy to many anemy multiplicar los enemigos
enemyimg = []
enemyX = []
enemyY = []
enemyX_change = []
enemyY_change = []
num_of_enemies = 6
for i in range(num_of_enemies):
# Player(enemy)
enemyimg.append(pygame.image.load("enemy.png"))
enemyX.append(random.randint(0, 735))
enemyY.append(random.randint(50, 150))
enemyX_change.append(0.2)
enemyY_change.append(40)
# (bullet)
# ready_state means you cant see the bullet before firing
# fire - the bullet is currently moving
bulletimg = pygame.image.load("bullet.png")
bulletX = 0
bulletY = 480
bulletX_change = 0.2
bulletY_change = 1
bullet_state = ("ready")
score = 0


def fire_bullet(x, y):
global bullet_state
bullet_state = "fire"
screen.blit(bulletimg, (x + 16, y + 10))

def isCollision(enemyX, enemyY, bulletX, bulletY):
distance = math.sqrt((math.pow(enemyX - bulletX, 2)) + (math.pow(enemyY - bulletY, 2)))
if distance < 27:
return True
else:
return False




# enemy movement
for i in range(num_of_enemies):
enemyX[i] += enemyX_change[i]
if enemyX[i] <= 0:
enemyX_change[i] = 0.3
enemyY[i] += enemyY_change[i]
elif enemyX[i] >= 745:
enemyX_change[i] = -0.3
enemyY[i] += enemyY_change[i]

# Collission
collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
if collision:
bulletY = 480
bullet_state = "ready"
score += 1
print(score)
enemyX[i] = random.randint(0, 735)
enemyY[i] = random.randint(50, 150)
enemy(enemyX[i], enemyY[i], i)
# bullet movement
if bulletY <= 0:
bulletY = 480
bullet_state = "ready"
if bullet_state == "fire":
fire_bullet(bulletX, bulletY)
bulletY -= bulletY_change
player(playerX, playerY)
pygame.display.update()

我认为应该在代码中添加while循环,否则它只会运行一次。据我所见,人们通常是这样做的:

run = True
while run:
# enemy movement
for i in range(num_of_enemies):
enemyX[i] += enemyX_change[i]
if enemyX[i] <= 0:
enemyX_change[i] = 0.3
enemyY[i] += enemyY_change[i]
elif enemyX[i] >= 745:
enemyX_change[i] = -0.3
enemyY[i] += enemyY_change[i]

# Collission
collision = isCollision(enemyX[i], enemyY[i], bulletX, bulletY)
if collision:
bulletY = 480
bullet_state = "ready"
score += 1
print(score)
enemyX[i] = random.randint(0, 735)
enemyY[i] = random.randint(50, 150)
enemy(enemyX[i], enemyY[i], i)
# bullet movement
if bulletY <= 0:
bulletY = 480
bullet_state = "ready"
if bullet_state == "fire":
fire_bullet(bulletX, bulletY)
bulletY -= bulletY_change
player(playerX, playerY)
pygame.display.update()

当然,加上你之前拥有的所有关于循环的东西,你可以在这里了解更多关于游戏循环的信息

最新更新