diff --git a/src/plugins/writing.py b/src/plugins/writing.py index 3c49ac6..ea8debc 100644 --- a/src/plugins/writing.py +++ b/src/plugins/writing.py @@ -25,6 +25,8 @@ def __update(world: World): for entity in world.query(Writing, Text): text = entity[Text] for key in pressed: + if text.text == "...": + text.text = "" if key == "backspace": text.text = text.text[:-1] if key.startswith("["): # pavé numerique diff --git a/src/scenes/basic_game.py b/src/scenes/basic_game.py index 2d3a502..f24b2c3 100644 --- a/src/scenes/basic_game.py +++ b/src/scenes/basic_game.py @@ -13,6 +13,7 @@ from plugins import render from plugins import writing from plugins.assets import Assets from plugins.hover import HoveredTexture +from plugins.inputs import Pressed from plugins.render import Sprite from plugins.text import Text from plugins.writing import Writing @@ -93,6 +94,7 @@ def __initialize_world(world: World): PlayAgain(), ) + # Assigne le nombre d'essai et la couleur du texte enf ocntion du mode de jeux match world[GameMode]: case GameMode.CLASSIC: world.set(RemainingAttempts(7)) @@ -104,14 +106,6 @@ def __initialize_world(world: World): world.set(RemainingAttempts(10)) text_color = pygame.Color(133, 51, 25) - match world[GameMode]: - case GameMode.CLASSIC: - world.set(RemainingAttempts(7)) - case GameMode.LIAR: - world.set(RemainingAttempts(15)) - case GameMode.CHEATER: - world.set(RemainingAttempts(10)) - world.new_entity().set( Text( f"Il reste : {world[RemainingAttempts]} essais", @@ -135,7 +129,7 @@ def __initialize_world(world: World): world.new_entity().set( Text( - "", + "...", 150, text_color, Vec2(render.WIDTH / 2, 650), @@ -145,6 +139,13 @@ def __initialize_world(world: World): ) +def __key_check(world: World): + pressed = world[Pressed] + for key in pressed: + if key == "return" or key == "enter": + __update(world) + + def __update(world: World): # Gestion du pluriel pour le nombre d'essais restants pluriel = "s" @@ -153,7 +154,10 @@ def __update(world: World): else: pluriel = "s" lying = False + + # On verifie si le mode actuel est le mode tricheur if world[GameMode] == GameMode.LIAR: + # On verifie si l'ordinateur triche a durant ce tour-ci lie = random.randint(1, 4) if lie == 4: lying = True @@ -172,27 +176,37 @@ def __update(world: World): world.set(CurrentScene(CHEATER)) for entity in world.query(Text, Writing): - if entity[Text].text != "": + # On verifie si l'entrée est vide ou contient le texte par defaut + if entity[Text].text != "" and entity[Text].text != "...": + # On verifie si l'entrée est égale au nombre choisie if int(entity[Text].text) == world[Number]: for response in world.query(Text, Response): response[Text].text = "Gagné !" entity[Text].text = "" + # Le jeu est finit et on ne peux plus ecrire del world[IsRunning] del entity[Writing] + + # On verifie si l'entrée est superieur au nombre choisie elif int(entity[Text].text) > world[Number]: + # On verifie que l'ordinateur ne ment pas if world[GameMode] != GameMode.LIAR or not lying: for response in world.query(Text, Response): response[Text].text = "Plus petit" + # Sinon il dit l'invers else: for response in world.query(Text, Response): response[Text].text = "Plus grand" + # Dans tout les cas world[RemainingAttempts] -= 1 for attempts in world.query(Text, Attempts): attempts[ Text ].text = f"Il reste : {world[RemainingAttempts]} essai{pluriel}" - entity[Text].text = "" + entity[Text].text = "..." + + # Dans tous les autre cas (quand c'est inferieur) else: if world[GameMode] != GameMode.LIAR or not lying: for response in world.query(Text, Response): @@ -206,15 +220,20 @@ def __update(world: World): attempts[ Text ].text = f"Il reste : {world[RemainingAttempts]} essai{pluriel}" - entity[Text].text = "" - else: - for response in world.query(Text, Response): - response[Text].text = "Veuillez entrer un nombre." + entity[Text].text = "..." + else: + # Si l'entrée est vide ou avec le texte par defaut + for response in world.query(Text, Response): + response[Text].text = "Entrez un nombre !" + + # On verifie si le joueur a encore des essais if world[RemainingAttempts] == 0: for response in world.query(Text, Response): response[Text].text = "Perdu !" + # On affiche le nombre entity[Text].text = f"Le nombre etait {world[Number]}" + # On change la texure du bouton valider en bouton rejouer for play_again in world.query(PlayAgain): play_again[Sprite].texture = world[Assets].get_texture("play_again") play_again[HoveredTexture].normal = world[Assets].get_texture( @@ -223,25 +242,29 @@ def __update(world: World): play_again[HoveredTexture].hovered = world[Assets].get_texture( "play_again_hover" ) - del entity[Writing] del world[IsRunning] + # On verifie le mode de jeu actuel est le mode trichuer if world[GameMode] == GameMode.CHEATER: + # on modifie le nombre en ajoutant un nombre de l'intervalle [-3, 3] world[Number] += random.randint(-3, 3) +# Definit la Scene "par defaut" qui contient l'entireté des 3 modes en fonction de GameMode __SCENE = ( Scene( [__initialize_world], - [], + [__key_check], [], ) + writing.PLUGIN ) +# Crée le scene classique en fonction de la scene par defaut CLASSIC = assets.loading_scene( Plugin( + # Modifie le GameMode en CLASSIC a l'initialisation de la scene [lambda world: world.set(GameMode.CLASSIC)], [], [], diff --git a/src/scenes/menu.py b/src/scenes/menu.py index 91a1532..3aafcae 100644 --- a/src/scenes/menu.py +++ b/src/scenes/menu.py @@ -3,7 +3,7 @@ La scène du menu principal du jeu. Dans cette scène nous pouvons choisir le mode de jeu. """ -import basic_game +from scenes import basic_game from engine import CurrentScene, Scene from engine.ecs import Entity, World from engine.math import Vec2