Skip to content
Snippets Groups Projects
Commit 0901ccd7 authored by Villard PierreFrederic's avatar Villard PierreFrederic
Browse files

add some doc

parent a7cc3b5a
No related branches found
No related tags found
No related merge requests found
---
author: PF Villard
title: Le moteur de jeu
---
<!-- pandoc -N --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" -o MoteurDeJeu.html archiMoteurDeJeu.md -->
# Utilisation de la bibliothèque de moteur de jeu
Avant de lire ce document, il faut déjà comprendre l'[architecture du Moteur de jeu](./archiMoteurDeJeu.pdf).
## Création de décors
Il y a deux façon de créer un décors :
- Soit en utilisant un objet de la classe `ObjetMur` en le rajoutant au **monde** par `addMur(int x, int y, int dx, int dy)` avec $(x,y)$ la position du coin supérieur gauche du mur de dimension $dx \times dy$
- Soit en créant une classe héritant de `ObjetMur` et en l'ajoutant au **monde** par `addObjet(Objet monObjet)`.
Les éléments de décors, comme toutes les classes héritant de `Objet` ont une méthode `update()` qui permet de rajouter un comportement dynamique (Cf `ObjetMurDynamique`).
## Changement d'image
Pour changer l'image associée aux monstres ou aux héros, il suffit d'appeler la méthode `assignNewImage(String fileName)` de l'attribut `sprites` de l'objet. Exemple :
```
monMonde.balle.sprites.assignNewImage("hero2.png");
```
## Changement d'image pendant une collision
Pour changer l'aspect d'un héros, monstre ou mur lorsque une collision a lieu, il faut faire une classe fille et ré-écrire la méthode `public void draw(Graphics g)`en rajoutant quelque chose du type :
```
// si en collision affiche carre
if (collision==1) {
g.setColor(Color.red);
g.fillRect(tab[0],tab[1],tab[2],tab[3]);
}
```
Pour changer l'aspect du hero, il faut aussi créer une classe héritant de `Monde` afin de d'assigner à la construction la bonne classe pour `balle`.
## Changement de gravité
Pour changer la gravité, il faut changer la valeur de l'attribut `gravityValue` dans `MoteurPhysique`. Exemple :
```
moteurPhys.gravityValue=-0.08f;
```
Pour annuler la gravité et pouvoir se déplacer en **X** et en **Y** de la même façon, il faut mettre l'attribut `gravity` à `false`.
## Vue subjective
On parle de vue subjective lorsque l'on se place du point de vue du joueur. C'est-à-dire que si on se déplace, la géométrie du hero ne bouge pas, c'est le décors et les monstres qui bougent. Si la vu n'est pas subjective, le décors est fixe et ceux sont les monstres et le hero qui bougent.
La vue subjective peut être activé en changeant la valeur du booléen `Repere.isSubjective`.
## Boucle de jeu
La boucle de jeu est créée par défaut par la classe `BoucleDeJeu`. Pour gérer les événements du jeu, il est conseillé de créer une classe qui hérite de `BoucleDeJeu` en re-créant la méthode `public void lanceBouclePrincipale() throws Exception`.
Exemple de code pour gérer les collisions en fonction du type
```
switch (jeuPhysique.moteurPhys.monde.balle.collision)
{
case MONSTRE: System.out.println("Aie avec monstre numéro "+jeuPhysique.moteurPhys.current_monster_index);break;
case HERO: System.out.println("Copain !");break;
case DECORS: System.out.println("Pas mal avec mur numéro "+jeuPhysique.moteurPhys.current_wall_index);break;
default: break;
}
```
doc/UML.png

310 KiB

---
author: PF Villard
title: Architecture du moteur de jeu
---
<!-- pandoc -N --variable mainfont="Palatino" --variable sansfont="Helvetica" --variable monofont="Menlo" --variable fontsize=12pt --variable version=2.0 --pdf-engine=xelatex -o archiMoteurDeJeu.pdf archiMoteurDeJeu.md -->
![](uml.png)
Pour utiliser la bibliothèque de moteur de jeu, il faut adopter une architecture du type [Modèle-Vue-Contrôleur](https://fr.wikipedia.org/wiki/Modèle-vue-contrôleur). Il faut donc commencer par définir ces trois entités.
# Le Modèle
Il faut d'abord construire un **Monde** :
```
// Construction du monde
monMonde= new Monde();
```
Pour peupler ce monde, on a le choix entre des éléments de décors (`addMur()`), des monstres (`addMonstre()`) ou des personnages jouables (`addHero()`). Tous ces éléments sont paramétrisables (position, image, comportement, etc.)
Il faut alors rajouter un **moteur physique** pour gérer les règles du monde telles que les collisions, la gravité ou la façon de gérer la vitesse des éléments :
```
moteurPhys=new MoteurPhysique();
//On ajoute le monde au moteur
moteurPhys.monde=monMonde;
```
Là aussi, on peut changer les valeurs par défaut.
# La Vue
La vue correspond à l'affichage. C'est cette partie qui va gérer la fenêtre graphique :
```
affiche=new Afficheur(moteurPhys.monde);
```
# Le Contrôleur
Le contrôleur correspond dans notre cas à la gestion du clavier :
```
ControleurClavier cClavier=new ControleurClavier(true);
```
# La méthode principale
La méthode principale comprend la boucle de jeu :
```
BouclePrincipale maBoucle= new BouclePrincipale();
// Ajout du Contrôleur à le fenêtre
maBoucle.cClavier=cClavier;
// Ajout de la Vue au jeu
maBoucle.jeuPhysique.affiche=affiche;
// Ajout du Modèle à la boucle
maBoucle.jeuPhysique.moteurPhys=moteurPhys;
```
Une fois que tous ces éléments ont été définis, le jeu pourra se lancer par :
```
maBoucle.lanceBouclePrincipale();
```
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment