ecs #58

Merged
raphael merged 70 commits from ecs into main 2023-11-03 15:29:36 +00:00
3 changed files with 43 additions and 18 deletions
Showing only changes of commit 4194474769 - Show all commits

View file

@ -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

View file

@ -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)],
[],
[],

View file

@ -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