initial commit let's droid dance.
This commit is contained in:
commit
ed2b1b152d
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "PaintDroid"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Auteur <Courriel@nom.domaine.tld"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
207
Readme.md
Normal file
207
Readme.md
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
# Projet DancingDroids
|
||||||
|
|
||||||
|
/!\ Attention sujet non fini!!! prevoir des changements /!\
|
||||||
|
|
||||||
|
Dans ce projet nous allons réaliser un jeu joué par l'ordinateur dans
|
||||||
|
un premier temps depuis un fichier predefini.
|
||||||
|
|
||||||
|
## Groupes
|
||||||
|
|
||||||
|
Compositions des groupes maximum 3 personnes, tentez de pas vous mettre à deux personnes
|
||||||
|
très à l'aise le but de se projet de de faire coder et progresser tout le monde. ;)
|
||||||
|
|
||||||
|
## Rendu
|
||||||
|
|
||||||
|
A rendre pour dans 2 semaines!
|
||||||
|
|
||||||
|
- L2-A1: 20 octobre
|
||||||
|
- L2-A2: 27 octobre
|
||||||
|
- L2-B1: 23 octobre
|
||||||
|
- L2-B2: 30 octobre
|
||||||
|
|
||||||
|
## Partie obligatoire
|
||||||
|
|
||||||
|
Afin d'avoir au moins 10 il est neccessaire de faire toutes les parties indispensables.
|
||||||
|
C'est à dire TOUTE la version 0.1.0. J'incite cependant tout le monde a tenter des
|
||||||
|
améliorations une fois une version fonctionelle.
|
||||||
|
|
||||||
|
Le rendu sera un fork du projet versionné sous git. Pour ce faire vous
|
||||||
|
pouvez forker ce dépot et faire vos contributions dans votre fork avec votre groupe.
|
||||||
|
|
||||||
|
A vous de gérer les droits pour pouvoir facilement editer et push a deux. Les dépots seront
|
||||||
|
publiques, mais je veillerais a ce que vous n'ayez pas de plaggiat personnellement. :)
|
||||||
|
|
||||||
|
L'entre-aide est tolérée surtout pour les bonus! Happy hacking!
|
||||||
|
|
||||||
|
## Version 0.1.0 Déplacements et collisions fonctionnelles
|
||||||
|
|
||||||
|
## Deplacement orientation
|
||||||
|
|
||||||
|
Dans ce jeu des robots vont pouvoir se déplacer dans un espace en deux
|
||||||
|
dimensions. A chaque tour un robot executera un ordre les ordres concistent en
|
||||||
|
effectuer une rotation à droite ou à gauche ou avancer ou ne rien faire!
|
||||||
|
|
||||||
|
> Conseil: Deux type `enum` vous serons utile! ;) Une pour l'orientation, une pour
|
||||||
|
> le les instructions!
|
||||||
|
|
||||||
|
Dans le fichier d'instructions vous aurrez les caractères suivants possibles:
|
||||||
|
|
||||||
|
- L: Oriente le robot de 90 degrée à gauche par exemple passe de orientation: N à W
|
||||||
|
- R: Oriente le robot de 90 degrée à droite par exemple passe de orientation: N à E
|
||||||
|
- F: Avance dans le sens de l'orientation d'une case
|
||||||
|
|
||||||
|
## Collisions
|
||||||
|
|
||||||
|
En cas de collision avec un autre robot lors d'un déplacement le robot devra
|
||||||
|
dire sur la sortie standard:
|
||||||
|
|
||||||
|
Cas des collisions: Faire dire `"Robot ID<numId> Collision en (x, y)"`
|
||||||
|
|
||||||
|
Format du fichier definisant le monde:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
5 5 // X_max Y_max
|
||||||
|
1 1 N // position du robot en x=1 y=1 orientation = nord
|
||||||
|
FLLFRF
|
||||||
|
|
||||||
|
3 2 S // position du robot 2 x=3 y=2 orientation=South
|
||||||
|
FFLFRRF
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Pour representer:
|
||||||
|
|
||||||
|
- un robot une simple structure suffira.
|
||||||
|
- La structure pour contenir les robots pourras être un `vec<Robot>`
|
||||||
|
|
||||||
|
### Conclusion version 0.1.0
|
||||||
|
|
||||||
|
Dans certe première itération, vous devrez pouvoir faire la simulation des robots,
|
||||||
|
depuis un fichier d'instruction, et afficher a la fin leurs positions finales.
|
||||||
|
|
||||||
|
#### Tests
|
||||||
|
|
||||||
|
A venir
|
||||||
|
|
||||||
|
## Version 0.2.0 Affichage implementation de Display
|
||||||
|
|
||||||
|
Dans cette version on va écrire du code pour afficher la positions des robots et
|
||||||
|
dessiner la grille.
|
||||||
|
|
||||||
|
Vous devrez pouvoir dessiner quelque chose comme cela en partant de la grille donnée en exemple plus haut
|
||||||
|
dans votre terminal:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
Terrain { x_max = 5; y_max = 5 }
|
||||||
|
Robots [
|
||||||
|
{ id = 0, x = 1; y = 1; orientation: North },
|
||||||
|
{ id = 1; x = 3; y = 2; orientation: South },
|
||||||
|
]
|
||||||
|
Etat initial
|
||||||
|
============================
|
||||||
|
5 . . . . . .
|
||||||
|
4 . . . . . .
|
||||||
|
3 . . . . . .
|
||||||
|
2 . . . ⬇ . .
|
||||||
|
1 . ⬆ . . . .
|
||||||
|
0 . . . . . .
|
||||||
|
0 1 2 3 4 5
|
||||||
|
Etat final
|
||||||
|
=============================
|
||||||
|
5 . . . . . .
|
||||||
|
4 . . . . . .
|
||||||
|
3 . . . . . .
|
||||||
|
2 . . . . . .
|
||||||
|
1 . ➡ . . . .
|
||||||
|
0 . . . ⬅ . .
|
||||||
|
0 1 2 3 4 5
|
||||||
|
```
|
||||||
|
|
||||||
|
Libre a vous d'adapter l'affichage tant que cela reste lisible.
|
||||||
|
|
||||||
|
Pour réaliser cela on peut implementer un trait pour nos structures qui s'appelle
|
||||||
|
`Display` c'est un peu comme un contrat, qui garanti que si une structure,
|
||||||
|
l'implemente alors on peut avoir une representation humaine sous forme de `String`.
|
||||||
|
|
||||||
|
Vous pouvez implementer aussi `Debug` pour vous faciliter la lecture en debuggant
|
||||||
|
votre code.
|
||||||
|
|
||||||
|
## version 0.3.0 : un peu d'aléatoire
|
||||||
|
|
||||||
|
Programmer ce qui est neccessaire pour que a chaque *tick* de façon aléatoire un
|
||||||
|
robot avance sa liste d'instruction serait symbolisée par simplement aucune liste
|
||||||
|
d'instructions.
|
||||||
|
|
||||||
|
Programmer ce qui est neccessaire pour que a chaque *tick* de façon aléatoire un
|
||||||
|
robot avance sa liste d'instruction serait symbolisée par simplement aucune liste
|
||||||
|
d'instructions.
|
||||||
|
|
||||||
|
## version 0.4.0 : un peu de couleurs
|
||||||
|
|
||||||
|
A présent les robots lorsque ils se déplacent laissent une couleur sur les cases
|
||||||
|
qu'ils ont traversée, les couleurs sont determinées à partir de l'id d'un robot.
|
||||||
|
|
||||||
|
Les couleurs seront des couleurs affichables en terminal, à vous d'ecrire une
|
||||||
|
fonction qui va des id vers les couleurs. indice: fonction de hashage, trait `Hash`.
|
||||||
|
|
||||||
|
Une couleur se degrade progressivement sur 5 tours et disparait elle reste destructrice jusque a
|
||||||
|
sa disparition totale.
|
||||||
|
|
||||||
|
Si un robot traverse la couleur d'un autre robot il est mis hors service, il est
|
||||||
|
hors jeu pour le reste de la partie et sera symbolisé par `'🤖'` par exemple il
|
||||||
|
reste un element dans lequel les autres robots peuvent entrer en collision.
|
||||||
|
|
||||||
|
La collision entre deux robots n'implique pas de mise hors service.
|
||||||
|
|
||||||
|
Programmer ce qui est neccessaire pour que a chaque *tick* de façon aléatoire un
|
||||||
|
robot avance sa liste d'instruction serait symbolisée par simplement aucune liste
|
||||||
|
d'instructions.
|
||||||
|
|
||||||
|
Pour vous aider avec les couleurs vous pouvez utiliser la crate [termion](https://lib.rs/crates/termion)
|
||||||
|
ou [colored](https://crates.io/crates/colored).
|
||||||
|
|
||||||
|
## version 0.5.0 : Paralellization des Robot'z
|
||||||
|
|
||||||
|
A présent dans ce bonus, faites le neccessaire pour pouvoir avoir plusieurs robots
|
||||||
|
qui agisent en parallèlle, vous devrez découvrir l'usage des threads, channels,
|
||||||
|
`Mutex`, `Arc` ou bien utiliser une bibliothèque comme [Rayon](https://docs.rs/rayon/1.4.1/rayon/) qui abstrait cela.
|
||||||
|
|
||||||
|
Voici le chapitre du livre sur le sujet [FearLess concurrency](https://doc.rust-lang.org/book/ch16-00-concurrency.html).
|
||||||
|
|
||||||
|
Un petit exercice pour faire des threads est dans exercices/
|
||||||
|
|
||||||
|
## version 0.6.0 : De-Serialisation/Serialisation de l'etat du monde
|
||||||
|
|
||||||
|
Utilisez une bibliothèque comme [Serde](https://github.com/serde-rs/serde)
|
||||||
|
pour écrire sur un fichier l'etat des structures de données du jeu pour par
|
||||||
|
exemple arretter une partie en cas de `Ctrl-C`.
|
||||||
|
|
||||||
|
## Version 0.7.0 : Gestion du parsing rationnelle
|
||||||
|
|
||||||
|
Utilisez une bibliothèque de votre choix pour gérer le parsing le format de fichier des robots.
|
||||||
|
|
||||||
|
Telle que :
|
||||||
|
|
||||||
|
- [nom](https://github.com/Geal/nom)
|
||||||
|
- [pest](https://github.com/pest-parser/pest)
|
||||||
|
- [lalrpop](https://github.com/lalrpop/lalrpop)
|
||||||
|
|
||||||
|
## Version 0.8.0 : Industrialisation et lib de jeu vidéo
|
||||||
|
|
||||||
|
Choissisez une bibliothèque pour faire des jeux vidéo en Rust et faites vous plaisir
|
||||||
|
pour améliorer avec de la gestion des assets, 3D ou autre dans votre projet si vous en êtes
|
||||||
|
la je peux plus vous retenir.
|
||||||
|
|
||||||
|
Site pour choisir ses lib/framework de jeu: <https://arewegameyet.rs/>
|
||||||
|
|
||||||
|
Conseil de game-engine:
|
||||||
|
|
||||||
|
- [Bevy](https://bevyengine.org/)
|
||||||
|
- [Amethyst.rs](https://amethyst.rs/)
|
||||||
|
|
||||||
|
## Version 0.9.0 : Vous avez dit IA
|
||||||
|
|
||||||
|
Programmer ou entrainner une petite IA pour ce jeu. C'est pas simple c'est du gros
|
||||||
|
bonus. ;)
|
||||||
|
Le but d'une IA est de survivre en envoyant des commandes pour eviter d'être mise hors
|
||||||
|
service. Plusieurs IA devraient pouvoir jouer ensemble.
|
8
Two_robots.txt
Normal file
8
Two_robots.txt
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
|
||||||
|
5 5 // X_max Y_max
|
||||||
|
|
||||||
|
1 1 N // position du robot 2 en x=1 y=1 orientation=nord
|
||||||
|
FLLFRF // Liste d'instruction du robot
|
||||||
|
|
||||||
|
3 2 S // position du robot 2 x=3 y=2 orientation=South
|
||||||
|
FFLFRRF
|
3
src/main.rs
Normal file
3
src/main.rs
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
println!("BeBoP?");
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user