2021-11-02 17:40:54 +01:00
import yaml
from yaml . loader import SafeLoader
2021-11-03 10:23:37 +01:00
from colorama import Fore , Back , Style
2021-11-02 17:40:54 +01:00
class Game :
2021-11-26 22:13:30 +01:00
def __init__ ( self , data : dict ) :
self . name = data [ " meta " ] [ " name " ]
self . author = data [ " meta " ] [ " creator " ]
2021-11-02 17:40:54 +01:00
self . current = " start "
self . nodes = { }
2021-11-26 22:13:30 +01:00
for k in data [ " game " ] :
self . nodes . update ( { k : data [ " game " ] [ k ] } )
2021-11-02 17:40:54 +01:00
2021-11-26 22:13:30 +01:00
def make_selection ( self , selection : int ) - > bool :
if ( type ( selection ) != int or selection > = len ( self . nodes [ self . current ] [ " actions " ] ) or selection < 0 ) :
2021-11-02 17:40:54 +01:00
print ( " Invalid selection " )
2021-11-03 10:16:56 +01:00
return False
2021-11-02 17:40:54 +01:00
else :
2021-11-26 22:13:30 +01:00
self . current = self . nodes [ self . current ] [ " actions " ] [ selection ]
2021-11-03 10:16:56 +01:00
return True
2021-11-02 17:40:54 +01:00
def printme ( self ) :
'''
Used to print out the current prompt with the options
'''
print ( self . nodes [ self . current ] [ " text " ] )
print ( " " )
ostring = " "
2021-11-26 22:13:30 +01:00
if ( " actions " in self . nodes [ self . current ] . keys ( ) ) :
for i , option in enumerate ( self . nodes [ self . current ] [ " actions " ] ) :
ostring + = f " { i } - { self . nodes [ option ] [ ' description ' ] } \n "
print ( ostring )
2021-11-03 10:16:56 +01:00
sel = input ( " Make a selection (number): " )
2021-11-26 22:13:30 +01:00
isWrong = self . make_selection ( int ( sel ) )
while isWrong == False :
sel = input ( " Make a selection (number): " )
isWrong = self . make_selection ( sel )
self . printme ( )
2021-11-03 10:16:56 +01:00
2021-11-03 10:23:37 +01:00
def parse_colors ( self , text : str ) - > str :
'''
Used to convert color codes in string to colors from the colorama lib
'''
2021-12-02 11:20:39 +01:00
newText = text . replace ( " &b " , Fore . CYAN ) . replace ( " &c " , Fore . RED ) . replace ( " &e " , Fore . YELLOW ) . replace ( " &a " , Fore . GREEN ) . replace ( " &9 " , Fore . BLUE ) . replace ( " &r " , Fore . RESET ) . replace ( " &f " , Fore . WHITE ) . replace ( " &5 " , Fore . MAGENTA ) . replace ( " \n " , Fore . RESET + " \n " ) # replace color codes and newlines with colorama
2021-11-26 22:13:30 +01:00
newText + = Fore . RESET # reset color at the end of the text
return newText
2021-11-03 10:23:37 +01:00
2021-11-02 17:40:54 +01:00
def load ( file_path ) :
''' Loads the game from a YAML file to a Game class '''
2021-11-26 22:13:30 +01:00
try :
with open ( file_path ) as f :
data = yaml . load ( f , Loader = SafeLoader )
g = Game ( data )
return g
except Exception as e :
print ( " An exception has occured while loading the game from the YAML file: " )
print ( e )
return None