From 7a4587ac445793cc849bed24c10204a23505489c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl?= Date: Sun, 7 Jan 2024 20:05:52 +0100 Subject: [PATCH 1/2] settings + squash game_over et send_to_server --- assets/textures/button_menu_icon.png | Bin 0 -> 2866 bytes assets/textures/button_menu_icon_hover.png | Bin 0 -> 2998 bytes assets/textures/button_settings_icon.png | Bin 0 -> 2997 bytes .../textures/button_settings_icon_hover.png | Bin 0 -> 4130 bytes src/plugins/writing.py | 7 - src/scenes/game.py | 2 +- src/scenes/game_over.py | 92 +++++-- src/scenes/menu.py | 21 +- src/scenes/send_to_server.py | 106 -------- src/scenes/settings.py | 250 ++++++++++++++++++ 10 files changed, 340 insertions(+), 138 deletions(-) create mode 100644 assets/textures/button_menu_icon.png create mode 100644 assets/textures/button_menu_icon_hover.png create mode 100644 assets/textures/button_settings_icon.png create mode 100644 assets/textures/button_settings_icon_hover.png delete mode 100644 src/scenes/send_to_server.py create mode 100644 src/scenes/settings.py diff --git a/assets/textures/button_menu_icon.png b/assets/textures/button_menu_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..96790781fed9479c75f402157862e8522ad29720 GIT binary patch literal 2866 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 literal 0 HcmV?d00001 diff --git a/assets/textures/button_settings_icon.png b/assets/textures/button_settings_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..51e67b9f1ae432c12bb9787557a599a20362eb94 GIT binary patch literal 2997 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 literal 0 HcmV?d00001 diff --git a/assets/textures/button_settings_icon_hover.png b/assets/textures/button_settings_icon_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..4f7f2848663ea962e1620bef54675466f7c79fb6 GIT binary patch literal 4130 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 literal 0 HcmV?d00001 diff --git a/src/plugins/writing.py b/src/plugins/writing.py index f9cbbbc..2061add 100644 --- a/src/plugins/writing.py +++ b/src/plugins/writing.py @@ -36,13 +36,6 @@ def __update(world: World): entity[Text] = writing.base_text if key.startswith("["): # pavé numerique key = key[1] - match key: - case "6": - key = "-" - case "8": - key = "_" - case _: - pass if key in writing.accepted_chars and ( entity[Text] == writing.base_text or len(entity[Text]) < writing.max_chars diff --git a/src/scenes/game.py b/src/scenes/game.py index 7c2ae00..99f896c 100644 --- a/src/scenes/game.py +++ b/src/scenes/game.py @@ -676,7 +676,7 @@ def __animation(world: World, number: int): world.new_entity().set( TextBundle( str(number), - 2, + 10, 5000, position=Vec2(render.WIDTH / 2, render.HEIGHT / 2), origin=Vec2(0.5), diff --git a/src/scenes/game_over.py b/src/scenes/game_over.py index 1021949..8c7893e 100644 --- a/src/scenes/game_over.py +++ b/src/scenes/game_over.py @@ -1,16 +1,23 @@ -from engine import CurrentScene, KeepAlive, Scene +import os +from engine import CurrentScene, KeepAlive, Plugin from engine.ecs import Entity, World from engine.math import Vec2 from plugins import render +from plugins import writing from plugins.click import Clickable from plugins.hover import HoveredTexture from plugins.inputs import Pressed from plugins.render import ( SpriteBundle, + Text, TextBundle, ) from plugins.sound import Sound -from scenes import game, send_to_server +from plugins.writing import Writing +from scenes import game, thanks +import requests as rq + +IP = "pong.cocosol.fr" def __spawn_elements(world: World): @@ -21,23 +28,49 @@ def __spawn_elements(world: World): ) world.new_entity().set( TextBundle( - "Voulez vous enregistrer votre Score ?", + f"Votre score est de {world[game.Player1Score]}", 0, 50, position=Vec2(render.WIDTH / 2, 350), origin=Vec2(0.5), ) ) - world.new_entity().set( - TextBundle( - f"{world[game.Player1Score]}", - 0, - 50, - position=Vec2(render.WIDTH / 2, 450), - origin=Vec2(0.5), + + if not os.path.exists("username.txt"): + world.new_entity().set( + TextBundle( + "Quel est votre pseudo ?", + 0, + 50, + position=Vec2(render.WIDTH / 2, render.HEIGHT / 2), + origin=Vec2(0.5), + ) ) - ) - __create_button(world, "continue") + world.new_entity().set( + SpriteBundle( + "background.jpg", + -5, + Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 100), + Vec2(600, 70), + Vec2(0.5), + ) + ) + world.new_entity().set( + TextBundle( + "", + 0, + 50, + position=Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 100), + origin=Vec2(0.5), + ), + Writing( + "azertyuiopqsdfghjklmwxcvbn0123456789/", + 16, + "...", + ), + ) + + __create_button(world, "submit") def __create_button(world: World, name: str): @@ -55,16 +88,26 @@ def __create_button(world: World, name: str): f"button_{name}.png", f"button_{name}_hover.png", ), - Clickable(lambda world, entity: __on_click_butons(world, entity, name)), + Clickable(new_score), ) -def __on_click_butons(world: World, _entity: Entity, name: str): - """ - Fonction qui s'execute quand on clique sur un bouton. - """ - world[CurrentScene] = send_to_server.SEND - world.new_entity().set(KeepAlive(), Sound("click.wav")) +def new_score(world: World, e: Entity): + e.remove(Clickable) + if os.path.exists("username.txt"): + with open("username.txt", "r") as f: + name = f.read() + else: + name = world.query(Writing).pop() + with open("username.txt", "w") as f: + f.write(name[Text]) + + try: + post = {"name": name, "score": world[game.Player1Score]} + rq.post(f"https://{IP}/new_score", post) + world.set(CurrentScene(thanks.THANKS)) + except Exception as error: + print("Error with the serveur:", error) def __enter_to_submit(world: World): @@ -76,8 +119,11 @@ def __enter_to_submit(world: World): world.new_entity().set(KeepAlive(), Sound("click.wav")) -GAME_OVER = Scene( - [__spawn_elements], - [__enter_to_submit], - [], +GAME_OVER = ( + Plugin( + [__spawn_elements], + [__enter_to_submit], + [], + ) + + writing.PLUGIN ) diff --git a/src/scenes/menu.py b/src/scenes/menu.py index 98cee7c..c1dd9f2 100644 --- a/src/scenes/menu.py +++ b/src/scenes/menu.py @@ -12,7 +12,7 @@ from plugins.click import Clickable from plugins.hover import HoveredTexture from plugins.render import SpriteBundle, TextBundle from plugins.timing import Time -from scenes import game +from scenes import game, settings import requests as rq IP = "pong.cocosol.fr" @@ -76,6 +76,25 @@ def __spawn_elements(world: World): __spawn_score(world) + world.new_entity().set( + SpriteBundle( + f"button_settings_icon.png", + 1, + Vec2(100, 100), + Vec2(100, 100), + Vec2(0.5), + ), + HoveredTexture( + f"button_settings_icon.png", + f"button_settings_icon_hover.png", + ), + Clickable(__go_to_settings), + ) + + +def __go_to_settings(world: World, _e: Entity): + world[CurrentScene] = settings.SETTINGS + def __spawn_score(world: World): """ diff --git a/src/scenes/send_to_server.py b/src/scenes/send_to_server.py deleted file mode 100644 index baf5eb3..0000000 --- a/src/scenes/send_to_server.py +++ /dev/null @@ -1,106 +0,0 @@ -import os -from plugins import writing -from engine import CurrentScene, Plugin -from engine.ecs import Entity, World -from engine.math import Vec2 -from plugins import render -from plugins.click import Clickable -from plugins.hover import HoveredTexture -from plugins.inputs import Pressed -from plugins.render import SpriteBundle, Text, TextBundle -from plugins.writing import Writing -import requests as rq -from scenes import game, thanks - -IP = "pong.cocosol.fr" - - -def new_score(world: World, e: Entity): - e.remove(Clickable) - name = world.query(Writing).pop() - - try: - post = {"name": name[Text], "score": world[game.Player1Score]} - rq.post(f"https://{IP}/new_score", post) - with open("username.txt", "w") as f: - f.write(name[Text]) - world.set(CurrentScene(thanks.THANKS)) - except Exception as error: - print("Error with the serveur:", error) - - -def get_scores(): - try: - return rq.get(f"https://{IP}/data").json() - except Exception as error: - print("Error with the serveur:", error) - - -def __spawn_elements(world: World): - """ - Ajoute les éléments du menu dans le monde. - """ - - if os.path.exists("username.txt"): - with open("username.txt", "r") as f: - name = f.read() - post = {"name": name, "score": world[game.Player1Score]} - rq.post(f"https://{IP}/new_score", post) - world.set(CurrentScene(thanks.THANKS)) - return - - world.new_entity().set(SpriteBundle("background.png", -5)) - world.new_entity().set( - TextBundle( - "Quel est votre pseudo ?", - 0, - position=Vec2(render.WIDTH / 2, 350), - origin=Vec2(0.5), - ), - ) - world.new_entity().set( - TextBundle( - "...", - 0, - 50, - position=Vec2(render.WIDTH / 2, 475), - origin=Vec2(0.5), - ), - Writing( - "azertyuiopqsdfghjklmwxcvbn0123456789_-/", - 16, - "...", - ), - ) - - world.new_entity().set( - SpriteBundle( - f"button_one_player.png", - position=Vec2(render.WIDTH / 2, 800), - order=1, - origin=Vec2(0.5), - ), - HoveredTexture( - f"button_submit.png", - f"button_submit_hover.png", - ), - Clickable(new_score), - ) - - -def __enter_to_submit(world: World): - """ - Envoit le score losre que l'utilisateur appuie sur entrée. - """ - if "return" in world[Pressed] and len(world.query(Clickable)) > 0: - new_score(world, world.query(Clickable).pop()) - - -SEND = ( - Plugin( - [__spawn_elements], - [__enter_to_submit], - [], - ) - + writing.PLUGIN -) diff --git a/src/scenes/settings.py b/src/scenes/settings.py new file mode 100644 index 0000000..ef9cb13 --- /dev/null +++ b/src/scenes/settings.py @@ -0,0 +1,250 @@ +import random +from engine import CurrentScene, Scene +from engine.ecs import Entity, World +from engine.math import Vec2 +from plugins import render +from plugins.click import Clickable +from plugins.hover import HoveredTexture +from plugins.inputs import Held +from plugins.physics import Solid, Velocity +from plugins.render import Origin, Position, Scale, SpriteBundle, TextBundle, Texture +from plugins.timing import Delta +from scenes import menu + + +class Player1Up(str): + """ + Ressource qui definit la touche pour monter le joueur 1 + """ + + +class Player1Down(str): + """ + Ressource qui definit la touche pour descendre le joueur 1 + """ + + +class Player2Up(str): + """ + Ressource qui definit la touche pour monter le joueur 2 + """ + + +class Player2Down(str): + """ + Ressource qui definit la touche pour descendre le joueur 1 + """ + + +class UpKey(str): + """ + Composant qui indique la touche pour faire monter le joueur + """ + + +class DownKey(str): + """ + Composant qui indique la touche pour faire descender le joueur + """ + + +class Speed(int): + """ + Composant qui represente la vitesse de l'entité. + """ + + +def __spawn_elements(world: World): + world.set( + Player1Up("z"), + Player1Down("s"), + Player2Up("up"), + Player2Down("down"), + ) + + world.new_entity().set(SpriteBundle(("background.png"), -5)) + world.new_entity().set(TextBundle("Commandes", 0, 60, position=Vec2(250, 150))) + world.new_entity().set(TextBundle("Joueur 1", 0, 50, position=Vec2(350, 250))) + world.new_entity().set(TextBundle(f"Monter", 0, 40, position=Vec2(450, 325))) + world.new_entity().set( + TextBundle( + f"{world[Player1Up]}", + 0, + 40, + position=Vec2(800, 325), + origin=Vec2(1, 0), + ) + ) + world.new_entity().set(TextBundle(f"Descendre", 0, 40, position=Vec2(450, 375))) + world.new_entity().set( + TextBundle( + f"{world[Player1Down]}", + 0, + 40, + position=Vec2(800, 375), + origin=Vec2(1, 0), + ) + ) + + world.new_entity().set(TextBundle("Joueur 2", 0, 50, position=Vec2(350, 475))) + world.new_entity().set(TextBundle("Monter", 0, 40, position=Vec2(450, 550))) + world.new_entity().set( + TextBundle( + f"{world[Player2Up]}", + 0, + 40, + position=Vec2(800, 550), + origin=Vec2(1, 0), + ) + ) + world.new_entity().set(TextBundle("Descendre", 0, 40, position=Vec2(450, 600))) + world.new_entity().set( + TextBundle( + f"{world[Player2Down]}", + 0, + 40, + position=Vec2(800, 600), + origin=Vec2(1, 0), + ) + ) + + world.new_entity().set( + SpriteBundle( + f"button_menu_icon.png", + 1, + Vec2(100, 100), + Vec2(100, 100), + Vec2(0.5), + ), + HoveredTexture( + f"button_menu_icon.png", + f"button_menu_icon_hover.png", + ), + Clickable(__go_to_menu), + ) + + +def __move_up(world: World): + """ + La fonction permet de faire bouger les entitees qui possedent UpKey vers le haut. + """ + held = world[Held] + for entity in world.query(UpKey): + if entity[UpKey] in held: + if entity[Position].y > 125 + entity[Scale].y * entity[Origin].y: + entity[Position] = Vec2( + entity[Position].x, + (entity[Position].y - entity[Speed] * world[Delta]), + ) + + +def __move_down(world: World): + """ + La fonction permet de faire bouger les entitees qui possedent DownKey vers le bas. + """ + held = world[Held] + for entity in world.query(DownKey): + if entity[DownKey] in held: + if ( + entity[Position].y + < render.HEIGHT - 125 - entity[Scale].y * entity[Origin].y + ): + entity[Position] = Vec2( + entity[Position].x, + (entity[Position].y + entity[Speed] * world[Delta]), + ) + + +def __update_move(world: World): + """ + La fontion permet de faire bouger les entitees vers le haut ou vers le bas. + """ + __move_down(world) + __move_up(world) + + +def __spawn_little_game(world: World): + # Mon mur de gauche + world.new_entity().set( + Origin(Vec2(1, 0)), + Scale(Vec2(10, render.HEIGHT)), + Position(Vec2(150, 0)), + Solid(), + ) + + # Mon mur du RN + world.new_entity().set( + Origin(Vec2(0, 0)), + Scale(Vec2(10, render.HEIGHT)), + Position(Vec2(render.WIDTH - 150, 0)), + Solid(), + ) + + # Mon mur du bas + world.new_entity().set( + Origin(Vec2(0, 0)), + Scale(Vec2(render.WIDTH, 10)), + Position(Vec2(0, render.HEIGHT - 125)), + Solid(), + ) + + # Mon mur du haut + world.new_entity().set( + Origin(Vec2(0, 1)), + Scale(Vec2(render.WIDTH, 10)), + Position(Vec2(0, 125)), + Solid(), + ) + + # Joueur 1 + world.new_entity().set( + SpriteBundle( + "player_1.png", + 0, + Vec2(225, render.HEIGHT / 2), + Vec2(44, 250), + Vec2(1, 0.5), + ), + UpKey("z"), + DownKey("s"), + Speed(500), + Solid(), + ) + + # Joueur 2 + world.new_entity().set( + SpriteBundle( + "player_2.png", + 0, + Vec2(render.WIDTH - 225, render.HEIGHT / 2), + Vec2(44, 250), + Vec2(0, 0.5), + ), + UpKey("up"), + DownKey("down"), + Speed(500), + Solid(), + ) + + velocity = Vec2(2 * random.randint(100, 200), random.randint(100, 200)) + world.new_entity().set( + SpriteBundle( + "ball.png", + 0, + Vec2(render.WIDTH / 2, render.HEIGHT / 2), + Vec2(40, 40), + Vec2(0.5), + ), + Velocity(velocity), + ) + + +def __go_to_menu(world: World, _e: Entity): + world[CurrentScene] = menu.MENU + + +SETTINGS = Scene( + [__spawn_elements, __spawn_little_game], + [__update_move], + [], +) -- 2.43.4 From be6bb9119f41499e13de45ac1455994884f46fa3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl?= Date: Sun, 7 Jan 2024 20:06:17 +0100 Subject: [PATCH 2/2] reglage erreur --- src/scenes/game_over.py | 2 +- src/scenes/settings.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/scenes/game_over.py b/src/scenes/game_over.py index 8c7893e..1910064 100644 --- a/src/scenes/game_over.py +++ b/src/scenes/game_over.py @@ -115,7 +115,7 @@ def __enter_to_submit(world: World): Envoit le score losre que l'utilisateur appuie sur entrée. """ if "return" in world[Pressed]: - world[CurrentScene] = send_to_server.SEND + new_score(world, world.query(Clickable).pop()) world.new_entity().set(KeepAlive(), Sound("click.wav")) diff --git a/src/scenes/settings.py b/src/scenes/settings.py index ef9cb13..c7bd0cf 100644 --- a/src/scenes/settings.py +++ b/src/scenes/settings.py @@ -7,7 +7,7 @@ from plugins.click import Clickable from plugins.hover import HoveredTexture from plugins.inputs import Held from plugins.physics import Solid, Velocity -from plugins.render import Origin, Position, Scale, SpriteBundle, TextBundle, Texture +from plugins.render import Origin, Position, Scale, SpriteBundle, TextBundle from plugins.timing import Delta from scenes import menu -- 2.43.4