Причина, по которой добавить это в ваш код так сложно, состоит в том, что на пути есть целая куча лишнего кода.
Когда это произойдет, сделайте шаг назад и попробуйте написать скелет, который именно то, что вам нужно. При работе над огромной системой, скажем, при отслеживании сложной ошибки, обычно вы комментируете разделы кода, чтобы связать проблемное пространство с чем-то управляемым. Ваш код довольно мал, поэтому, возможно, вы можете просто игнорировать его.
В любом случае сделайте резервную копию своего кода, а затем начните добавлять изменения по крупицам, проверяя, как вы go.
Сначала добавьте счетчик жизней:
# Player
playerLives = 3 # <<-- HERE
playerImg = pygame.image.load('people.png')
playerX = 370
playerY = 480
playerX_change = 0
Затем какой-нибудь способ проверить потерю жизни:
# if keystroke is pressed check if its right or left
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -2
elif event.key == pygame.K_RIGHT:
playerX_change = 2
elif event.key == pygame.K_d: # TEST CODE - Die on 'd' <<-- HERE
print( "Player Dies" )
playerLives -= 1
Теперь проверьте это? Он напечатал "Player Dies", когда вы нажали d?
Итак ... что должно произойти, когда жизни равны нулю? Возможно, игрок больше не может двигаться:
# Has the player run out of lives?
if ( playerLives <= 0 ):
game_over_text()
else:
# Player still alive, allow controls, draw player
playerX += playerX_change
if playerX <= 0:
playerX = 0
elif playerX >= 736:
playerX = 736
player(playerX, playerY)
Добавьте следующие изменения, протестируйте их. При трехкратном нажатии d
каждый раз выводится сообщение «Player Dies» и вызывается ли функция game_over_text()
? 1024 *
Проверьте это. Счет на экране работает? Нет? Внесите некоторые маленькие изменения, попробуйте еще раз, продолжайте настраивать, продолжайте исправлять. Если все это пойдет к черту в тележке, вам понадобятся лишь небольшие изменения, чтобы отменить это.
Теперь, когда механизм потери жизней работает, найдите, где он действительно должен забирать жизни, и добавьте изменения in:
# Game Over
if enemyY[i] > 440:
for j in range(num_of_enemies):
enemyY[j] = 2000
playerLives -= 1 # <<-- lose a life
#game_over_text( )
reset_enemy_positions() # <<-- move enemies back to top, TODO!
break
Конечно, если вы оставите своих врагов ниже линии 440, условие потери жизни по-прежнему остается в силе. Таким образом, игрок будет продолжать терять много жизней в секунду при каждом обновлении кадра. Врагам нужно вернуться в исходное положение (или что-то подобное).
В любом случае, я надеюсь, что это подтолкнет вас в правильном направлении. Может быть, вам поможет попробовать написать что-нибудь самому с нуля. Даже просто открыв окно. Затем добавляем обработку ключей. Потом что-нибудь рисуй ... Постепенно пополняй свои знания, думаю, так ты научишься намного быстрее. Есть причина, по которой каждая книга по программированию начинается с «Hello World» .