Skip to content

Commit

Permalink
- Changed GUI to optimize sizing on screen
Browse files Browse the repository at this point in the history
- Added tutorial screens

TODO:
- refine tutorial screens and re-enter game loop
- Enable font resize of Main window...

Signed-off-by: Schallbert <schal@mailbox.org>
  • Loading branch information
Schallbert committed Dec 13, 2019
1 parent 8375110 commit b03ae34
Show file tree
Hide file tree
Showing 3 changed files with 154 additions and 30 deletions.
44 changes: 37 additions & 7 deletions GameLoop_WinterIsComing.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
#!/Program Files (x86)/Python python3
from GameMechanics_WinterIsComing import *
from Enums_WinterIsComing import cmd_inpt
from GameStatClass_WinterIsComing import GameStats

#Vorgeschichte!
#Room1: Train station Mendig, RB26, 1.5h from cologne

gui.textScreen.TypeWrite(GameMsg.ASKCONT) #continue game?
gui.textScreen.TypeWrite(GameMsg.ACTIONP)


ctrStr = " "*23
gui.textScreen.TypeWrite("\n\n" + ctrStr + "-----------Hauptmenü------------\n\n")
gui.textScreen.LineWrite(ctrStr + "Bitte eingeben: <Wert> <Enter>\n")
gui.textScreen.LineWrite(ctrStr + "Spiel fortsetzen: 0\n")
gui.textScreen.LineWrite(ctrStr + "Neues Spiel beginnen: 1\n")
gui.textScreen.LineWrite(ctrStr + "Regeln und Tutorial: 2\n")
gui.textScreen.LineWrite(ctrStr + "Credits: 3\n")
gui.textScreen.LineWrite(ctrStr + "Spiel beenden: quit\n")
resp = gui.inputScreen.GetInput()
if resp == 1:
if resp == 0: #continue game
try:
gui.textScreen.TypeWrite(GameMsg.LOAD)
GameStats.Load()
Expand All @@ -18,17 +26,39 @@
except:
gui.textScreen.TypeWrite(GameMsg.NO_SVGAME)
NewGame()
else:
#ask if savegame file shall be overwritten
elif resp == 1: #new game
gui.textScreen.TypeWrite(GameMsg.ASKOVWR)
gui.textScreen.TypeWrite(GameMsg.ACTIONP)
resp = gui.inputScreen.GetInput()
if resp == 1:
if resp == 1: #ask if savegame file shall be overwritten
NewGame()
gui.inventoryScreen.Update(GameStats.GetInventory())
gui.statsScreen.Update(GameStats.GetListPlayers())
else:
gui.textScreen.TypeWrite(GameMsg.QUIT)
GameStats.Quit(gui.root)
elif resp == 2: #tutorial
gui.textScreen.Clear()
gui.textScreen.TypeWrite(GameMsg.INTRO)
gui.textScreen.TypeWrite(GameMsg.LOADING)
gui.inventoryScreen.insert(tk.END, GameMsg.INVSCR)
gui.statsScreen.insert(tk.END, GameMsg.STATSCR)
gui.textScreen.Clear()
gui.textScreen.TypeWrite(GameMsg.NUMBERS)
gui.textScreen.TypeWrite(GameMsg.LOADING)
gui.textScreen.Clear()
gui.textScreen.TypeWrite(GameMsg.COMBINATIONS)
gui.textScreen.TypeWrite(GameMsg.LOADING)
gui.textScreen.Clear()




elif resp == 3: #credits
gui.textScreen.TypeWrite("\n\n\n\n" + ctrStr + "Das alles hier: Lukas P. 'Schallbert'")
else:
gui.textScreen.TypeWrite(GameMsg.QUIT)
GameStats.Quit(gui.root)

#gui preparation
GameStats.GetCurrentRoom().OnEnter()
Expand Down
46 changes: 25 additions & 21 deletions ScreenManager_WinterIsComing.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class GuiVars:
}
#game window margin to screen size [pixels]
__xWMgn = 200
__yWMgn = 0
__yWMgn = 200
#color selection
frClr = dictCP["Y4"]
scrFg = dictCP["Y4"]
Expand Down Expand Up @@ -68,6 +68,7 @@ def on_resize(self,event):
self.config(width=self.width, height=self.height)
# rescale all the objects tagged with the "all" tag
self.scale("all",0,0,wscale,hscale)
#invokeTextScreenFontResize()

class InputText(tk.Text):
"""Derived class from Text, with additional methods for text input handling.
Expand Down Expand Up @@ -278,7 +279,7 @@ class GameGui:

def __init__(self):
self.root = tk.Tk() #instantiate TKINTER (Gui package)
img = tk.PhotoImage(file='Noise.gif') #TEST, to be replaced with game title image
#img = tk.PhotoImage(file='Noise.gif') #TEST, to be replaced with game title image
var = GuiVars() #variable container for gui setup
self.root.title("Der Winter Naht")
var.SetScrSize(int(self.root.winfo_screenwidth()), int(self.root.winfo_screenheight()))
Expand All @@ -290,16 +291,17 @@ def __init__(self):
canvas.pack(fill=tk.BOTH, expand=tk.YES)
#Frames
textScrFr = tk.Frame(canvas, bg=var.frClr, bd=var.frBdr)
gameScrFr = tk.Frame(textScrFr, bg="black", bd=var.frBdr)
#gameScrFr = tk.Frame(textScrFr, bg="black", bd=var.frBdr)
invtScrFr = tk.Frame(canvas, bg=var.frClr, bd=var.frBdr)
statsScrFr = tk.Frame(canvas, bg=var.frClr, bd=var.frBdr)
inputScrFr = tk.Frame(canvas, bg=var.frClr, bd=var.frBdr)
#Frame Pack
textScrFr.pack(anchor=tk.NW, fill=tk.BOTH, expand=tk.YES)
gameScrFr.pack(side=tk.RIGHT, fill=tk.BOTH, expand=tk.YES)
invtScrFr.pack(anchor=tk.S, side=tk.LEFT, fill=tk.X, expand=tk.YES)
statsScrFr.pack(anchor=tk.S, side=tk.LEFT, fill=tk.X, expand=tk.YES)
inputScrFr.pack(anchor=tk.S, side=tk.LEFT, fill=tk.X, expand=tk.YES)
textScrFr.pack(anchor=tk.W, side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)
#gameScrFr.pack(side=tk.RIGHT, fill=tk.BOTH, expand=tk.YES)
invtScrFr.pack(anchor=tk.SW,side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
statsScrFr.pack(anchor=tk.SW,side=tk.TOP, fill=tk.X, expand=tk.NO)
inputScrFr.pack(anchor=tk.SW, side=tk.TOP, fill=tk.X, expand=tk.NO)


#Screens
wid = textScrFr.winfo_id()
Expand All @@ -308,20 +310,20 @@ def __init__(self):
, insertontime=0\
, bg=var.scrBg\
, fg=var.scrFg\
, width=78\
, height=20\
, width=82\
, height=35\
, padx=12\
, pady=9)
self.gameScreen = tk.Label(gameScrFr\
, font=consts.GUI_FONT\
, image=img\
, width=var.scr_w/2\
, height=var.scr_w*(9/32))
# self.gameScreen = tk.Label(gameScrFr\
# , font=consts.GUI_FONT\
# , image=img\
# , width=var.scr_w/2\
# , height=var.scr_w*(9/32))
self.inventoryScreen = InventoryText(invtScrFr\
, font=consts.GUI_FONT\
, bg=var.scrBg\
, fg=var.scrFg\
, width=25\
, width=4\
, height=10\
, padx=12\
, pady=9)
Expand All @@ -345,9 +347,11 @@ def __init__(self):
, fg=var.scrFg\
, pady=43)
#Screen Pack
self.textScreen.pack(side = tk.LEFT, fill=tk.Y, expand=tk.YES)
self.gameScreen.pack(anchor = tk.CENTER, expand=tk.YES)
self.inventoryScreen.pack(side = tk.BOTTOM, fill=tk.X, expand=tk.YES)
self.statsScreen.pack(side = tk.LEFT, fill=tk.X, expand=tk.YES)
self.inputScreen.pack(side = tk.LEFT, fill=tk.X, expand=tk.YES)
self.textScreen.pack(side = tk.LEFT, fill=tk.BOTH, expand=tk.YES)
#self.gameScreen.pack(anchor = tk.CENTER, expand=tk.YES)
self.inventoryScreen.pack(side = tk.LEFT, fill=tk.BOTH, expand=tk.YES)
self.statsScreen.pack(side = tk.LEFT, fill=tk.BOTH, expand=tk.YES)
self.inputScreen.pack(side = tk.LEFT, fill=tk.BOTH, expand=tk.YES)

def invokeTextScreenFontResize(self):
print(self.textScrFr.width)
94 changes: 92 additions & 2 deletions TextData_WinterIsComing.py
Original file line number Diff line number Diff line change
Expand Up @@ -984,8 +984,6 @@
}

#Defines item number and names
#bonus items (ask player) TODO IMPLEMENT
#15
dictItems = {
10 : "Ein Smartphone, fast leer",\
11 : "Unleserliches Foto der Umgebungskarte",\
Expand Down Expand Up @@ -1092,6 +1090,7 @@ class GameMsg():
LOAD = "Lade Spielstand..."
ASKOVWR = "Möchtet Ihr Euren alten Spielstand (falls vorhanden) überschreiben?\n"
NAN = "Keine Zahl erkannt. Zum Speichern und Beenden bitte 'quit' eingeben.\n"
QUIT = "Keine Aktion gewählt. Das Spiel wird jetzt beendet.\n"
SVQT = "Spiel wird gespeichert und beendet. Bis bald!\n"
TURN = [" bei [", "] ist an der Reihe.\nWas wollt Ihr tun? "]
IN_REACH = "\nVon hier aus sind folgende Orte erreichbar:\n"
Expand Down Expand Up @@ -1125,3 +1124,94 @@ class GameMsg():
UNMOT_END = "Puh, es hilft alles nichts. Ihr macht jetzt erstmal schön eine Pause.\n\
Später - sagen wir ab in einer halben Stunde - könnt Ihr dann mit frischer\n\
Motivation weitermachen........................................................\n"
INTRO = "Willkommen im Spiel 'Der Winter Naht'!\n\
In diesem kooperativen Spiel macht Ihr einen gemeinsamen Wanderausflug\n\
in die Eifel und kommt dort merkwürdigen Vorgängen auf die Spur.\n\
Das Spiel enthält mehrere Kapitel, deren Verlauf Ihr selbst mitestaltet.\n\
\n\
Es ist im Genre des sogenannten Text Adventure beheimatet,\n\
die komplette Interaktion mit dem Spiel findet also per Text statt.\n\
Grafiken oder gar Videos gibt es hier keine, es ist Spaß am Lesen gefragt ;)\n\
\n\
Das Spiel speichert Euren Fortschritt automatisch am Ende einer jeden Runde.\n\
Ihr könnt das Spiel also jederzeit beenden und später dort weitermachen, wo\n\
Ihr aufgehört habt.\n\
Der Spielbildschirm ist aufgeteilt in vier Teile. Der jeweils aktive Teil des\n\
Bildschirms ist farbig hervorgehoben - dies ist auch bei dem Hauptbildschirm,\n\
auf dem dieser Text gerade erscheint, der Fall. Sein Hintergrund ist heller\n\
als der der inaktiven, kleineren Anzeigen.\n\
\n\
Auf dieser Anzeige hier findet die eigentliche Handlung des Spiels statt.\n\
Das Spiel ist so aufgebaut, dass Ihr Euch in Räumen aufhaltet, die bestimmte\n\
Eigenschaften haben und die wiederum Orte besitzen, mit denen Ihr\n\
interagieren könnt. Des Weiteren gibt es Gegenstände im Spiel, die Ihr sammeln,\n\
benutzen oder mit Orten kombinieren könnt, um das Spiel voranzubringen.\n\
Selten habt Ihr nur eine Möglichkeit der Interaktion, deswegen wird sich die\n\
Handlung bei jedem Durchlauf basierend auf Euren Entscheidungen unterscheiden.\n"
NUMBERS = "Der lange Strich '__-___' eben war ein Ladebalken, der Euch anzeigen soll,\n\
dass der Bildschirminhalt bald gelöscht wird und eine neue Runde beginnt.\n\
\n\
Diser Bildschirm zeigt Euch alle wichtigen Informationen zu Räumen, Orten\n\
und Gegenständen an. Er informiert Euch darüber, wo Ihr Euch gerade\n\
befindet, welche Orte und Räume gerade in Reichweite sind und erzählt\n\
die Handlung des Spiels.\n\
Beachtet, dass nicht immer alle Orte eines Raumes oder alle angeschlossenen\n\
Räume eines Raumes erreichbar sein müssen.\n\
Besonders in späteren Teilen des Spiels ist es üblich, dass Ihr nur durch\n\
das Lösen von Rätseln und Entdecken versteckte Räume, Gegenstände oder Orte\n\
weiterkommen werdet. \n\
\n\
Zu den Objekten des Spiels:\n\
Räume haben dreistellige Nummern in den 'Zehnern', z.B. 100, 110, 120 usw.\n\
Orte sind mit dreistelligen Nummern, aber in den 'einern', z.B. 101, 102 usw.\n\
gekennzeichnet.\n\
Gegenstände haben zweistellige Nummern , z.B. 10, 11, 12 usw.\n\
\n\
Das Spiel erwartet von Euch Zahlen als Eingaben.\n\
- Ausnahme ist das Kommando 'quit', mit dem Ihr das Spiel beenden könnt -\n\
Um also z.B. den Raum '110: Wohnzimmer' zu betreten, der Euch 'in Reichweite'\n\
angezeigt wird, gebt Ihr im Eingabefeld unten Rechts die Zahl des Raumes,\n\
also 110 ein und drückt die <Enter>-Taste.\n\
Wollt Ihr Orte untersuchen, so ist das Verfahren dasselbe wie bei Räumen\n\
mit dem Unterschied, dass Ihr auf Orten Aktionen durchführt, die den Spielverlauf\n\
dauerhaft beeinflussen können. Bei den meisten Aktionen werdet Ihr vorher\n\
gefragt, ob Ihr die auch wirklich durchführen wollt, bei einigen aber nicht;\n\
das macht das Spiel spannender für die Entwickler ;)\n\
\n"
COMBINATIONS = "Manche Gegenstände aus Eurem Inventar können miteinander kombiniert werden,\n\
um einen neuen Gegenstand zu erhalten. Dabei muss die niedrigere der beiden\n\
Zahlen an erster Stelle stehen. Beispiel:\n\
Ihr möchtet '23: Eine leere Taschenlampe'\n\
mit '27: Batterien'\n\
kombinieren. Dann gebt Ihr 2327 in das Eingabefeld\n\
ein und drückt die <Enter>-Taste.\n\
Wenn diese Kombination gültig ist, erhaltet Ihr in diesem Falle:\n\
'28: Eine Taschenlampe mit frischen Batterien',\n\
die sich zu mehr eignet, als sie einfach nur jemandem über den Kopf zu ziehen.\n\
\n\
Ihr könnt auch Gegenstände mit Orten kombinieren, sodass dann eine fünfstellige\n\
Zahl entsteht, die Ihr dann eingeben könnt. Auch hier kommt die kleinere Zahl\n\
immer zuerst dran:\n\
'12: Ein Schlüssel', kombiniert mit '117: Schwere Eisentür', eingegeben als\n\
12117 in das Eingabefeld, kann beispielsweise dazu führen, dass sich ein neuer\n\
Ort oder sogar ein Raum zeigt, den Ihr vorher noch nicht als 'in Reichweite'\n\
auf dem Hauptbildschirm sehen konntet. \n\
\n\
So, genug geschwafelt. Fangt einfach mal an!\n"
INVSCR = "Auf diesem Bildschirm wird Euer\n\
gemeinsames Inventar angezeigt.\n\
Ihr könnt die Gegenstände benutzen\n\
oder untersuchen, indem Ihr ihre\n\
Nummern im Eingabefeld angebt und mit\n\
<Enter> bestätigt. Ansonsten eignen\n\
sich viele Gegenstände für\n\
Kombinationen mit Orten. Ganz einfach!"
STATSCR = "Hier wird Euer Spielerstatus\n\
angezeigt. Attribute in diesem Spiel:\n\
Müdigkeit und Motivation.\n\
Sollte Euer Motivationsniveau\n\
zu weit sinken oder Eure Müdigkeit\n\
zu groß werden, so werdet Ihr in diesem\n\
Spiel eine Zwangspause einlegen müssen\n\
- Wie genau findet Ihr sicher\n\
noch selbst heraus."

0 comments on commit b03ae34

Please sign in to comment.