Prosta gra tekstowa i użycie pętli while

0

Witam.
Przyswajam sobie wiedzę o pentlach i warunkach i piszę prostą grę tekstową. Zamieszczę kod źródłowy.

# Gra survivalowa Zombie Hunter


print(
      """
                    _     _      
                   | |   (_)     
 _______  _ __ ___ | |__  _  ___ 
|_  / _ \| '_ ` _ \| '_ \| |/ _ \
 / / (_) | | | | | | |_) | |  __/
/___\___/|_| |_| |_|_.__/|_|\___|
      """)

import random
print("\t\tWitaj w grze Zombie Hunter!")

imię = str(input("Wybierz imię dla twojej postaci: "))
print("Witaj", imię, " zaczynajmy!")

print("Jesteś w miasteczku oddalonym o 300 km od bezpiecznej strefy." \
      "\nMusisz kierować się na zachód aby dotrzeć do obozu." \
      "\nPo drodzę czekają na ciebie niebezpieczeństwa!" \
      "\nŚmierć jest wszędzie, ale nie tylko martwych trzeba się bać."\
      "\n Wychodzisz z domu i stoisz na ulicy.")

response = "na zachód"
x = str(input("Gdzie chcesz się udać? "))
while True:
    if x == response:
        print("Kierujesz się na zachód.")
        break
    elif x != response:
        print("Spróbuj ponownie!")
    else:
        print("Ups. Coś się zepsuło!")
        break
    x = str(input("Gdzie chcesz się udać? "))
print("Po przejściu 2km na twojej drodze pojawia się opuszczony dom")

dom = str(input("Chesz do niego wejść?" ))
odpowiedź = "tak"
while True:
    if odpowiedź == "tak":
        print("Wchodzisz do środka!")
        break
    else:
        print("Coś nie działa! Spróbuj ponownie")
        break
    dom = str(input("Chcesz do niego wejść? "))
    
zombie = random.randint(1, 3) 
health= 10
damage = random.randint(1, 2)
while True:
    print("Biegnie na ciebie", zombie, "żywych trupów")
    if zombie == 0:
        print("Zabiłeś wszystkie żywe trupy")
        break
    elif zombie != 0:
        print("Pokonaj wszystkie trupy")
    else:
        print("Coś się zepsuło. Spróbuj ponownie")
    zombie -= 1
    health -= damage
    print("Słychać odgłosy łamanych kości i trzaskających czaszek...")
    
input("\nNaciśnij enter aby kontynuować.")

print("Pokonałeś", zombie, "żywe trupy" + " twoje zdrowie wynosi ", health

Jak widzicie wygenerowałem losową liczbę żywych trupów , z którymi gracz musi się zmierzyć. Pętla działa dobrze, ale ostatnia instrukcja print() nie wypisuje liczby pokonanych zombie. Zawsze zwraca wartość 0 a ja bym chciał, żeby zwracała liczbę pokonanych potworów.

Próbowałem z inną pętlą:

zombie = 0 
health= 10
damage = random.randint(1, 2)
while health > 6:
    zombie += 1
    health -= damage
    print("Słychać dźwięk łamania kości i trzaskających czaszek...")

print("Pokonałeś", zombie, " żywych trupów" + " a twoje zdrowie wynosi", health)

W tym kodzie nalicza mi pokonanych zombie i odejmuje losowo zadane obrażenia. Ale ja chciałbym, żeby gracz walczył z losową liczbą trupów a nie żeby ich pojawianie było uzależnione od punktów zdrowia. Co robię źle?

6

W pierwszym kodzie zmieniasz wartość zombie i czynisz z tej zmiennej warunek pętli, a potem próbujesz wykorzystać ją w zupełnie innym kontekście — chciałbyś mieć wartość sprzed pętli, a nie wartość po pętli. Sensowne rozwiązanie: losuj sobie liczbę starting_zombies, i z niej rób current_zombies = starting_zombies. Pętlę obchodzi current_zombies, na końcu wypisujesz starting_zombies. Możesz też mieć starting_zombieskilled_zombies = 0, i warunkiem wyjścia z pętli będzie killed_zombies == starting_zombies. Wszystko jedno jak, ale jak używasz czegoś do dwóch zupełnie różnych rzeczy (mierzenia postępu i zapamiętywania stanu wyjściowego), to to nie powinna być jedna rzecz, a dwie.

W drugim… no cóż, jak chcesz, by liczba trupów była losowa niezależnie od zdrowia, to wylosuj ją sobie niezależnie od zdrowia… Bo na razie zrobiłeś dokładnie tak, jak pisałeś, że nie chcesz, zamiast napisać jak chcesz.

0

Ok z dwoma zmiennymi wszystko działa. Teraz będą pamiętał. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1