documentation additions
This commit is contained in:
parent
8c1e960702
commit
f73b94d593
|
@ -1,7 +1,11 @@
|
||||||
import yaml # reads hint configurations from a .yml file
|
import yaml # reads hint configurations from a .yml file
|
||||||
|
|
||||||
class HintGiver:
|
class HintGiver:
|
||||||
|
"""Class holding all the possible hints for all levels, and giving them
|
||||||
|
out when asked for."""
|
||||||
|
|
||||||
def __init__(self, hint_filename):
|
def __init__(self, hint_filename):
|
||||||
|
"""Create a hint giver from file `filename`."""
|
||||||
self.total_hints_taken = 0
|
self.total_hints_taken = 0
|
||||||
self.hints_taken = {} # dict, level : [hint_name, hint_name]
|
self.hints_taken = {} # dict, level : [hint_name, hint_name]
|
||||||
|
|
||||||
|
@ -14,9 +18,11 @@ class HintGiver:
|
||||||
self.hints = yaml.load(f, Loader=yaml.FullLoader)
|
self.hints = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
|
||||||
def show_possible_hints(self, level, branch):
|
def show_possible_hints(self, level, branch):
|
||||||
|
"""Return all possible hints for given `level` and `branch`."""
|
||||||
return list(self.hints[level][level+branch])
|
return list(self.hints[level][level+branch])
|
||||||
|
|
||||||
def take_hint(self, level, branch, hint_name):
|
def take_hint(self, level, branch, hint_name):
|
||||||
|
"""Show hint text for a specific hint. Add it to hint log and counter."""
|
||||||
if not level+branch in self.hints_taken:
|
if not level+branch in self.hints_taken:
|
||||||
self.hints_taken[level+branch] = []
|
self.hints_taken[level+branch] = []
|
||||||
if hint_name not in self.hints_taken[level+branch]:
|
if hint_name not in self.hints_taken[level+branch]:
|
||||||
|
@ -25,19 +31,23 @@ class HintGiver:
|
||||||
return self.hints[level][level+branch][hint_name]
|
return self.hints[level][level+branch][hint_name]
|
||||||
|
|
||||||
def show_taken_hints(self, level, branch):
|
def show_taken_hints(self, level, branch):
|
||||||
|
"""Show all previously taken hints for `level` and `branch`."""
|
||||||
if not level+branch in self.hints_taken:
|
if not level+branch in self.hints_taken:
|
||||||
return []
|
return []
|
||||||
return self.hints_taken[level+branch]
|
return self.hints_taken[level+branch]
|
||||||
|
|
||||||
def is_hint_name(self, level, branch, hint_name):
|
def is_hint_name(self, level, branch, hint_name):
|
||||||
|
"""Check if `hint_name` is a name of a hint for `level` and `branch`."""
|
||||||
if hint_name in self.hints[level][level+branch]:
|
if hint_name in self.hints[level][level+branch]:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def restart_game(self):
|
def restart_game(self):
|
||||||
|
"""Reset hint counter and hint log to zero."""
|
||||||
self.total_hints_taken = 0
|
self.total_hints_taken = 0
|
||||||
self.hints_taken = {}
|
self.hints_taken = {}
|
||||||
|
|
||||||
def log_to_file(self, filename):
|
def log_to_file(self, filename):
|
||||||
|
"""Write taken hints to a file."""
|
||||||
with open(filename, 'a') as f:
|
with open(filename, 'a') as f:
|
||||||
yaml.dump(self, f)
|
yaml.dump(self, f)
|
|
@ -1,25 +1,35 @@
|
||||||
import yaml # reads hint configurations from a .yml file
|
import yaml # reads hint configurations from a .yml file
|
||||||
|
|
||||||
class LevelSelector:
|
class LevelSelector:
|
||||||
|
"""Class handling selection of next level to play, in player's place.
|
||||||
|
|
||||||
|
Needs a file with level requirements, and a file with possibly mastered tools.
|
||||||
|
If a player knows a tool, and is under time limit, they are eligible for that level.
|
||||||
|
|
||||||
|
Levels with None requirements are a "default" that anyone can take."""
|
||||||
def __init__(self, tool_list_filename, level_requirements_filename):
|
def __init__(self, tool_list_filename, level_requirements_filename):
|
||||||
self.read_level_requirements(level_requirements_filename)
|
self.read_level_requirements(level_requirements_filename)
|
||||||
self.read_tool_list(tool_list_filename)
|
self.read_tool_list(tool_list_filename)
|
||||||
self.known_tools = []
|
self.known_tools = []
|
||||||
|
|
||||||
def read_level_requirements(self, filename):
|
def read_level_requirements(self, filename):
|
||||||
|
"""Reads level requirements from file `filename`."""
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
self.level_requirements = yaml.load(f, Loader=yaml.FullLoader)
|
self.level_requirements = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
|
||||||
def read_tool_list(self, filename):
|
def read_tool_list(self, filename):
|
||||||
|
"""Reads list of tools from file `filename`."""
|
||||||
with open(filename) as f:
|
with open(filename) as f:
|
||||||
self.tool_list = yaml.load(f, Loader=yaml.FullLoader)
|
self.tool_list = yaml.load(f, Loader=yaml.FullLoader)
|
||||||
|
|
||||||
def add_known_tool(self, tool):
|
def add_known_tool(self, tool):
|
||||||
|
"""Add tool `tool` to list of known tools."""
|
||||||
if tool in self.known_tools:
|
if tool in self.known_tools:
|
||||||
return
|
return
|
||||||
self.known_tools.append(tool)
|
self.known_tools.append(tool)
|
||||||
|
|
||||||
def next_level(self, current_level, current_time):
|
def next_level(self, current_level, current_time):
|
||||||
|
"""Select what the next level should be after `current_level`."""
|
||||||
next_levels = self.level_requirements["level" + str(current_level+1)]
|
next_levels = self.level_requirements["level" + str(current_level+1)]
|
||||||
if len(next_levels) == 1:
|
if len(next_levels) == 1:
|
||||||
return next_levels[0][0]
|
return next_levels[0][0]
|
||||||
|
|
Reference in New Issue