поэтому в моей игре я пытаюсь создать систему подсчета очков, в которой каждый раз, когда враг поражен, ваш счет увеличивается на 1. Однако счет не обновляется, и я не уверен почему и как это исправить. Если возможно, я не хочу использовать глобальные переменные из-за того, что мой лектор поощряет нас против этого.
Вот весь соответствующий код (я отметил, где упоминается переменная оценки):
main ( ):
def main():
font = pygame.font.SysFont("28 Days Later", 35, True, False) # (Font name, Font size, Bold?, Italic?)
board = player(225, 225, 64, 64, 0)
DiArrow = enemy(100, 410, 48, 48, 410)
score = 0 # <------------- SCORE
bullets = []
E_bullets = []
while True:
moveFunctions(board, DiArrow, bullets, E_bullets, score, font) # <------------- SCORE
moveFunctions:
def moveFunctions(board, DiArrow, bullets, E_bullets, score, font): # <------------- SCORE
clock = pygame.time.Clock()
run = True
while run:
clock.tick(15) # Frame rate per second (FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
stopGame()
fireBullet(board, bullets, DiArrow, score) # <------------- SCORE
E_fireBullet(board, E_bullets, DiArrow)
arrowKeys = pygame.key.get_pressed()
bulletDirection(arrowKeys, board, bullets)
E_bulletDirection(DiArrow, E_bullets, board)
playerControls(arrowKeys, board)
enemyControls(DiArrow, board)
redrawGameWindow(board, DiArrow, bullets, E_bullets, font, score) # <------------- SCORE
fireBullet ():
def fireBullet(board, bullets, DiArrow, score): # <------------- SCORE
if board.lastDirection == "left":
for bullet in bullets:
if bullet.y - bullet.radius < DiArrow.hitbox[1] + DiArrow.hitbox[3] and bullet.y + bullet.radius > \
DiArrow.hitbox[1]:
if bullet.x + bullet.radius > DiArrow.hitbox[0] and bullet.x - bullet.radius < DiArrow.hitbox[0] + \
DiArrow.hitbox[2]:
DiArrow.getHit()
score += 1 # <------------- SCORE
bullets.pop(bullets.index(bullet))
if bullet.x < 500 and bullet.x > 50:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
elif board.lastDirection == "right":
for bullet in bullets:
if bullet.y - bullet.radius < DiArrow.hitbox[1] + DiArrow.hitbox[3] and bullet.y + bullet.radius > \
DiArrow.hitbox[1]:
if bullet.x + bullet.radius > DiArrow.hitbox[0] and bullet.x - bullet.radius < DiArrow.hitbox[0] + \
DiArrow.hitbox[2]:
DiArrow.getHit()
score += 1 # <------------- SCORE
bullets.pop(bullets.index(bullet))
if bullet.x < 450 and bullet.x > 0:
bullet.x += bullet.vel
else:
bullets.pop(bullets.index(bullet))
elif board.lastDirection == "up":
for bullet in bullets:
if bullet.y - bullet.radius < DiArrow.hitbox[1] + DiArrow.hitbox[3] and bullet.y + bullet.radius > \
DiArrow.hitbox[1]:
if bullet.x + bullet.radius > DiArrow.hitbox[0] and bullet.x - bullet.radius < DiArrow.hitbox[0] + \
DiArrow.hitbox[2]:
DiArrow.getHit()
score += 1 # <------------- SCORE
bullets.pop(bullets.index(bullet))
if 500 > bullet.y > 50:
bullet.y += bullet.vel
else:
bullets.pop(bullets.index(bullet))
else:
for bullet in bullets:
if bullet.y - bullet.radius < DiArrow.hitbox[1] + DiArrow.hitbox[3] and bullet.y + \
bullet.radius > DiArrow.hitbox[1]:
if bullet.x + bullet.radius > DiArrow.hitbox[0] and bullet.x - bullet.radius < \
DiArrow.hitbox[0] + DiArrow.hitbox[2]:
DiArrow.getHit()
score += 1 # <------------- SCORE
bullets.pop(bullets.index(bullet))
if 450 > bullet.y > 0:
bullet.y += bullet.vel
else:
bullets.pop(bullets.index(bullet))
# return score <------------------ I tried using return here but to no avail
redrawGameWindow ():
def redrawGameWindow(board, DiArrow, bullets, E_bullets, font, score): # <------------- SCORE
window.blit(bg, (0,0))
text = font.render("Score: " + str(score), 1, (255, 255, 255)) # <------------- SCORE
window.blit(text, (380, 515))
board.drawCharacter(window)
DiArrow.drawEnemy(window)
for bullet in bullets:
bullet.draw(window)
for bullet in E_bullets:
bullet.draw(window)
pygame.display.update()
Я должен Отметим, что помимо партитуры все работает в основном так, как должно, и что я использую модуль Pygame (хотя проблема здесь не связана с какими-либо функциями Pygame). Кроме того, доска представляет игрока, а ДиАрроу - врага.
Спасибо всем, кто мог бы помочь пролить свет на мой вопрос и пожелать всем хорошего дня