Amélioration du bot pour qu'il tire dans la zone la plus éloigné du joueur #4

Merged
raphael merged 10 commits from smart-bot into main 2024-01-05 17:03:16 +00:00
Showing only changes of commit 155bb3bf31 - Show all commits

View file

@ -3,7 +3,6 @@ Le jeux principale.
"""
from enum import Enum
import math
from engine import Plugin, Scene
from engine.ecs import Entity, World
from engine.math import Vec2
@ -87,29 +86,29 @@ class Speed(int):
class Player1Score(int):
"""
Composant qui represente le score du joueur 1.
Ressource qui represente le score du joueur 1.
"""
class Player2Score(int):
"""
Composant qui represente le score du joueur 2.
Ressource qui represente le score du joueur 2.
"""
class Score:
"""
Composant qui represente les scores affichés a l'ecran.
Composant qui marque l'entité comme étant l'affichage du score.
"""
class StartAnimation(float):
"""
Composant qui represente un le moment auxquel on a lancé l'animation
Composant qui represente un le moment auxquel on a lancé l'animation du compte a rebours
"""
def __spawn_elements(world: World):
def __spawn_ellements(world: World):
"""
La fonction permet de initializer les ellements de la scene.
"""
@ -184,7 +183,6 @@ def __spawn_elements(world: World):
else None,
)
__spawn_ball(world)
__spawn_ball(world)
# Initialisation des scores
@ -202,21 +200,12 @@ def __spawn_elements(world: World):
)
def __angle_to_vec2(angle_degrees: float, magnitude: float):
# Convertir l'angle de degrés à radians
angle_radians = math.radians(angle_degrees)
# Calculer les coordonnées x et y
x = magnitude * math.cos(angle_radians)
y = magnitude * math.sin(angle_radians)
return Vec2(x, y)
def __spawn_ball(world: World):
# random angle
angle = random.randint(0, 360)
velocity = __angle_to_vec2(angle, 200)
"""
Fonction qui fait apparaitre une balle avec une velocitée aleatoire
"""
# random velocité
velocity = Vec2(2 * random.randint(100, 200), random.randint(100, 200))
# mouvement a droite ou a gauche
if random.randint(0, 1) == 0:
@ -239,6 +228,9 @@ def __spawn_ball(world: World):
def __bounce_on_player(a: Entity, b: Entity):
"""
Fonction qui decrit se qui se passe lorque la ball entre en collision avec un joueur
"""
if Player1 in b or Player2 in b:
speed = a[physics.Velocity].length
a[physics.Velocity] = a[physics.Velocity].normalized
@ -250,6 +242,9 @@ def __bounce_on_player(a: Entity, b: Entity):
def __bounce_on_left_wall(a: Entity, b: Entity):
"""
Fonction qui decrit se qui se passe lorque la ball entre en collision avec le mur de gauche
"""
if Ball in b:
world = a.world
world[Player2Score] += 1
@ -259,6 +254,9 @@ def __bounce_on_left_wall(a: Entity, b: Entity):
def __bounce_on_right_wall(a: Entity, b: Entity):
"""
Fonction qui decrit se qui se passe lorque la ball entre en collision avec le mur de droite
"""
if Ball in b:
world = a.world
world[Player1Score] += 1
@ -325,7 +323,7 @@ def __simulate_wall_position(entity: Entity, component_type: type):
def _update_bot(world: World):
"""
Test.
Fonction qui update les mouvement du bot
"""
ball_query = world.query(Position, physics.Velocity, physics.CollisionHandler)
if ball_query == set():
@ -373,6 +371,10 @@ def __animation(world: World, number: int):
def __update_animation(world: World):
"""
Fonction qui permet de mettre a jour l'animation du compte a rebours.
"""
for animation in world.query(StartAnimation):
time = world[Time] - animation[StartAnimation]
@ -390,7 +392,7 @@ def __update_animation(world: World):
__SCENE = Scene(
[__spawn_elements],
[__spawn_ellements],
[__update_move, __update_animation],
[],
)