Hejto.pl
Dodaj post

Wpisz coś do wyszukania (minimum 2 znaki)

Wpis użytkownika yourij w Python

Wirtuoz

w Python

2piorunów

 o  i 

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ę)

Komentarze (3)

Gruba ryba4piorunów

@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

Built-in FunctionsThe Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-in Functions,,, A, abs(), aiter(), all(), a...Python documentation
Wirtuoz2piorunów

@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).

Wirtuoz1piorunów

@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...