diff --git a/game/assets/FiraSans-Bold.ttf b/game/assets/FiraSans-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..e3593fb0f3bd412542237820f34fbe74308bfada
Binary files /dev/null and b/game/assets/FiraSans-Bold.ttf differ
diff --git a/game/src/fight.rs b/game/src/fight.rs
new file mode 100644
index 0000000000000000000000000000000000000000..93b9e4fd62144d8ae6716ed83a7068be136c5d50
--- /dev/null
+++ b/game/src/fight.rs
@@ -0,0 +1,4 @@
+use bevy::prelude::*;
+
+use super::{despawn_screen,  GameState,  };
+
diff --git a/game/src/game.rs b/game/src/game.rs
index 882f9a3fd4e8e047c93f1cf2715ca6debe9b83a4..b448ebeef1ca3eb63e15010ab8559abb4fe879cb 100644
--- a/game/src/game.rs
+++ b/game/src/game.rs
@@ -1,10 +1,11 @@
-use std::collections::btree_map::Keys;
-
+//use std::collections::btree_map::Keys;
+use bevy::window::PrimaryWindow;
 use bevy::prelude::*;
 use rand::Rng;
 
+const ENTITY_SIZE: f32 = 50.0;
 
-use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
+use super::{despawn_screen,  GameState,  };
 
     // This plugin will contain the game. In this case, it's just be a screen that will
     // display the current settings for 5 seconds before returning to the menu
@@ -12,12 +13,17 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
 
     impl Plugin for GamePlugin {
         fn build(&self, app: &mut App) {
-            app.add_systems(OnEnter(GameState::Game), (game_setup ,spawn_enemies))
-                .add_systems(Update, game.run_if(in_state(GameState::Game)))
+            app
+                .add_systems(OnEnter(GameState::Game), (game_setup ,spawn_enemies))
+                .add_systems(Update, 
+                    (attack_system.run_if(in_state(GameState::Game)),
+                    restrain_movement.run_if(in_state(GameState::Game))
+                    ,game.run_if(in_state(GameState::Game))))
+                //.add_system(Update, restrain_movement)
                 .add_systems(OnExit(GameState::Game), (
-                    despawn_game::<Player>,
-                    despawn_game::<Enemy>,
-                    despawn_game::<OnGameScreen>,
+                    despawn_screen::<Player>,
+                    despawn_screen::<Enemy>,
+                    despawn_screen::<OnGameScreen>,
                 ));
         }
     }
@@ -30,9 +36,6 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
     #[derive(Resource, Deref, DerefMut)]
     struct GameTimer(Timer);
 
-    #[derive(Component)]
-    struct Player;
-
     #[derive(Component)]
     struct Enemy;
 
@@ -43,13 +46,19 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
         height: f32,
     }
 
+
+    #[derive(Component)]
+    pub struct Player{
+        collision_box: CollisionBox,
+        speed: f32,
+    }
+
     #[derive(Component)]
     struct CombatText;
-    
-    
-    fn game_setup(mut commands: Commands, 
+
+    fn game_setup(
+        mut commands: Commands, 
         asset_server: Res<AssetServer>,
-        mut map_query: Query<&Transform, With<Player>>
     ){
 
         let map_texture = asset_server.load("mapdebut.png");
@@ -81,10 +90,16 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
             texture: texture,
             ..default()
         })
-        .insert(Player);
+        .insert(Player {
+            collision_box: CollisionBox{ width: ENTITY_SIZE, height: ENTITY_SIZE},
+            speed: 100.0,
+        });
     }
 
-    fn spawn_enemies(mut commands: Commands, asset_server: Res<AssetServer>, mut materials: ResMut<Assets<ColorMaterial>>) {
+    fn spawn_enemies(
+        mut commands: Commands, 
+        asset_server: Res<AssetServer>, 
+    ) {
         let enemy_texture = asset_server.load("enemy.png");
     
         // Définir le nombre maximum d'ennemis
@@ -147,13 +162,15 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
         mut player_query: Query<&Transform, With<Player>>,
         mut enemy_query: Query<&Transform, With<Enemy>>,
         combat_text_query: Query<Entity, With<CombatText>>, // Query to handle existing combat texts
+        mut game_state: ResMut<NextState<GameState>>,
     ) {
         // Check if the player is near an enemy to show the combat text
-        for (player_transform) in player_query.iter_mut() {
+        for player_transform in player_query.iter_mut() {
             let mut in_combat = false;
-            for (enemy_transform) in enemy_query.iter_mut() {
+            for enemy_transform in enemy_query.iter_mut() {
                 if player_transform.translation.distance(enemy_transform.translation) < 60.0 { // Adjust this value based on the size of your collision box
                     in_combat = true;
+                    game_state.set(GameState::Fight);
                     break;
                 }
             }
@@ -185,8 +202,32 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
         }
     }
     
-    fn despawn_game<T: Component>(to_despawn: Query<Entity, With<T>>, mut commands: Commands) {
-        for entity in &to_despawn {
-            commands.entity(entity).despawn_recursive();
+    pub fn restrain_movement(
+        mut characters: Query<(&mut Transform, &Player)>,
+        window_query: Query<&mut Window, With<PrimaryWindow>>,
+    ) {
+        for (mut transform, player) in &mut characters {
+            //let window = window_query.get_single().unwrap();
+            let half_size =  player.collision_box.width / 2.0;
+            let x_min: f32 = -600.0 / 2.0 + half_size;
+            let x_max: f32 = 600.0 / 2.0 - half_size;
+            let y_min: f32 = -600.0 / 2.0 + half_size;
+            let y_max = 600.0 / 2.0 - half_size;
+    
+            let mut translation: Vec3 = transform.translation;
+            if translation.x < x_min {
+                translation.x = x_min;
+            } else if translation.x > x_max {
+                translation.x = x_max;
+            }
+    
+            if translation.y < y_min {
+                translation.y = y_min;
+            } else if translation.y > y_max {
+                translation.y = y_max;
+            }
+    
+            transform.translation = translation;
         }
     }
+    
diff --git a/game/src/main.rs b/game/src/main.rs
index 5572ac7154bab77109ead089ece7c756993e4991..53f0138b5db869a58831e23e4e768c8ebb70a898 100644
--- a/game/src/main.rs
+++ b/game/src/main.rs
@@ -18,6 +18,7 @@ enum GameState {
     Menu,
     Game,
     Fight,
+    GameOver,
 }
 
 // One of the two settings that can be set through the menu. It will be a resource in the app
diff --git a/game/src/menu.rs b/game/src/menu.rs
index f0349fcf99d6a69454949f73b6688b3ca7562515..5930e7102f5a5119be036041441847b06e20e645 100644
--- a/game/src/menu.rs
+++ b/game/src/menu.rs
@@ -1,5 +1,5 @@
 use bevy::{app::AppExit, prelude::*};
-use bevy::{prelude::*, window::WindowResized};
+//use bevy::{prelude::*, window::WindowResized};
 use bevy::{window::PrimaryWindow};
 
     use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
@@ -206,7 +206,7 @@ use bevy::{window::PrimaryWindow};
                         // Display the game name
                         parent.spawn(
                             TextBundle::from_section(
-                                "Poke Profs\nMenu",
+                                "Poke Profs\n",
                                 TextStyle {
                                     font_size: 80.0,
                                     color: TEXT_COLOR,