implements player logic
This commit is contained in:
		
							parent
							
								
									088ce7e055
								
							
						
					
					
						commit
						70b3ba7806
					
				|  | @ -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__": | ||||||
|  |  | ||||||
|  | @ -0,0 +1,10 @@ | ||||||
|  | Abdellah | ||||||
|  | David | ||||||
|  | Sarah | ||||||
|  | Selçuk | ||||||
|  | Hawai | ||||||
|  | Hugo | ||||||
|  | Jonathan | ||||||
|  | Nicolas | ||||||
|  | Laurant | ||||||
|  | Wouter | ||||||
|  | @ -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: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue