Gra - problem z wywołaniem funkcji, jak to zrobić?

0

Jestem początkującym i niewiele ogarniam, ale utknąłem i nie wiem jak rozpisać ten program dalej, żeby zaczął działać.
Gra polega na tym, że się wybiera między kilkoma opcjami i przechodzi dalej. Mógłbym ją zrobić stosując if else, ale bym miał wtedy bardzo dużo kodu, bo musiałbym przepisywać kolejny etap historii w każdym poprzednim wyborze i zrobiłem if else i dałem tam wywołanie funkcji.

Teraz opis mojego problemu. Czy w metodzie mogę wywołać kolejną metodę. Bo wiecie wybieram np. drogę A, która wywołuje funkcję np. królestwoElfów. Potem w tej funkcji chce przejść do kolejnego etapu, gdy już wybieram coś tam np. w funkcji krainaElfów() i na koniec jak już wybrałem jakąś tam decyzję chce sobie przejść do kolejnego etapu czyli wywołuje funkcję władcaElfów() , ale nie da się, bo gra zamiast przejść do tamtej funkcji włącza się od nowa. 1.Czy w ogóle można wywoływać funkcję w funkcji w pythonie?

  1. Jakbyście ten program rozpisali.

  2. Czy widzicie jakieś inne podstawowe błędy, które robię w programowaniu?

  3. Co zrobić, żeby wartość jakiejś zmiennej była dostępna wszędzie, np. w definicji krainaElfów mam zmienną twojeZłoto2 i chciałbym używać tej zmiennej potem (w kolejnej funkcji), ale się nie da, bo zasięg nie pozwala.

import random
import time

def wyświetlIntro():
    print('''Witaj! Ostatniej nocy spędziłeś w karczmie długie godziny. Chyba
    ktoś dosypał ci coś do kufla, bo nic nie pamiętasz. Budzisz się pośrodku
    wielkiego, ciemnego lasu. Wygląda na bardzo stary.''')
    time.sleep(4)

def pierwszeKroki():
    print('''Powoli wstajesz. Jak na środek lata nie jest zbyt ciepło. Rozglądasz
    się dookoła. Widzisz stare drzewa, gdzieniegdzie paprocie. Słyszysz śpiew ptaków
    i zapach kwiatów. Kilkadziesiąt metrów dalej widzisz niewielkie wzniesienie, a
    na nim kilka drzew. Postanawiasz tam iść i wspiąć na jedno z nich, aby móc lepiej
    rozejrzeć się po okolicy. Zajmuje ci to trochę czasu...''')
    time.sleep(6)

def widokOkolicy():
    print('''Wspinasz się na najwyższe drzewo i widzisz okolicę. Widzisz niedaleko drogę,
    możesz nią dotrzeć na północ lub południe lasu. Od ciebie zależy, którą drogę wybierzesz.
    Na północy widzisz, że las robi się jeszcze gęstszy, a drzewa są większe. Na południu
    las się rozrzedza, a na końcu widoć góry. Którą drogę wybierzesz? (1 - północ, 2 -
    południe)''')

def krasnoludKról():
    print('''W końcu docierasz do podnóża góry. U wejścia do jaskini czeka na ciebie krasnolud. Witam cię podróżniku!
    W tej jaskini czekają na ciebie groźne bestie. Widzę, że twój miecz jest już stary i zużyty. Może chciałbyś kupić
    moją buławę? Kosztuje jedyne 10 złota. Co ty na to? 1 - tak 2 - nie''')
    if buława == 1:
        print(twojeZłoto2)
    elif buława == 2:
        print("Jak nie to nie")
    else:
        print("Zła wartość! Giń!!!!")

def władcaElfów():
    print('''Witaj kolego. Przed tobą władczyni elfów Alena! W tamtej części lasu czekają na ciebie ogromne cieniołaki. Widzę, że
    twój stary łuk jest w kiepskim stanie. Może kupisz mój za jedyne 6 sztuk złota? 1 - kup 2 - nie kupuj''')
    if łuk == 1:
        print(twojeZłoto2)
    elif łuk == 2:
        print("Jak nie to nie")
    else:
        print("Zła wartość! Giń!!!!")



def krainaElfów():
    print('''Idziesz północną drogą. Nagle przy drodzę zauważasz niewielką stertę kamieni
    pod którą wystaje niewielki woreczek. Co robisz? (1 - sprawdzasz co jest w środku, 2 -
    ignorujesz i idziesz dalej)''')
    sakiewka = int(input())
    twojeZdrowie = 10
    twojeZłoto = 5
    if sakiewka == 1:
        print("Znajdujesz złoto! Niestety, przy okazji ugryzł cię pająk!")
        twojeZłoto2 = twojeZłoto + 1
        twojeZdrowie2 = twojeZdrowie - 2
        print("Twoje złoto: ")
        print(twojeZłoto2)
        print("Zdrowie: " )
        print(twojeZdrowie2)
        return twojeZłoto2
        return twojeZdrowie2
    elif sakiewka == 2:
        print("Twoje złoto: ")
        print(twojeZłoto)
        print("Zdrowie: " )
        print(twojeZdrowie)
        return twojeZłoto
        return twojeZdrowie
    else:
        print("Zła wartość! Giń!!!!")

    władcaElfów()

def krainaKrasnoludów():
    print('''Przemierzasz szlak, kierując się na południe. Las nie jest już tak gęsty jak przedtem. W zasięgu wzroku widzisz
    góry. Nagle słyszysz głośny krzyk. Przybiegasz i widzisz kupca, który walczy ze złoczyńcą. "Pomóż mi!" - krzyczy kupiec.
    "Nie słuchaj go, to mi pomóż" - mówi złoczyńca. Co wybierzesz? (1 - pomóż kupcowi, 2 - pomóż złoczyńcy, 3 - zabij ich obu)
    ''')
    pomoc = int(input())
    twojeZdrowie = 10
    twojeZłoto = 5
    if pomoc == 1:
        print("Kupiec jest ci bardzo wdzięczny, niestety jest chciwy i daje ci tylko 1 złoto.")
        twojeZłoto2 = twojeZłoto + 1
        twojeZdrowie2 = twojeZdrowie
        print("Twoje złoto: ")
        print(twojeZłoto2)
        print("Zdrowie: " )
        print(twojeZdrowie2)
        return twojeZłoto
        return twojeZdrowie2


    elif pomoc == 2:
        print('''Złoczyńca nie dotrzymuje umowy, ale zabijasz go odnosząc przy tym poważne rany. Za to
        plądrujesz całe złoto jakie ma kupiec. Otrzymujesz 5 złota, ale tracisz 5 punktów zdrowia''')
        twojeZłoto2 = twojeZłoto + 5
        twojeZdrowie2 = twojeZdrowie - 5
        print("Twoje złoto: ")
        print(twojeZłoto2)
        print("Zdrowie: " )
        print(twojeZdrowie2)
        return twojeZłoto2
        return twojeZdrowie2

    else:
        print("Zła wartość! Giń!!!!")

    krasnoludKról()

zagrajPonownie = 'tak'
while zagrajPonownie == 'tak' or zagrajPonownie == 't':
    wyświetlIntro()
    pierwszeKroki()
    widokOkolicy()
    wybierzDroge = int(input())
    if wybierzDroge == 1:
        krainaElfów()
    elif wybierzDroge == 2:
        krainaKrasnoludów()
    else:
        print("Zła wartość! Giń!!!!")

    print('Chcesz ponownie rozpocząć swoją przygodę? (tak lub nie)')
    zagrajPonownie = input()
1

Jak najbardziej możesz wywołać funkcję w funkcji.
Zmienne możesz przekazywać jako parametry albo stworzyć klasę i trzymać je tam.

1

Wywołując funkcję w funkcji musisz uważać, żeby wywoływana funkcja nie wywoływała funkcji, która ją wywołuje, bo wtedy się zapętlasz :)

return twojeZłoto2
return twojeZdrowie2

Wiesz, że tylko jeden return się wykona?

Czy w metodzie mogę wywołać kolejną metodę

Możesz, tylko że w Twoim kodzie nie ma metod... są za to funkcje. Przed definicją danej funkcji nie możesz jej wywołać.
Żeby mieć metody, musisz zamienić to co masz na klasę.

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