Я пытаюсь создать случайного врага для своей игры. Для этого я видел этот метод в переполнении стека, но он, похоже, не работает для меня, и я не уверен, почему. При добавлении кода в мой список, он почему-то не go правильно. Ниже приведен мой соответствующий код для уточнения того, что я имею в виду. Код между хэштегами должен выделяться
moveFunctions:
def moveFunctions(bullets, E_bullets, score, font, window,
protagR, protagL, protagU, protagD, enemyR, enemyL, enemyU, enemyD, bg):
clock = pygame.time.Clock()
bulletSFX = pygame.mixer.Sound("ASG2_Music/shoot_Bullet_SFX.wav")
getHitSFX = pygame.mixer.Sound("ASG2_Music/Hit_SFX.wav")
enemy_getHitSFX = pygame.mixer.Sound("ASG2_Music/Monster_Hit_SFX.wav")
music = pygame.mixer.music.load("ASG2_Music/stand_Proud.mp3")
pygame.mixer.music.play(-1)
bulletDelay = 0
game_Over = True
run = True
##########################################################################################
DiArrow = enemy(random.randint(1, 500), random.randint(1, 500), 48, 48, 410)
board = player(225, 225, 64, 64, 0)
while run:
enemies = []
maxEnemies = 5
for i in range(maxEnemies):
enemies.append(enemy(random.randint(1, 500), random.randint(1, 500), 48,48, 410))
print(enemies)
##########################################################################################
if game_Over:
# show_game_Over_Screen()
game_Over = False
clock.tick(15) # Frame rate per second (FPS)
if bulletDelay > 0:
bulletDelay += 1
if bulletDelay > 3:
bulletDelay = 0
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
stopGame()
fireBullet(board, bullets, DiArrow, score, enemy_getHitSFX)
E_fireBullet(board, E_bullets, DiArrow, getHitSFX)
arrowKeys = pygame.key.get_pressed()
score = fireBullet(board, bullets, DiArrow, score, enemy_getHitSFX)
bulletDirection(arrowKeys, board, bullets, bulletDelay, bulletSFX)
bulletDelay = bulletDirection(arrowKeys, board, bullets, bulletDelay, bulletSFX)
E_bulletDirection(DiArrow, E_bullets, board)
playerControls(arrowKeys, board)
enemyControls(DiArrow, board)
redrawGameWindow(board, DiArrow, bullets, E_bullets, font, score, window, protagR, protagL, protagU, protagD,
enemyR, enemyL, enemyU, enemyD, enemies, bg)
redrawGameWindow:
def redrawGameWindow(board, DiArrow, bullets, E_bullets, font, score, window, protagR, protagL, protagU, protagD, enemyR,
enemyL, enemyU, enemyD, enemies, bg):
window.blit(bg, (0,0))
text = font.render("Score: " + str(score), 1, (255, 255, 255))
window.blit(text, (340, 513))
board.drawCharacter(window, protagR, protagL, protagU, protagD)
##########################################################################################
for i in enemies:
DiArrow.drawEnemy(window, enemyR, enemyL, enemyU, enemyD)
##########################################################################################
for bullet in bullets:
bullet.draw(window)
for bullet in E_bullets:
bullet.draw(window)
pygame.display.update()
class врага ():
class enemy():
def __init__(self, x, y, width, height, walkCount):
self.x = x
self.y = y
self.width = width
self.height = height
self.vel = 3
self.lastDirection = "right" or "left" or "up" or "down"
self.walkCount = walkCount
self.hitbox = (self.x, self.y, 48, 50)
self.health = 4
self.visible = True
def drawEnemy(self, window, enemyR, enemyL, enemyU, enemyD):
dest = (self.x, self.y)
if self.visible:
if self.walkCount + 1 >= 15:
self.walkCount = 0
if self.lastDirection == "left":
window.blit(enemyL[self.walkCount//3], dest)
self.walkCount += 1
elif self.lastDirection == "right":
window.blit(enemyR[self.walkCount//3], dest)
self.walkCount += 1
elif self.lastDirection == "up":
window.blit(enemyU[self.walkCount//3], dest)
self.walkCount += 1
elif self.lastDirection == "down":
window.blit(enemyD[self.walkCount//3], dest)
self.walkCount += 1
self.hitbox = (self.x, self.y, 48, 50)
pygame.draw.rect(window, (255, 0, 0), (self.hitbox[0], self.hitbox[1] - 15, 50, 10))
pygame.draw.rect(window, (177, 0, 175), (self.hitbox[0], self.hitbox[1] - 15, 50 - ((50/5)*(4 - self.health)), 10))
def getHit(self):
if self.health > 0:
print("Enemy Got Hit!")
self.health -= 1
else:
print("Enemy Killed!")
self.visible = False
def gameOver(self):
if self.visible == False:
pass
Я обнаружил, что при попытке проверить на наличие ошибок печать врагов в moveFunctions фактически не распечатывает список должным образом, а выдает его.
[<__main__.enemy object at 0x00000251C53A3828>]
[<__main__.enemy object at 0x00000251C53A3828>, <__main__.enemy object at 0x00000251C53A3470>]
[<__main__.enemy object at 0x00000251C53A3828>, <__main__.enemy object at 0x00000251C53A3470>, <__main__.enemy object at 0x00000251C53A3EB8>]
[<__main__.enemy object at 0x00000251C53A3828>, <__main__.enemy object at 0x00000251C53A3470>, <__main__.enemy object at 0x00000251C53A3EB8>, <__main__.enemy object at 0x00000251C53A39E8>]
[<__main__.enemy object at 0x00000251C53A3828>, <__main__.enemy object at 0x00000251C53A3470>, <__main__.enemy object at 0x00000251C53A3EB8>, <__main__.enemy object at 0x00000251C53A39E8>, <__main__.enemy object at 0x00000251C53A3048>]
Как видите, список обновляется , но вместо этого с этой странной строкой текста я понимаю.
Для полного раскрытия, я использую модуль pygame в Python, но я сомневаюсь, что именно это создает мне эту проблему здесь.
Я предполагаю, что моя проблема для maxEnemies нерест не напрямую связан с этим. Любая помощь будет высоко ценится, спасибо