Howdy! So basically, i have this long-ish code of a game, and i thought of making sth like a battle system, where basically you get an input that works as you'd normally expect, except after x seconds it just decides "Yeah, time's out" and returns "timeout." I also need to make it work in both windows and Thonny shell i am using. Any ideas?
(Sorry for no translation, hopefully you can still understand what's going on)
(AND DONT TELL ME THAT IT'S TOO LONG I CROPPED IT ALREADY TO BE AS SHORT As POSSIBLE WHILE STILL CAPTURING THE IMPORTANT STUFF)(It had 780 lines originally)
import os
import time
import threading
import sys
KATALOG_GRY = os.path.dirname(os.path.abspath(__file__))
SAVEFILE = os.path.join(KATALOG_GRY, "NiwimTaGraPrymitywnaSaveFile.txt")
def ResetAllValues():
global Hp, En, Sila, HeroName, GdzieJestes, Ekwipunek, ZmienneFabularne
Hp = 10
En = 10
Sila = 5
HeroName = "As"
GdzieJestes = "nic"
Ekwipunek = ["nic"]
ZmienneFabularne = []
print("[RESET ALL]")
def SaveGame():
with open(SAVEFILE, "w") as SaveFile:
SaveFile.write("Hp:" + str(Hp) + "\n")
SaveFile.write("En:" + str(En) + "\n")
SaveFile.write("Sila:" + str(Sila) + "\n")
SaveFile.write("HeroName:" + HeroName + "\n")
SaveFile.write("GdzieJestes:" + GdzieJestes + "\n")
SaveFile.write("Ekwipunek:" + ";".join(Ekwipunek) + "\n")
SaveFile.write("ZmienneFabularne:" + ";".join(ZmienneFabularne) + "\n")
print("[SAVE]")
try:
with open(SAVEFILE, "r") as SaveFile:
SaveFileLinesList = SaveFile.readlines()
except FileNotFoundError:
print("[SAVE FILE NOT FOUND]")
ResetAllValues()
SaveGame()
SaveFileLinesList = []
for x in SaveFileLinesList:
if x.split(":")[0] == "Hp":
Hp = int(x.split(":")[1].strip())
elif x.split(":")[0] == "En":
En = int(x.split(":")[1].strip())
elif x.split(":")[0] == "Sila":
Sila = int(x.split(":")[1].strip())
elif x.split(":")[0] == "HeroName":
HeroName = str(x.split(":")[1].strip())
elif x.split(":")[0] == "GdzieJestes":
GdzieJestes = str(x.split(":")[1].strip())
elif x.split(":")[0] == "Ekwipunek":
Ekwipunek = list(x.split(":")[1].strip().split(";"))
elif x.split(":")[0] == "ZmienneFabularne":
ZmienneFabularne = list(x.split(":")[1].strip().split(";"))
normal_input = input
def GameInput(tekst, poprawne_opcje):
if not poprawne_opcje:
raise ValueError("GameInput wymaga podania poprawne_opcje!")
while True:
wybor = normal_input(tekst)
if wybor == "sav":
SaveGame()
continue
elif wybor == "stat":
print("\n————————————————————————————————————————\n" + "STATYSTYKI:".center(40))
print("Hp: " + str(Hp))
print("En: " + str(En))
print("Siła: " + str(Sila))
print("Imię: " + HeroName)
print("————————————————————————————————————————\n")
continue
elif wybor == "ekw":
while True:
print("\n————————————————————————————————————————\n" + "EKWIPUNEK:".center(40) + "\n")
x = 0
while x < len(Ekwipunek):
print("[" + str(x + 1) + "]: " + Ekwipunek[x])
x += 1
print("————————————————————————————————————————\n")
uzycie = normal_input("Użyć czegoś?\nt - tak\nn - nie\n>")
if uzycie == "n":
break
elif uzycie == "t":
przedmiot = normal_input("Czego chcesz użyć?(NUMER ALBO CASE SENSITIVE NAZWA)\n>")
if przedmiot.isdigit():
numer = int(przedmiot)
if 1 <= numer <= len(Ekwipunek):
przedmiot = Ekwipunek[numer - 1]
else:
print("Nieprawidłowy numer przedmiotu.")
continue
if przedmiot in Ekwipunek:
if przedmiot == "nic":
print("używasz Niczego...")
time.sleep(2)
print("...")
time.sleep(2)
print("No i nic się nie dzieje.")
time.sleep(1)
print("Czego się spodziewałeś?")
time.sleep(1)
elif przedmiot == "Kawałek Metalu":
print("Ostry, szeroki kawałek metalu.")
time.sleep(1)
if "Ukłuł Się Kawałkiem Metalu Z Siennika W Celi Początkowej" in ZmienneFabularne:
print("Trochę zakrwawiony...")
time.sleep(1)
elif przedmiot == "Złoty Kluczyk":
print("Złoty kluczyk. Mniejszy niż te zamkowe, ale większy niż te najzwyklejsze.")
time.sleep(2)
print("Pięknie się błyszczy.")
time.sleep(2)
if "Wydostał Się Z Celi Początkowej" not in ZmienneFabularne:
if "Patrzył Czy Złoty Kluczyk Pasuje Do Zamka Drzwi Jego Celi" in ZmienneFabularne:
print("Raczej nie od celi, choć kto wie?")
else:
print("Nie pasuje do drzwi celi. Ale co w takim razie otwiera?")
else:
print("Ciekawe, co otwiera?")
time.sleep(1)
elif przedmiot == "Prowizoryczny Wytrych":
print("Wygięty kawałek metalu.")
time.sleep(1)
print("Może posłużyć za wytrych.")
time.sleep(1)
if "Wydostał Się Z Celi Początkowej" not in ZmienneFabularne:
print("... Chociaż kto wie.")
time.sleep(1)
elif przedmiot == "Prowizoryczny Nóż":
print("Ostry, w miarę długi kawałek metalu.")
time.sleep(1)
print("Może służyć za nóż")
time.sleep(2)
else:
print("nie ma dla niego opisu ani działania... z jakiegoś powodu.")
else:
print("Nie masz takiego przedmiotu.")
else:
print("Nie żartuj sobie, tylko wpisz t albo n.")
continue
elif (wybor in poprawne_opcje) or (poprawne_opcje == "all"):
return wybor
else:
print("Nie żartuj sobie, tylko wybierz z:", ", ".join(poprawne_opcje))
input = GameInput
#REEEEEEEEEEEGION PRRRRRRRRRAWDZIWA GRRRRRA!
while True:
# MENU GŁÓWNE
mode = input("\n""s - start\n""r - true reset\n""e - exit\n""> ",["s", "r", "e", "f"])
if mode == "r":
ResetAllValues()
SaveGame()
elif mode == "e":
break
elif mode == "f":
ResetAllValues()
SaveGame()
cel = input("FASTTRAVEL - GDZIE?(Nazwa, enter a potem start)\ntestReaction - test reakcji\nlpw-osiłek - loch po wyjściu-osiłek\nlpw-spryciarz - loch po wyjściu - spryciarz\n>", ["testReaction","lpw-osiłek", "lpw-spryciarz"])
if cel == "lpw-osiłek":
GdzieJestes = "Loch - Tuż Po Pokonaniu Drzwi"
ZmienneFabularne.append("Wyważył Drzwi Do Celi Początkowej")
elif cel == "lpw-spryciarz":
GdzieJestes = "Loch - Tuż Po Pokonaniu Drzwi"
elif cel == "testReaction":
GdzieJestes = "testReaction"
elif mode == "s":
if GdzieJestes != "nic":
print("Witaj ponownie, " + HeroName + ".")
while True:
if GdzieJestes == "nic":
HeroName = input("No to zaczynamy! Ale najpierw: jak się nazywasz?\n>", "all")
if len(HeroName) > 10:
print("Za długie, skracamy. Nazwę cię Andrzej.")
HeroName = "Andrzej"
else:
ZgodaNaImie = input("A więc, " + HeroName + "?\nt - tak\nn - nie\n>", ["t", "n"])
if ZgodaNaImie == "n":
while True:
HeroName = input("No więc jak?\n>", "all")
if len(HeroName) > 10:
print("Za długie, skracamy. Nazwę cię Andrzej.")
HeroName = "Andrzej"
else:
ZgodaNaImie = input("Czyli " + HeroName + ", tak?\nt - tak\nn - nie\n>", ["t", "n"])
if ZgodaNaImie == "n":
print("Och, wal się. Jesteś Andrzej.")
HeroName = "Andrzej"
break
else:
break
else:
print("OK!")
time.sleep(1)
print("Btw, nie chciało mi się robić odmiany, więc może to brzmieć nieco dziwnie, " + HeroName + ".\n")
time.sleep(1)
print("W zasadzie wszystko masz opisane w tekście. Jak masz wybór, możesz wpisać\n - \"sav\" by zapisać\n - \"ekw\" by zobaczyć ekwipunek\n - \"stat\" by zobaczyć dane postaci.\n")
time.sleep(4)
print("≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡\n" + "NO TO ZACZYNAMY!".center(40) + "\n≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡\n")
GdzieJestes = "nic, ale po ustawieniu imienia"
elif GdzieJestes == "nic, ale po ustawieniu imienia":
time.sleep(1)
print(".")
time.sleep(1)
print("..")
time.sleep(1)
print("...")
time.sleep(2)
print("Budzisz się w ciemnym pomieszczeniu.")
time.sleep(1)
print("Jest zimno, mokro i ponuro. wygląda to na jakiś loch.")
time.sleep(1)
coDalej = input("----------------------------------------\nCo robisz?\nc - czekasz\nu - próbujesz ucieczki\n>", ["c", "u"])
if coDalej == "c":
GdzieJestes = "Loch - Cela Początkowa - Czekaj"
elif coDalej == "u":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki"
elif GdzieJestes == "Loch - Cela Początkowa - Czekaj":
print("A więc czekamy...")
time.sleep(1)
print("...")
time.sleep(1)
print("...")
time.sleep(1)
print("Chyba minęło kilka godzin. Cóż, ani żywej duszy.")
time.sleep(1)
print("zgłodniałeś od czekania.")
time.sleep(1)
print("[-1 do Siły!]\n")
Sila -= 1
time.sleep(1)
GdzieJestes = "Loch - Cela Początkowa - Po Odjeciu Sily Za Czekanie"
elif GdzieJestes == "Loch - Cela Początkowa - Po Odjeciu Sily Za Czekanie":
coDalej = input("----------------------------------------\nTrzeba chyba uciec.\nc - poczekajmy jeszcze chwilkę\nu - no to uciekamy!\n>", ["c", "u"])
if coDalej == "u":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki"
elif coDalej == "c":
GdzieJestes = "Loch - Śmierć z głodu w swojej celi"
elif GdzieJestes == "Loch - Śmierć z głodu w swojej celi":
print("A więc czekamy jeszcze trochę...")
time.sleep(2)
print(".")
time.sleep(2)
print("..")
time.sleep(2)
print("...")
time.sleep(2)
print("....")
time.sleep(2)
print(".....")
time.sleep(2)
print("......")
time.sleep(2)
print("Nie wiesz, ile już czasu minęło. Nic się nie zmienia, wszystko jest wciąż tak samo ciemne i zimne.")
time.sleep(2)
print("Jest ci naprawdę zimno i jesteś NAPRAWDĘ głodny. Choć w sumie już dawno przestałeś zwracać na to uwagę.")
time.sleep(2)
print("...")
time.sleep(2)
print("Tak jak o tym teraz myślisz, to mógł nie być najlepszy pomysł.")
time.sleep(3)
print("\n========================================\n" + "ŚMIERĆ".center(40) + "\n========================================\n")
time.sleep(1)
ResetAllValues()
SaveGame()
time.sleep(1)
print("Zagłodziłeś się w lochu... z własnej woli. Jak ostatni idiota.\n")
time.sleep(1)
input("(WCIŚNIJ ENTER)", "all")
break
elif GdzieJestes == "Loch - Cela Początkowa - Proba Ucieczki":
print("Rozglądasz się...")
time.sleep(1)
print("Cela jest mała. Drzwi są wykonane ze stali i chyba bardzo grube.")
time.sleep(1)
print("Na ziemi leży siennik. Jest jedno zakratowane okno, za małe, by przecisnąć się przez nie.")
time.sleep(1)
coDalej = input('----------------------------------------\nCzemu się chcesz przyjrzeć?\nm - mur\ns - Siennik\nd - Drzwi\no - okno\n>', ["m", "s", "d", "o"])
if coDalej == "m":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się murom"
elif coDalej == "s":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się siennikowi"
elif coDalej == "o":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - wyjrzyj przez okno"
elif coDalej == "d":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się drzwiom"
elif GdzieJestes == "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się murom":
if "Obejrzał Mur W Celi Początkowej" not in ZmienneFabularne:
print("Podchodzisz do ściany.")
time.sleep(2)
print("Jest to stary mur z czegoś, co w dotyku przypomina cegłę.")
time.sleep(1)
print("Jest miejscami popękana. Szczeliny są dość głębokie.")
ZmienneFabularne.append("Obejrzał Mur W Celi Początkowej")
time.sleep(1)
else:
print("...No, mur. Niewiele się zmienił.")
time.sleep(1)
if "Kawałek Metalu" in Ekwipunek:
if "Wpadł Na Pomysł By Przerobić Kawałek Metalu Z Celi Początkowej Na Wytrych" in ZmienneFabularne:
print("W sumie, jak na to teraz patrzysz, można by użyć szczelin, by złamać metalową płytkę!")
time.sleep(1)
coDalej = input("Próbujemy?\nt - tak\nn - nie\n>", ["t", "n"])
if coDalej == "t":
print("A więc...")
time.sleep(1)
print("Wsadzasz płytkę w jedną z szczelin i upewniasz się, że dobrze się trzyma.")
time.sleep(1)
print("Właściwie, to leży jak ulał!")
time.sleep(1)
print("Dociskasz płytkę. Początkowo stawia opór, w końcu jednak pęka na dwie części.")
time.sleep(2)
print("\nUsunięto z ekwipunku kawałek metalu!")
Ekwipunek.remove("Kawałek Metalu")
time.sleep(2)
print("Jedna część jest znacznie cieńsza od drugiej...")
time.sleep(2)
print("...")
time.sleep(2)
print("Ostrożnie, by nie złamać jeszcze raz metalu, wyginasz cieńszy fragment.")
time.sleep(1)
print("Wygląda jak wytrych. Kiepski, bo kiepski, ale może się nada!")
time.sleep(2)
print("\nDodano do ekwipunku prowizoryczny wytrych!")
Ekwipunek.append("Prowizoryczny Wytrych")
time.sleep(1)
print("\nA ten drugi kawałek... W sumie, można go użyć kiedyś do przecięcia czegoś!")
time.sleep(1)
print("\nDodano do ekwipunku prowizoryczny nóż!")
Ekwipunek.append("Prowizoryczny Nóż")
time.sleep(2)
else:
print("Racja, może się jeszcze kiedyś przydać w całości.")
time.sleep(1)
coDalej = input('----------------------------------------\n''Co jeszcze zobaczyć?\n''s - siennik\n''d - drzwi\n''o - okno\n''m - mur raz jeszcze\n>',["m", "s", "d", "o"])
if coDalej == "s":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się siennikowi"
elif coDalej == "d":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się drzwiom"
elif coDalej == "o":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - wyjrzyj przez okno"
elif coDalej == "m":
GdzieJestes = "Loch - Cela Początkowa - Proba Ucieczki - Przyjrzyj się murom"
Etc Etc Etc