1
0
Fork 0

tweak level selector, add quiz, make it work

This commit is contained in:
Lili (Tlapka) 2021-03-29 20:11:03 +02:00
parent 9673655b44
commit 2a2557f3c6
2 changed files with 61 additions and 9 deletions

View File

@ -158,6 +158,13 @@ class Game:
self.game_finished = False
self.level = 0
self.branch = ''
def running_time(self):
"""Return running time in minutes."""
current_time = time.time()
total_time_seconds = int(current_time - self.game_start_time)
return int(total_time_seconds/60)
# # # METHODS THAT WORK WITH FILES # # #
def read_mapping(self, filename): # raise OSError when file can't be opened
"""Read a mapping of levels for the adaptive game from a YAML file."""

View File

@ -2,6 +2,7 @@
from adaptive_game_module.adaptive_game import Game
from adaptive_game_module.hint_giver import HintGiver
from adaptive_game_module.level_selector import LevelSelector
import subprocess
import os
@ -118,6 +119,48 @@ def give_hint(game, hint_giver):
except ValueError:
print("Invalid input, no hint taken.")
def starting_quiz(level_selector):
print("Before the game starts, a little quiz:")
print("to better know your skills.")
print("Please answer 'yes' if you have ever used a tool or skill before,")
print("or 'no' if you haven't.")
for tool in level_selector.tool_list:
unanswered = True
while (unanswered):
print("Are you familiar with {}?".format(tool))
command = input()
command = command.lower()
if command in ("y", "yes"):
level_selector.add_known_tool(tool)
unanswered = False
elif command in ("n", "no"):
unanswered = False
elif command in ("exit", "stop"):
return False
else:
print("Answer has to be 'yes' or 'no' (or 'exit')")
unanswered = True
return True
def start_game(game, level_selector):
print("Before the game starts, please fill in a little quiz.")
print("It will help better decide what levels you will play.")
confirmation = starting_quiz(level_selector)
if not confirmation:
print("Game not started, quiz not filled in.")
return
print("Quiz filled in!")
print("Starting the game.")
print("The initial setup may take a while, up to 20 minutes.")
if game.start_game():
print("If you do not see any error messages above,")
print("then the game was started succesfully!")
print("You can start playing now.")
else:
print("Game was not started, it's already in progress!")
print("To start over, please run `abort` first.")
def game_loop():
"""Interactively assist the player with playing the game.
@ -163,11 +206,19 @@ def game_loop():
print("Error number: {}, Error text: {}".format(err.errno, err.strerror))
print("(Most likely, `resources/hints.yml` file couldn't be read.")
print("Make sure it is in the folder, and readable.")
try:
level_selector = LevelSelector("resources/tools.yml", "resources/level_requirements.yml")
except OSError as err:
print("Error encountered while setting up the level selector.")
print("Error number: {}, Error text: {}".format(err.errno, err.strerror))
print("(Most likely, `resources/level_requirements.yml` file couldn't be read.")
print("Make sure it is in the folder, and readable.")
print("Welcome to the adaptive game assistant.")
print("Basic commands are:")
print("(S)tart, (N)ext, (H)elp, (C)heck, (E)xit")
while True:
print("Current running time: {}m".format(game.running_time()))
print("Waiting for your input:")
command = input()
command = command.lower()
@ -189,15 +240,7 @@ def game_loop():
print("Exiting...")
return
elif command in ("s", "start"):
print("Trying to start the game.")
print("The initial setup may take a while, up to 20 minutes.")
if game.start_game():
print("If you do not see any error messages above,")
print("then the game was started succesfully!")
print("You can start playing now.")
else:
print("Game was not started, it's already in progress!")
print("To start over, please run `abort` first.")
start_game(game, level_selector)
elif command in ("n", "next"):
try:
if game.level == 0:
@ -206,6 +249,8 @@ def game_loop():
print("Going to set up level {}".format(game.level + 1))
if game.next_level_is_forked():
print("Next level is forked.")
print("Recommended next level: {}".format(
level_selector.next_level(game.level, game.running_time())))
game.print_next_level_fork_names()
print("Choose level's branch:")
branch = input()