---
# System prepended metadata

title: Projet WCS JAVA Lyon 05-2023

---

# 1 - Développement d'un jeu de stratégie spatial :space_invader: 

## Description 
Vous devez concevoir et développer un jeu de stratégie spatial simplifié. 
Le jeu doit permettre aux joueurs de construire et de gérer des colonies spatiales, de collecter des ressources et de s'engager dans des batailles interstellaire avec d'autres joueurs.

## Exigences fonctionnelles 

### Interface utilisateur : 
Concevez une interface utilisateur intuitive et attrayante permettant aux joueurs de naviguer facilement dans le jeu, de gérer leurs colonies et de prendre des décisions stratégiques.
### Construction de colonies : 
Les joueurs doivent pouvoir construire des colonies spatiales en dépensant des ressources et en utilisant des emplacements disponibles. Chaque colonie peut générer des ressources au fil du temps.
### Collecte de ressources : 
Les colonies doivent être capables de collecter différentes ressources, telles que des matériaux de construction, de l'énergie, etc. Les joueurs doivent pouvoir allouer les ressources pour maximiser la production.
### Recherche et développement : 
Les joueurs doivent pouvoir investir des ressources dans la recherche et le développement de nouvelles technologies pour améliorer les performances de leurs colonies et de leurs vaisseaux spatiaux.
### Flottes de vaisseaux spatiaux :
Les joueurs peuvent construire des vaisseaux spatiaux pour explorer d'autres planètes, attaquer des colonies ennemies ou transporter des ressources. Les vaisseaux doivent avoir des attributs tels que la vitesse, la capacité de cargaison, etc.
### Batailles spatiales : 
Les joueurs doivent pouvoir engager des batailles avec d'autres joueurs pour défendre leurs colonies ou conquérir de nouvelles planètes. 
Les résultats des batailles doivent être calculés en fonction des attributs des vaisseaux spatiaux et des stratégies utilisées.
### Diplomatie et alliances :
Les joueurs doivent pouvoir former des alliances avec d'autres joueurs, établir des relations diplomatiques, conclure des traités et coordonner des attaques conjointes contre des adversaires communs.
### Gestion du temps :
* **Système de temps réel :** Le jeu doit comporter un système de temps réel où les actions des joueurs, telles que la collecte de ressources, la construction de colonies ou l'envoi de vaisseaux spatiaux, prennent du temps à se produire.
* **Temps de production et de recherche :** Les joueurs devront attendre un certain laps de temps pour que les constructions, la recherche technologique et d'autres activités se terminent.
* **Stratégie de gestion du temps :** Les joueurs devront planifier et coordonner leurs actions en fonction du temps nécessaire pour accomplir chaque tâche, ce qui ajoute une dimension stratégique à leur gameplay.
### Classement des joueurs : 
Affichez un classement des joueurs en fonction de leurs performances dans le jeu, telles que le nombre de colonies, les ressources collectées, les batailles gagnées, etc.

### Commerce & échange (optionel):
* **Mécanisme de commerce interstellaire :** Les joueurs doivent pouvoir établir des routes commerciales avec d'autres joueurs pour échanger des ressources rares, des technologies ou des vaisseaux spatiaux. Ils peuvent **négocier avec d'autres joueurs** les termes de l'échange et fixer les prix des ressources.
* **Marché spatial :** Mettez en place un marché où les joueurs peuvent proposer leurs ressources ou vaisseaux spatiaux à la vente. Les autres joueurs peuvent consulter les offres et effectuer des achats en fonction de leurs besoins et de leurs moyens.

### Événements aléatoires (optionel) :
Introduisez des phénomènes spatiaux tels que les supernovas, les trous noirs, les tempêtes solaires, etc., qui peuvent avoir un impact positif ou négatif sur les colonies, les ressources ou les vaisseaux spatiaux des joueurs.



# 2 - Développement d'un jeu de stratégie dans la Rome antique :hammer_and_wrench: 

## Description 
Dans ce projet, vous êtes chargés de concevoir et de développer un jeu de stratégie basé sur la Rome antique simplifié. 
Vous aurez l'opportunité de créer un empire romain virtuel en gérant des provinces, en collectant des ressources, en formant des légions et en engageant des batailles tactiques avec d'autres joueurs. 
Le jeu vous permettra d'explorer les aspects de la construction d'un empire, de la diplomatie, de la recherche technologique et de la conquête militaire. À travers une interface utilisateur attrayante, vous devrez créer une expérience immersive et stratégique pour les joueurs, tout en prenant en compte les principes de la Rome antique.


## Exigences fonctionnelles 

### Interface utilisateur : 
Concevez une interface utilisateur intuitive et attrayante permettant aux joueurs de naviguer facilement dans le jeu, de gérer leurs provinces et de prendre des décisions stratégiques.
### Construction de provinces :
Les joueurs doivent pouvoir construire et développer des provinces romaines en dépensant des ressources et en utilisant des emplacements disponibles. Chaque province peut générer des ressources au fil du temps.
### Collecte de ressources :
Les provinces doivent être capables de collecter différentes ressources, telles que le bois, la pierre, le fer, etc. Les joueurs doivent pouvoir allouer les ressources pour maximiser la production.
### Recherche et développement : 
Les joueurs doivent pouvoir investir des ressources dans la recherche et le développement de nouvelles technologies pour améliorer les performances de leurs provinces et de leurs légions.
### Formation de légions : 
Les joueurs peuvent recruter et former des légions romaines pour défendre leurs provinces, attaquer d'autres provinces ou participer à des campagnes militaires.
### Batailles tactiques :
Les joueurs doivent pouvoir engager des batailles tactiques avec d'autres joueurs, en utilisant leurs légions pour conquérir de nouvelles provinces ou défendre les leurs. Les résultats des batailles doivent être calculés en fonction des attributs des légions et des stratégies utilisées.
### Diplomatie et alliances :
Les joueurs doivent pouvoir former des alliances avec d'autres joueurs, établir des relations diplomatiques, conclure des traités et coordonner des attaques conjointes contre des adversaires communs.
### Gestion du temps :
* **Système de progression du temps :** Le jeu doit simuler le passage du temps, où les activités, telles que la collecte de ressources, la construction de provinces et la formation de légions, prennent du temps à se réaliser.
* **Temps de construction et de recrutement :** Les joueurs devront attendre un certain délai pour que les constructions et le recrutement des légions soient terminés.
* **Gestion du temps historiquement cohérente :** Le système de gestion du temps devrait refléter la réalité de l'époque, en prenant en compte les contraintes temporelles et logistiques des actions effectuées par l'Empire romain.
### Classement des joueurs : 
Affichez un classement des joueurs en fonction de leurs performances dans le jeu, telles que le nombre de provinces contrôlées, les ressources collectées, les batailles remportées, etc.
### Commerce & échange (optionel):
* **Économie romaine et échanges :** Les joueurs doivent pouvoir commercer avec d'autres provinces romaines en échange de ressources telles que le blé, le bois, le fer, etc. Ils peuvent **négocier avec d'autres joueurs** des accords commerciaux, établir des routes commerciales et organiser le transport sécurisé des marchandises.
* **Marché romain :** Créez un marché où les joueurs peuvent proposer leurs ressources à la vente et acheter celles dont ils ont besoin. Ils peuvent spécifier les quantités, les prix et les conditions de vente, tout en surveillant les offres des autres joueurs.

### Événements aléatoires (optionel):
Intégrez des événements historiques tels que les invasions barbares, les épidémies, les révoltes, etc., qui peuvent affecter les provinces, les légions ou les ressources des joueurs.


# 3 - Développement d'un jeu de stratégie durant conquête de l'Ouest :face_with_cowboy_hat: 

## Description : 
Vous êtes chargé de concevoir et de développer un jeu de stratégie à  l'époque de la conquête de l'Ouest. Le jeu doit permettre aux joueurs de construire et de gérer des colonies frontalières, d'exploiter des ressources naturelles, de recruter des cow-boys et de s'engager dans des affrontements avec d'autres joueurs.


## Exigences fonctionnelles :

### Interface utilisateur
Concevez une interface utilisateur immersive et conviviale permettant aux joueurs de naviguer facilement dans le jeu, de gérer leurs colonies frontalières et de prendre des décisions stratégiques.
### Construction de colonies frontalières : 
Les joueurs doivent pouvoir construire et développer des colonies frontalières en utilisant des ressources disponibles, tels que le bois, la pierre, etc. Chaque colonie peut générer des ressources au fil du temps.
### Exploitation des ressources :
Les colonies doivent être capables d'exploiter différentes ressources naturelles, telles que l'or, le bois, les animaux sauvages, etc. Les joueurs doivent pouvoir allouer les ressources pour maximiser la production.
### Recrutement de cow-boys :
Les joueurs peuvent recruter et former des cow-boys pour protéger leurs colonies, explorer de nouvelles terres et participer à des affrontements avec d'autres joueurs.
### Recherche et développement : 
Les joueurs doivent pouvoir investir des ressources dans la recherche et le développement de nouvelles technologies pour améliorer le développement de vos villes et des cow-boys.
### Affrontements avec d'autres joueurs :
Les joueurs doivent pouvoir engager des affrontements avec d'autres joueurs pour défendre leurs colonies ou conquérir de nouveaux territoires. Les résultats des affrontements doivent être calculés en fonction des attributs des cow-boys et des stratégies utilisées.
### Gestion du temps: 
* **Écoulement du temps :** Le jeu doit intégrer un système de passage du temps où les activités, telles que la collecte de ressources, la construction de colonies frontalières et la formation de cow-boys, prennent du temps à se réaliser.
* **Temps de développement et d'exploration :** Les joueurs devront attendre un certain temps pour que les constructions et les explorations de nouveaux territoires soient achevées.
* **Gestion du temps réaliste :** La gestion du temps doit être cohérente avec l'époque de la conquête de l'Ouest américain, en prenant en compte les distances, les saisons, les conditions météorologiques et les défis logistiques de l'époque.
### Classement des joueurs : 
Affichez un classement des joueurs en fonction de leurs performances dans le jeu, tels que le nombre de colonies, les ressources collectées, les victoires dans les affrontements, etc.


### Commerce et échanges (optionel): 
* **Économie de la frontière et échanges :** Les joueurs peuvent participer à des échanges commerciaux avec d'autres pionniers de la frontière. Ils peuvent échanger des ressources telles que le bétail, les outils, les armes à feu, etc., pour développer leurs colonies frontalières et répondre à leurs besoins.
* **Marché de la frontière :** Créez un marché où les joueurs peuvent proposer leurs ressources à la vente et acheter celles qui leur manquent. Ils peuvent **négocier avec d'autres joueurs** les prix, effectuer des transactions et surveiller les fluctuations de l'offre et de la demande sur le marché de la frontière.
### Événements aléatoires (optionnel): 
Intégrez des événements aléatoires, tels que les attaques de bandits, les découvertes de gisements d'or ou les épidémies, qui influenceront les décisions stratégiques des joueurs et ajoutent de la variété au gameplay.


# Mise en place du projet

## Maquette
Vous devez maquetter votre projet, pensez à utiliser des outils tel que [Figma](https://www.figma.com/)

1. **Compréhension du sujet :** 
- Familiarisez-vous avec le sujet spécifique du jeu de stratégie (spatial, romain, conquête de l'Ouest).
- Analysez les exigences fonctionnelles et les spécificités de chaque sujet.
- Identifiez les éléments clés tels que l'interface utilisateur, les fonctionnalités principales et les aspects visuels importants.

2. **Recherche et inspiration :**
- Effectuez une recherche sur le thème spécifique pour vous familiariser avec les éléments visuels, les styles graphiques et les motifs associés.
- Trouvez des références de jeux existants ou d'autres médias (livres, films, illustrations, etc.) liés au thème pour vous inspirer.
- Rassemblez des ressources graphiques (images, icônes, textures, etc.) qui peuvent être utilisées dans le processus de maquettage.

3. **Création de wireframes :**
- Commencez par créer des wireframes basés sur les exigences fonctionnelles. Définissez la disposition générale de l'interface utilisateur et la structure des différentes pages ou écrans.
- Utilisez Figma pour dessiner les wireframes en utilisant des formes simples pour représenter les différents éléments de l'interface (boutons, champs de texte, listes, etc.).
- Assurez-vous que les wireframes captent les principales interactions et les flux de l'utilisateur.

4. **Maquettage des écrans :**
- Utilisez les wireframes comme guide pour commencer à concevoir les écrans détaillés du jeu.
- Ajoutez des éléments visuels tels que des images, des icônes et des couleurs pour donner vie aux wireframes et créer une expérience visuelle cohérente.
- Organisez les différents composants de l'interface (barre de navigation, panneaux d'information, menus déroulants, etc.) de manière logique et intuitive.

5. **Interaction et animation :**
- Ajoutez des interactions et des animations aux maquettes pour rendre l'expérience utilisateur plus dynamique et immersive.
- Utilisez les fonctionnalités d'interaction de Figma pour simuler les transitions entre les écrans, les effets de survol ou les mouvements d'éléments interactifs.
- Testez les interactions pour vous assurer qu'elles fonctionnent de manière fluide et répondent aux besoins des utilisateurs.

6. **Feedback et itérations :**
- Partagez vos maquettes avec les membres de votre équipe ou vos pairs pour obtenir des retours et des suggestions d'amélioration.
- Itérez sur les maquettes en fonction des commentaires reçus, en ajustant les éléments visuels, la disposition et les interactions si nécessaire.

7. **Documentation et partage :**
- Documentez vos maquettes, en fournissant des annotations ou des notes pour expliquer les interactions et les fonctionnalités clés.
- Partagez vos maquettes avec les autres membres de l'équipe de développement, les clients ou les utilisateurs pour obtenir des retours supplémentaires avant de passer à la phase de développement.


N'oubliez pas d'adapter ce plan en fonction des besoins spécifiques de chaque sujet de jeu de stratégie. 
**Figma** est un outil de conception pour la création de maquettes interactives, mais d'autres outils tels que **Sketch**, **Adobe XD** ou **InVision** peuvent également être utilisés en fonction des préférences de l'équipe et des étudiants.

## Organisation
Mettre en place un vrais Workflow Git et respecter les bonnes pratiques *(Multibranch, Merge Request, etc ...)*.
:warning:  **Vous devez créer vos repo Github sur le compte de la Wild en public** :warning:

Définir vos Backlog, utiliser un logiciel de gestion tel que [trello](https://trello.com/fr) pour organiser votre projet.


1. **Analyse et planification :**
- Commencez par analyser les exigences du projet et les spécifications fonctionnelles.
- Établissez un plan détaillé en identifiant les tâches clés, les dépendances et les délais.
- Définissez des objectifs spécifiques pour chaque étape du projet.

2. **Répartition des tâches :**
- Assignez des tâches spécifiques à chaque membre de l'équipe en tenant compte de leurs compétences et de leurs intérêts.
- Assurez-vous d'équilibrer la charge de travail entre les membres de l'équipe.
- Fixez des échéances pour chaque tâche afin de garantir un rythme de progression régulier.

3. **Collaboration et communication :**
- Établissez des canaux de communication clairs pour permettre une collaboration efficace entre les membres de l'équipe.
- Utilisez des outils tels que Slack, Microsoft Teams ou Discord pour faciliter les échanges et les discussions.
- Planifiez des réunions régulières pour discuter des progrès, résoudre les problèmes et partager les mises à jour.

4. **Versionnage et gestion du code :**
- Utilisez le système de contrôle de version **GIT** (avec GIHUB), pour gérer le code source du projet.
- Créez des **branches distinctes pour chaque fonctionnalité** ou tâche afin de faciliter la gestion des modifications et des conflits.
- Effectuez des commits réguliers et des pushs vers le dépôt partagé pour maintenir une trace de l'historique du code.

5. **Tests et validation :**
-  Effectuez des tests réguliers pour vérifier que les fonctionnalités développées fonctionnent correctement et répondent aux exigences du projet.
- Mettez en place des mécanismes de validation et de **revue de code par les membres de l'équipe** pour garantir la qualité du travail réalisé.

6. **Documentation :**
- Documentez le code, les fonctionnalités développées et toute autre information pertinente pour faciliter la compréhension et la maintenance ultérieure du projet.
- Créez des guides d'utilisation ou des manuels pour les utilisateurs finaux, s'ils sont nécessaires.

7. **Itérations et ajustements :**
- Soyez prêts à apporter des ajustements en cours de route en fonction **des retours du formateur**, des tests et des évolutions du projet.
- Planifiez des cycles d'itération réguliers pour améliorer et peaufiner les fonctionnalités développées.

### GITHUB
* Créez le projet back-end à partir de [ce template](https://github.com/WildCodeSchool/spring-project-template)
* Créez le projet front-end à partir de [ce template](https://github.com/WildCodeSchool/angular-template)


## Contraintes techniques 

1. Utilisez **Spring Boot** pour développer le backend de l'application, en fournissant une architecture robuste et facilitant la gestion des dépendances.
2. Intégrez **Hibernate** comme ORM (Object-Relational Mapping) pour faciliter l'interaction avec la base de données et la manipulation des objets Java.
3. Implémentez **Spring Security** pour gérer l'authentification et l'autorisation des utilisateurs dans le jeu. Assurez-vous que seuls les utilisateurs authentifiés peuvent accéder aux fonctionnalités du jeu.
3. Utilisez **JWT** (JSON Web Tokens) pour gérer les mécanismes d'authentification stateless et sécurisés entre le frontend et le backend. Générez et validez les jetons JWT pour chaque requête d'utilisateur authentifié.
4. Développez le frontend de l'application en utilisant **Angular**.
4. Utilisez des appels **HTTP** pour communiquer entre le frontend et le backend, en utilisant les fonctionnalités d'Angular pour envoyer des requêtes et recevoir des réponses JSON.
5. Configurez et interagissez avec une base de données relationnelle à l'aide de Hibernate pour stocker les données des joueurs, telles que les informations des colonies, les ressources, etc.
6. Assurez-vous que l'interface utilisateur développée avec Angular est réactive, conviviale et compatible avec différentes tailles d'écran grâce à des techniques de **responsive design**.
7. Implémentez d/es fonctionnalités de sécurité telles que l'encodage des mots de passe, la protection contre les attaques **CSRF** (Cross-Site Request Forgery), etc., en utilisant les fonctionnalités fournies par Spring Security.
