implements player logic

This commit is contained in:
waldek 2021-06-17 14:51:43 +02:00
parent 088ce7e055
commit 70b3ba7806
3 changed files with 65 additions and 19 deletions

View File

@ -132,6 +132,27 @@ class Database(object):
class Game(object): class Game(object):
def __init__(self, filepath):
self._filepath = pathlib.Path(filepath)
self._players = []
self.setup_players()
def setup_players(self):
with open(self._filepath, "r") as fp:
lines = fp.readlines()
for line in lines:
self.add_player(line.strip())
def get_random_player(self):
return random.choice(self._players)
def add_player(self, name):
player = Player(name)
self._players.append(player)
class Stats(object):
"""TODO placeholder for the stats class"""
def __init__(self): def __init__(self):
self._stats = [] self._stats = []
@ -139,20 +160,22 @@ class Game(object):
self._stats.append(stat) self._stats.append(stat)
def get_stats(self): def get_stats(self):
right = self._stats.count(True) return self.get_right(), self.get_wrong(), len(self._stats)
wrong = self._stats.count(False)
total = len(self._stats)
return (right, wrong, total)
def get_wrong(self):
return self._stats.count(False)
class Stats(object): def get_right(self):
"""TODO placeholder for the stats class""" return self._stats.count(True)
pass
class Player(object): class Player(object):
"""TODO placeholder for the player class""" def __init__(self, name):
pass self.name = name
self.stats = Stats()
def get_stats(self):
return self.name, self.stats.get_right(), self.stats.get_wrong()
if __name__ == "__main__": if __name__ == "__main__":

10
players.list Normal file
View File

@ -0,0 +1,10 @@
Abdellah
David
Sarah
Selçuk
Hawai
Hugo
Jonathan
Nicolas
Laurant
Wouter

View File

@ -4,6 +4,7 @@ import pathlib
import argparse import argparse
import os import os
import random import random
import time
from rich.console import Console from rich.console import Console
from rich.markdown import Markdown from rich.markdown import Markdown
from ccpq.lib_ccpq import Question, Database, Game from ccpq.lib_ccpq import Question, Database, Game
@ -60,6 +61,14 @@ class Tui(object):
self._console.print(md) self._console.print(md)
return answers return answers
def signal_player(self, player):
os.system("clear")
md = "# {}".format(player.name)
md = Markdown(md)
self._console.print(md)
time.sleep(2)
os.system("clear")
def show_response(self, question): def show_response(self, question):
answers = question.get_right_answers() answers = question.get_right_answers()
if len(answers) == 1: if len(answers) == 1:
@ -83,7 +92,7 @@ class Tui(object):
self._console.print(md) self._console.print(md)
def show_stats(self, stats): def show_stats(self, stats):
md = "### you have {} out of {} right!".format(stats[0], stats[2]) md = "{}, you have {} out of {} right!\n".format(stats[0], stats[1], stats[1] + stats[2])
md = Markdown(md) md = Markdown(md)
self._console.print(md) self._console.print(md)
md = "### press **enter** to get a new question or **CTRL-C** to quit" md = "### press **enter** to get a new question or **CTRL-C** to quit"
@ -97,10 +106,10 @@ class Tui(object):
class Application(object): class Application(object):
def __init__(self, filepath, interface, number): def __init__(self, filepath_csv, filepath_players, interface, number):
self._db = Database(filepath) self._db = Database(filepath_csv)
self._number = number self._number = number
self._session = Game() self._session = Game(filepath_players)
self._interface = interface self._interface = interface
def start(self): def start(self):
@ -109,15 +118,17 @@ class Application(object):
def run(self): def run(self):
while self._number > 0: while self._number > 0:
player = self._session.get_random_player()
self._interface.signal_player(player)
question = self._db.get_question() question = self._db.get_question()
self._interface.ask_question(question) self._interface.ask_question(question)
answer = self._interface.prompt_for_answer() answer = self._interface.prompt_for_answer()
stat = question.verify(answer) stat = question.verify(answer)
self._session.update_stats(stat) player.stats.update_stats(stat)
self._interface.show_success(stat) self._interface.show_success(stat)
self._interface.show_response(question) self._interface.show_response(question)
self._interface.show_explanation(question) # will work once issue 5 is addressed self._interface.show_explanation(question)
self._interface.show_stats(self._session.get_stats()) self._interface.show_stats(player.get_stats())
self._number -= 1 self._number -= 1
self.quit() self.quit()
@ -128,14 +139,16 @@ class Application(object):
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("-f", "--file", required=True, help="file to use as database", action="store") parser.add_argument("-f", "--file", required=True, help="file to use as database", action="store")
parser.add_argument("-p", "--players", required=True, help="list of players", action="store")
parser.add_argument("-n", "--number", default=10, help="number of questions to ask", type=int, action="store") parser.add_argument("-n", "--number", default=10, help="number of questions to ask", type=int, action="store")
args = parser.parse_args() args = parser.parse_args()
filepath = pathlib.Path(args.file) filepath_csv = pathlib.Path(args.file)
if not filepath.exists(): filepath_players = pathlib.Path(args.players)
if not filepath_csv.exists() or not filepath_players.exists():
print("no such file!") print("no such file!")
exit(1) exit(1)
interface = Tui() interface = Tui()
app = Application(filepath, interface, args.number) app = Application(filepath_csv, filepath_players, interface, args.number)
try: try:
app.run() app.run()
except KeyboardInterrupt: except KeyboardInterrupt: