Source code for playing.demo

"""Demonstrate the features of the package with a small interactive execution

Since this module may be called from anywhere and even the package might not
have been installed yet, the package path is inserted into the sys.path if
missing. From that point on, imports like source.core work fine.

In order to demonstrate the correct usage of the package objects (e.g. the Nim
class), i.e. referring to it as `nimgame.Nim`, regardless of where this class is
actually created in the source, we create simulated namespace, fill it up with
the objects imported from their actual place, and call it nimgame.
"""


import types

# Insert the package into the system path
import sys, os
basepath = os.path.dirname(__file__)
packagepath = os.path.abspath(os.path.join(basepath, '../..'))
if packagepath not in sys.path:
    sys.path.insert(0, packagepath)

# Simulate "import nimgame" (as the package may not be installed yet)
from source.core import Nim as _Nim
from source.typedefs import ErrorRate as _ErrorRate
from source.playing.cli.play import playCLI as _playCLI
from source.playing.web.play import playweb as _playweb
nimgame = types.SimpleNamespace()
nimgame.Nim = _Nim
nimgame.ErrorRate = _ErrorRate
nimgame.playCLI = _playCLI
nimgame.playweb = _playweb

from source.playing.cli import ansi


[docs]def run(): """Run the interactive CLI demo""" try: while True: testtype = input( 'Press ' '"m" for running multiple games' '; ' '"p" for playing an interactive game' '; ' '"w" for running the web server' '; [p]: ' ) or 'p' ansi.clean_prev_line() if testtype=='m': #do the test with 1000 games gamecount = 1000 #request 10% Computer and 20% Player error rate error_rate = nimgame.ErrorRate(Computer=10, Player=20) #run all tests from tests import testruns testruns.run_many_games(gamecount, error_rate) break elif testtype=='p': nimgame.play_CLI() break elif testtype=='w': nimgame.playweb() break except KeyboardInterrupt: #Ctrl-C happens when input is waiting, so delete that prompt ansi.clean_this_line() print('Game terminated by the user pressing Ctrl-C') exit(2) except Exception as e: print(e) exit(1) exit(0)
if __name__ == '__main__': run()