Merge branch 'main' into fair-game
This commit is contained in:
commit
caafd80a8c
BIN
assets/textures/background.png
Normal file
BIN
assets/textures/background.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 218 KiB |
6
launch.py
Normal file
6
launch.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
import subprocess as sp
|
||||||
|
import os
|
||||||
|
|
||||||
|
folder_path = __file__.replace("\\", "/")[:-10]
|
||||||
|
os.chdir(folder_path)
|
||||||
|
sp.call(f'python "{folder_path}/src/main.py"')
|
|
@ -60,6 +60,14 @@ class AABB:
|
||||||
self.min += movement
|
self.min += movement
|
||||||
self.max += movement
|
self.max += movement
|
||||||
|
|
||||||
|
def collide(self, other: "AABB"):
|
||||||
|
return (
|
||||||
|
self.min.x < other.max.x
|
||||||
|
and self.max.x > other.min.x
|
||||||
|
and self.min.y < other.max.y
|
||||||
|
and self.max.y > other.min.y
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def line_to_line(sa: Vec2, ea: Vec2, sb: Vec2, eb: Vec2):
|
def line_to_line(sa: Vec2, ea: Vec2, sb: Vec2, eb: Vec2):
|
||||||
"""
|
"""
|
||||||
|
@ -117,6 +125,8 @@ def aabb_to_aabb(moving: AABB, static: AABB, movement: Vec2):
|
||||||
"""
|
"""
|
||||||
Renvoie la collision entre deux AABB.
|
Renvoie la collision entre deux AABB.
|
||||||
"""
|
"""
|
||||||
|
if moving.collide(static):
|
||||||
|
return 1.0, Vec2(0, 0)
|
||||||
size = (moving.max - moving.min) / 2
|
size = (moving.max - moving.min) / 2
|
||||||
static = AABB(static.min - size, static.max + size, static.entity)
|
static = AABB(static.min - size, static.max + size, static.entity)
|
||||||
start_pos = moving.min + size
|
start_pos = moving.min + size
|
||||||
|
|
|
@ -18,6 +18,7 @@ from plugins.render import (
|
||||||
Text,
|
Text,
|
||||||
TextSize,
|
TextSize,
|
||||||
)
|
)
|
||||||
|
from plugins.sound import Sound
|
||||||
from plugins.timing import Delta, Time
|
from plugins.timing import Delta, Time
|
||||||
import random
|
import random
|
||||||
from plugins.physics import CollisionHandler, Solid, Velocity
|
from plugins.physics import CollisionHandler, Solid, Velocity
|
||||||
|
@ -25,6 +26,12 @@ from plugins.physics import CollisionHandler, Solid, Velocity
|
||||||
from scenes import game_over
|
from scenes import game_over
|
||||||
|
|
||||||
|
|
||||||
|
class RestrictToScene:
|
||||||
|
"""
|
||||||
|
Composant marquant une entitée comme ne pouvant pas sortir de la scène.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class GameMode(Enum):
|
class GameMode(Enum):
|
||||||
"""
|
"""
|
||||||
Ressource qui definit le game mode choisi par l'utilisateur.
|
Ressource qui definit le game mode choisi par l'utilisateur.
|
||||||
|
@ -213,7 +220,7 @@ def __spawn_ellements(world: World):
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
Origin(Vec2(1, 0)),
|
Origin(Vec2(1, 0)),
|
||||||
Scale(Vec2(10, render.HEIGHT)),
|
Scale(Vec2(10, render.HEIGHT)),
|
||||||
Position(Vec2(70, 0)),
|
Position(Vec2(0, 0)),
|
||||||
Solid(),
|
Solid(),
|
||||||
LeftWall(),
|
LeftWall(),
|
||||||
CollisionHandler(__bounce_on_left_wall),
|
CollisionHandler(__bounce_on_left_wall),
|
||||||
|
@ -223,7 +230,7 @@ def __spawn_ellements(world: World):
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
Origin(Vec2(0, 0)),
|
Origin(Vec2(0, 0)),
|
||||||
Scale(Vec2(10, render.HEIGHT)),
|
Scale(Vec2(10, render.HEIGHT)),
|
||||||
Position(Vec2(render.WIDTH - 70, 0)),
|
Position(Vec2(render.WIDTH, 0)),
|
||||||
Solid(),
|
Solid(),
|
||||||
RightWall(),
|
RightWall(),
|
||||||
CollisionHandler(__bounce_on_right_wall),
|
CollisionHandler(__bounce_on_right_wall),
|
||||||
|
@ -266,6 +273,7 @@ def __spawn_ellements(world: World):
|
||||||
DownKey("s"),
|
DownKey("s"),
|
||||||
Speed(500),
|
Speed(500),
|
||||||
LastPlayerTurn(),
|
LastPlayerTurn(),
|
||||||
|
RestrictToScene(),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Joueur 2
|
# Joueur 2
|
||||||
|
@ -282,6 +290,7 @@ def __spawn_ellements(world: World):
|
||||||
(UpKey("up"), DownKey("down"), Speed(500))
|
(UpKey("up"), DownKey("down"), Speed(500))
|
||||||
if world[GameMode] == GameMode.TWO
|
if world[GameMode] == GameMode.TWO
|
||||||
else Speed(500),
|
else Speed(500),
|
||||||
|
RestrictToScene(),
|
||||||
)
|
)
|
||||||
|
|
||||||
__spawn_ball(world)
|
__spawn_ball(world)
|
||||||
|
@ -358,6 +367,8 @@ def __spawn_ball(world: World):
|
||||||
|
|
||||||
|
|
||||||
def __collision_with_ball(a: Entity, b: Entity):
|
def __collision_with_ball(a: Entity, b: Entity):
|
||||||
|
if Ball in a:
|
||||||
|
a.world.new_entity().set(Sound("bound.mp3"))
|
||||||
if Player1 in b or Player2 in b:
|
if Player1 in b or Player2 in b:
|
||||||
for player in a.world.query(LastPlayerTurn):
|
for player in a.world.query(LastPlayerTurn):
|
||||||
del player[LastPlayerTurn]
|
del player[LastPlayerTurn]
|
||||||
|
@ -541,6 +552,7 @@ def _update_bot(world: World):
|
||||||
better_distance = None
|
better_distance = None
|
||||||
for offset in [-100, -50, 0, 50, 100]:
|
for offset in [-100, -50, 0, 50, 100]:
|
||||||
bot[Position].y = right_touch_height + offset
|
bot[Position].y = right_touch_height + offset
|
||||||
|
__restrict_to_scene(world)
|
||||||
player.remove(Solid)
|
player.remove(Solid)
|
||||||
left_wall_ball = __simulate_wall_position(ball, LeftWall)
|
left_wall_ball = __simulate_wall_position(ball, LeftWall)
|
||||||
player.set(Solid())
|
player.set(Solid())
|
||||||
|
@ -558,8 +570,27 @@ def _update_bot(world: World):
|
||||||
|
|
||||||
# On se déplace vers la meilleure option
|
# On se déplace vers la meilleure option
|
||||||
diff = target - bot[Position].y
|
diff = target - bot[Position].y
|
||||||
if abs(diff) > 10:
|
if abs(diff) > bot[Speed] * world[Delta]:
|
||||||
bot[Position].y += (diff / abs(diff)) * bot[Speed] * world[Delta]
|
bot[Position].y += (diff / abs(diff)) * bot[Speed] * world[Delta]
|
||||||
|
else:
|
||||||
|
bot[Position].y = target
|
||||||
|
|
||||||
|
# On restrict l'entité a la scène
|
||||||
|
__restrict_to_scene(world)
|
||||||
|
|
||||||
|
|
||||||
|
def __restrict_to_scene(world: World):
|
||||||
|
"""
|
||||||
|
Restrinct dans la scène toutes les entitées ayant le composant RestrictToScene.
|
||||||
|
"""
|
||||||
|
for entity in world.query(RestrictToScene):
|
||||||
|
y = entity[Position].y - (entity[Origin].y * entity[Scale].y)
|
||||||
|
if y < 0:
|
||||||
|
entity[Position].y = entity[Origin].y * entity[Scale].y
|
||||||
|
if y + entity[Scale].y > render.HEIGHT:
|
||||||
|
entity[Position].y = (
|
||||||
|
render.HEIGHT - entity[Scale].y + (entity[Origin].y * entity[Scale].y)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def __check_bonus_collision(world: World):
|
def __check_bonus_collision(world: World):
|
||||||
|
@ -663,7 +694,13 @@ def __update_bonus_time(world: World):
|
||||||
|
|
||||||
__SCENE = Scene(
|
__SCENE = Scene(
|
||||||
[__spawn_ellements],
|
[__spawn_ellements],
|
||||||
[__update_move, __check_bonus_collision, __update_animation, __update_bonus_time],
|
[
|
||||||
|
__update_move,
|
||||||
|
__check_bonus_collision,
|
||||||
|
__update_animation,
|
||||||
|
__update_bonus_time,
|
||||||
|
__restrict_to_scene,
|
||||||
|
],
|
||||||
[],
|
[],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,12 @@ def __create_button(world: World, i: int, name: str):
|
||||||
"""
|
"""
|
||||||
Ajoute un bouton au monde.
|
Ajoute un bouton au monde.
|
||||||
"""
|
"""
|
||||||
|
if i == 0:
|
||||||
|
i = -1
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
SpriteBundle(
|
SpriteBundle(
|
||||||
f"button_{name}.png",
|
f"button_{name}.png",
|
||||||
position=Vec2(450 + 540 * i, render.HEIGHT / 2 + render.HEIGHT / 8),
|
position=Vec2(render.WIDTH / 2 + 300 * i, 800),
|
||||||
order=1,
|
order=1,
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
),
|
),
|
||||||
|
|
|
@ -30,10 +30,12 @@ def __create_button(world: World, i: int, name: str):
|
||||||
"""
|
"""
|
||||||
Ajoute un bouton au monde.
|
Ajoute un bouton au monde.
|
||||||
"""
|
"""
|
||||||
|
if i == 0:
|
||||||
|
i = -1
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
SpriteBundle(
|
SpriteBundle(
|
||||||
f"button_{name}.png",
|
f"button_{name}.png",
|
||||||
position=Vec2(450 + 540 * i, 11 * render.HEIGHT / 16),
|
position=Vec2(render.WIDTH / 2 + 300 * i, 800),
|
||||||
order=1,
|
order=1,
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
),
|
),
|
||||||
|
|
|
@ -20,7 +20,6 @@ def new_score(world: World, e: Entity):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
post = {"name": name[Text], "score": world[game.Player1Score]}
|
post = {"name": name[Text], "score": world[game.Player1Score]}
|
||||||
print(post)
|
|
||||||
rq.post(f"https://{IP}/new_score", post)
|
rq.post(f"https://{IP}/new_score", post)
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
TimedEvent(
|
TimedEvent(
|
||||||
|
@ -28,15 +27,15 @@ def new_score(world: World, e: Entity):
|
||||||
lambda world, entity: world.set(CurrentScene(thanks.THANKS)),
|
lambda world, entity: world.set(CurrentScene(thanks.THANKS)),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
except:
|
except Exception as error:
|
||||||
print("Error with the serveur")
|
print("Error with the serveur:", error)
|
||||||
|
|
||||||
|
|
||||||
def get_scores():
|
def get_scores():
|
||||||
try:
|
try:
|
||||||
return rq.get(f"https://{IP}/data").json()
|
return rq.get(f"https://{IP}/data").json()
|
||||||
except:
|
except Exception as error:
|
||||||
print("Error with the serveur")
|
print("Error with the serveur:", error)
|
||||||
|
|
||||||
|
|
||||||
def __spawn_elements(world: World):
|
def __spawn_elements(world: World):
|
||||||
|
@ -44,7 +43,7 @@ def __spawn_elements(world: World):
|
||||||
Ajoute les éléments du menu dans le monde.
|
Ajoute les éléments du menu dans le monde.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
world.new_entity().set(SpriteBundle("background.jpg", -5))
|
world.new_entity().set(SpriteBundle("background.png", -5))
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
TextBundle(
|
TextBundle(
|
||||||
"Quel est votre pseudo ?",
|
"Quel est votre pseudo ?",
|
||||||
|
@ -71,7 +70,7 @@ def __spawn_elements(world: World):
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
SpriteBundle(
|
SpriteBundle(
|
||||||
f"button_one_player.png",
|
f"button_one_player.png",
|
||||||
position=Vec2(render.WIDTH / 2, 600),
|
position=Vec2(render.WIDTH / 2, 800),
|
||||||
order=1,
|
order=1,
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
),
|
),
|
||||||
|
|
|
@ -8,7 +8,7 @@ from scenes import menu
|
||||||
|
|
||||||
|
|
||||||
def __spawn_elements(world: World):
|
def __spawn_elements(world: World):
|
||||||
world.new_entity().set(SpriteBundle("background.jpg", -5))
|
world.new_entity().set(SpriteBundle("background.png", -5))
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
TextBundle(
|
TextBundle(
|
||||||
"Merci,",
|
"Merci,",
|
||||||
|
@ -23,7 +23,7 @@ def __spawn_elements(world: World):
|
||||||
TextBundle(
|
TextBundle(
|
||||||
"Votre score a bien été envoyé !",
|
"Votre score a bien été envoyé !",
|
||||||
0,
|
0,
|
||||||
100,
|
80,
|
||||||
position=Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 75),
|
position=Vec2(render.WIDTH / 2, render.HEIGHT / 2 + 75),
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
),
|
),
|
||||||
|
|
|
@ -18,10 +18,12 @@ def __create_button(world: World, i: int, name: str):
|
||||||
"""
|
"""
|
||||||
Ajoute un bouton au monde.
|
Ajoute un bouton au monde.
|
||||||
"""
|
"""
|
||||||
|
if i == 0:
|
||||||
|
i = -1
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
SpriteBundle(
|
SpriteBundle(
|
||||||
f"button_{name}.png",
|
f"button_{name}.png",
|
||||||
position=Vec2(450 + 540 * i, render.HEIGHT / 2),
|
position=Vec2(render.WIDTH / 2 + 300 * i, 800),
|
||||||
order=1,
|
order=1,
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
),
|
),
|
||||||
|
@ -52,10 +54,10 @@ def __spawn_elements(world: World):
|
||||||
Ajoute les éléments du menu dans le monde.
|
Ajoute les éléments du menu dans le monde.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
world.new_entity().set(SpriteBundle("background.jpg", -5))
|
world.new_entity().set(SpriteBundle("background.png", -5))
|
||||||
world.new_entity().set(
|
world.new_entity().set(
|
||||||
TextBundle(
|
TextBundle(
|
||||||
"Voulez vous changer\nde mode de jeu ?",
|
"Voulez vous changer de mode de jeu ?",
|
||||||
0,
|
0,
|
||||||
position=Vec2(render.WIDTH / 2, 350),
|
position=Vec2(render.WIDTH / 2, 350),
|
||||||
origin=Vec2(0.5),
|
origin=Vec2(0.5),
|
||||||
|
|
Loading…
Reference in a new issue