#kiciochpyta o #python i #json
początkujący level. - PROŚBA O POMOC w wyjaśnieniu dziwnego działania programu...
Tworzę dla treningu grę tekstową typu MUD, ćwiczę sobie tworzenie klas, funkcji i innych takich.
https://github.com/yourij/MUD_GAME
Etap rozgrzebanego kodu więc prosze o zrozumienie. Chwilowo repozytorium jest publiczne na potrzeby tego posta.
W dużym skrócie (wprowadzenie).
Jesteśmy na planszy 3x3 pola (współrzędne pól x=0, 1 lub 2 i y=0, 1 lub 2). Zaczynamy na środku.
Możemy po planszy chodzić, gadać z NPCami, w karczmie zjeść obiad, uratować księżniczkę itp...
Żeby to zrobić, trzeba pójść do wiedźmy, rozwiązać zadanie, otrzymać od niej klucz i z kluczem udać się na pole, gdzie jest księżniczka, otworzyć kluczem bramkę i koniec...
______PROBLEM______:
Początkowo teksty postaci trzymałem w pliku talking.py ale chciałem zaznajomić się z JSONem i stąd modyfikacja, gdzie wiedźma swoje teksty (częściowo) bierze z pliku talking.json
Od czasu tej modyfikacji pseudo-gra zawiesza się po otrzymaniu poleceń od gracza. Tzn żeby przejść dalej trzeba wcisnąć ekstra enter.
Dla przykładowego karczmarza czy też księżniczki (gdzie teksty są jeszcze po staremu) problem nie występuje.
plik talking.py
przykładowy fragment kodu, który dziwnie działa:
if (u_inp=='T' or u_inp=='t'): # T = gadaj z wiedzmą
for phrase in my_json["phrases"]:
u_inp=input(phrase["witch_gives_apple"]) # przyjmij input drukując tekst mówiony przez wiedżmę
kod, który działa poprawnie:
elif (playerPos == innKeeperPos): # podobny fragment rozmowy z innym NPCem bez udziału JSONa
u_inp=input(inn_hello)
if (u_inp=='P' or u_inp=='p'):
print(inn_dish1)
(screen z gry... nie śmiać się, proszę)
788784f0-3123-4f50-ae71-e29186328878
vrkr

@yourij Trochę spekuluję, ale pewnie dzieje się tak dlatego, że używasz funkcji input() niezbyt zgodnie z przeznaczeniem: argumentem tej funkcji jest prompt czyli tekst, który jest wyświetlany zanim user wpisze z konsoli jakąś wartość. Dlatego potrzebujesz wciskać ENTER - bo zatwierdzasz pusty ciąg znaków.


https://docs.python.org/3/library/functions.html#input

yourij

@vrkr ok ma to sens... input jest bo odczytuję czasem T/N i inne odpowiedzi gracza. Sprawdzę kod, czy się wiesza w tekstach bez oczekiwanej odpowiedzi ale fajny trop, dzięki...

yourij

@vrkr dziękuję... działa.

Gdy zmieniałem kod po przeniesieniu dialogów wiedźmy do pliku json pierwszy fragment (gdzie jest input potrzebny) skopiowałem dalej i zapomniałem zamienić w niektórych miejscach u_inp=input(dialog) na print(dialog).

Zaloguj się aby komentować