Возможная проблема в том, что поток "ходит" по коду и уже проверяет действие игрока:
scr.listen()
scr.onkey(player.move_up, "w")
scr.onkey(player.move_down, "s")
scr.onkey(player.move_left, "a")
scr.onkey(player.move_right, "d")
Однако, останавливаясь на:
while total_score < 3:
if Inf1:
player.goto(0,-100)
total_score += 1
if Inf2:
End.hideturtle()
break
total_score никогда не будет больше 3, т.к. проверка бесконечна и никогда не выйдет из while, отчего приложение и виснет. У тебя нет в if "выхода из ситуации" в цикле while, потому происходит бесконечное опрашивание от if1 к if2. Условия не совпадают. Возвращаемся в начало while, а там что? If1. Далее If2. Они не удовлетворяют условия, возвращаемся... Суть ясна?
Можешь попробовать:
while total_score < 3:
if Inf1:
player.goto(0,-100)
total_score += 1
else:
End.hideturtle()
break