Start documentation in game_logic.py
This commit is contained in:
parent
e8c5288f00
commit
a8fae6b3fc
@ -3,20 +3,15 @@ import random
|
||||
from truthseeker.logic.data_persistance.data_access import *
|
||||
from datetime import datetime, timedelta
|
||||
from truthseeker import APP
|
||||
|
||||
|
||||
# Map of all actively running games
|
||||
# games_list["game.game_id"]-> game info linked to that id
|
||||
from typing import Union, Optional
|
||||
|
||||
def random_string(length: int) ->str:
|
||||
"""
|
||||
This function create a random string as long as the lint passed as
|
||||
parameter
|
||||
|
||||
: param length: the lenght of the random string
|
||||
: type length : int
|
||||
: return : a random string
|
||||
: return type : string
|
||||
:param length: the length of the random string to create
|
||||
:return: a random string
|
||||
"""
|
||||
return "".join(random.choice(string.ascii_letters) for _ in range(length))
|
||||
|
||||
@ -24,13 +19,13 @@ class Member:
|
||||
"""
|
||||
stores information related to the member of a given game
|
||||
|
||||
Member.username : The username of this member
|
||||
Member.socker : The reference to the socket to talk to this member
|
||||
|
||||
:attr str username: The username of this member
|
||||
:attr TODO progress: TODO
|
||||
:attr TODO results: TODO
|
||||
"""
|
||||
|
||||
def __init__(self, username):
|
||||
self.username = username
|
||||
self.socket = None
|
||||
self.progress = 0
|
||||
self.results = None
|
||||
|
||||
@ -44,10 +39,14 @@ class Game:
|
||||
"""
|
||||
The game info class stores all information linked to a active game
|
||||
|
||||
Game.game_id : str, the game identifier of the game
|
||||
Game.owner : Member, the game identifier of the game
|
||||
Game.members : Member[], the members of the game
|
||||
:attr str game_id: str, the game identifier of the game
|
||||
:attr owner Member: the player start created the game. It is also stored in self.members
|
||||
:attr Member[] members: the members of the game
|
||||
:attr bool has_started: TODO
|
||||
:attr TODO gamedata: TODO
|
||||
:attr TODO reaction_table: TODO
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
self.game_id = None
|
||||
self.owner = None
|
||||
@ -56,12 +55,21 @@ class Game:
|
||||
self.gamedata = {}
|
||||
self.reaction_table = {}
|
||||
|
||||
def set_owner(self, username):
|
||||
"""
|
||||
Set the owner of the game
|
||||
|
||||
:param username: the username of the owner.
|
||||
:return: the Member object created by this method
|
||||
"""
|
||||
def set_owner(self, username: str) -> Member:
|
||||
self.owner = Member(username)
|
||||
self.members.append(self.owner)
|
||||
return self.owner
|
||||
|
||||
def generateGameResults(self):
|
||||
"""
|
||||
TODO + TODO RET TYPE
|
||||
"""
|
||||
def generateGameResults(self) -> None:
|
||||
data = {}
|
||||
npcs = data["npcs"] = {}
|
||||
for npc_id in self.gamedata["npcs"]:
|
||||
@ -75,29 +83,50 @@ class Game:
|
||||
player_results[member.username] = member.results
|
||||
return data
|
||||
|
||||
def generate_data(self):
|
||||
"""
|
||||
TODO
|
||||
"""
|
||||
def generate_data(self) -> None:
|
||||
#TODO Get language from player
|
||||
self.gamedata, self.reaction_table = generateGameData("FR")
|
||||
|
||||
def get_member(self, username):
|
||||
"""
|
||||
Get a Member object from a username
|
||||
|
||||
:param username: the username of the member to search for
|
||||
:return the member corresponding to the username, or None if none if found:
|
||||
"""
|
||||
def get_member(self, username: str) -> Union[Member, None]:
|
||||
for member in self.members:
|
||||
if member.username == username:
|
||||
return member
|
||||
|
||||
def add_member(self, username):
|
||||
"""
|
||||
Add a Member to the game
|
||||
|
||||
:param username: the username of the member to add
|
||||
:return: the Member created, or None if a Member with this username already exists in the game
|
||||
"""
|
||||
def add_member(self, username: str) -> Union[Member, None]:
|
||||
if self.get_member(username):
|
||||
return None
|
||||
member = Member(username)
|
||||
self.members.append(member)
|
||||
return member
|
||||
|
||||
def get_npc_reaction(self,npc_id,reaction):
|
||||
"""
|
||||
TODO + TODO TYPES
|
||||
"""
|
||||
def get_npc_reaction(self, npc_id, reaction) -> None:
|
||||
if npc_id not in self.reaction_table.keys():
|
||||
return 0
|
||||
reaction_id = self.reaction_table[npc_id][int(reaction)]
|
||||
return read_image(f"./truthseeker/static/images/npc/{npc_id}/{reaction_id}.png")
|
||||
|
||||
def getPlayerResults(self,responses: dict):
|
||||
"""
|
||||
TODO + TODO RETTYPE
|
||||
"""
|
||||
def getPlayerResults(self, responses: dict) -> None:
|
||||
results = {}
|
||||
try:
|
||||
for npc_id in responses:
|
||||
@ -108,7 +137,12 @@ class Game:
|
||||
return False
|
||||
|
||||
|
||||
def has_finished(self):
|
||||
"""
|
||||
Checks if the game has finished by checking if every Member has submitted answers
|
||||
|
||||
:return: True if the game has finished, else False
|
||||
"""
|
||||
def has_finished(self) -> bool:
|
||||
for member in self.members:
|
||||
if member.results == None : return False
|
||||
return True
|
||||
@ -119,13 +153,12 @@ class Game:
|
||||
def __repr__(self) -> str:
|
||||
return self.__str__()
|
||||
|
||||
def create_game(owner):
|
||||
def create_game(owner: str) -> Game:
|
||||
"""
|
||||
This function creates a new game by creating a Game object and stores
|
||||
it into the games_list dictionnary
|
||||
|
||||
: return : a new Game
|
||||
: return type : Game
|
||||
:return: a new Game
|
||||
"""
|
||||
game = Game()
|
||||
game.owner = owner
|
||||
@ -134,25 +167,12 @@ def create_game(owner):
|
||||
APP.games_list[game.game_id] = game
|
||||
return game
|
||||
|
||||
def get_game(game_id):
|
||||
if game_id in APP.games_list:
|
||||
return APP.games_list[game_id]
|
||||
else:
|
||||
return None
|
||||
def get_game(game_id: str) -> Union[Game, None]:
|
||||
"""
|
||||
Get a game from its ID
|
||||
|
||||
def get_game_info(game_id):
|
||||
""" if not flask.session:
|
||||
return {"error": 1, "msg": "No session"}
|
||||
game = game_logic.get_game(flask.session["game_id"])
|
||||
if game == None:
|
||||
return {"error": 1, "msg": "this game doesn't exist"}
|
||||
This function retrieve a the Game object linked to the game_id
|
||||
passed as parametter
|
||||
|
||||
: param game_id : the lenght of the random string
|
||||
: type game_id : str
|
||||
: return : The Game Object linked to the game_id
|
||||
: return type : Game
|
||||
:param game_id: the id of the game to search
|
||||
:return: the Game object or None if not found
|
||||
"""
|
||||
if game_id in APP.games_list:
|
||||
return APP.games_list[game_id]
|
||||
@ -178,10 +198,10 @@ def generateNpcText(npc: tables.Npc, lang: str) -> dict:
|
||||
data["QA_1"] = getTextFromLid(lang, getNpcRandomAnswer(npc,1).TEXT_LID)
|
||||
return data
|
||||
|
||||
def generateNpcReactions(npc : tables.Npc) ->list:
|
||||
def generateNpcReactions(npc: tables.Npc) ->list:
|
||||
return getNpcRandomTraitId(npc)
|
||||
|
||||
def generatePlaceData(npcs :list, places: list, lang : str) -> dict:
|
||||
def generatePlaceData(npcs: list, places: list, lang: str) -> dict:
|
||||
data = {}
|
||||
random.shuffle(npcs)
|
||||
for place in places:
|
||||
|
Loading…
Reference in New Issue
Block a user