ajout de la logique des règles de coups
This commit is contained in:
8
Makefile
8
Makefile
@@ -38,3 +38,11 @@ clean:
|
||||
|
||||
# === Recompile + run ===
|
||||
re: clean build run
|
||||
|
||||
# === Génération de la Javadoc ===
|
||||
DOC_DIR = doc
|
||||
javadoc:
|
||||
@echo "===> Génération de la Javadoc..."
|
||||
@mkdir -p $(DOC_DIR)
|
||||
@javadoc -d $(DOC_DIR) -sourcepath $(SRC_DIR) -subpackages fr.iut_fbleau.Avalam
|
||||
@echo "✔ Javadoc générée dans $(DOC_DIR)/"
|
||||
|
||||
64
README.md
64
README.md
@@ -10,6 +10,70 @@ Dans un second temps, on fera des bots le plus efficace possible (probablement u
|
||||
|
||||
Le jeu de notre groupe est **Avalam**.
|
||||
|
||||
## Compilation et exécution
|
||||
|
||||
### Compilation
|
||||
```bash
|
||||
make build
|
||||
```
|
||||
|
||||
### Exécution
|
||||
```bash
|
||||
make run
|
||||
```
|
||||
|
||||
### Nettoyage
|
||||
```bash
|
||||
make clean
|
||||
```
|
||||
|
||||
### Recompiler et exécuter
|
||||
```bash
|
||||
make re
|
||||
```
|
||||
|
||||
### Générer la Javadoc
|
||||
```bash
|
||||
make javadoc
|
||||
```
|
||||
|
||||
## Architecture du projet
|
||||
|
||||
### Structure des classes principales
|
||||
|
||||
- **`AvalamBoard`** : Implémentation du plateau de jeu conforme à l'API `AbstractBoard`
|
||||
- Gère l'état du plateau (grille 9x9)
|
||||
- Valide les règles d'Avalam
|
||||
- Applique et annule les coups
|
||||
- Détecte la fin de partie et calcule le résultat
|
||||
|
||||
- **`AvalamPly`** : Représente un coup dans le jeu
|
||||
- Stocke les coordonnées de départ et d'arrivée
|
||||
- Stocke la hauteur de la tour source (pour l'annulation)
|
||||
|
||||
- **`Tower`** : Représente une tour de pions
|
||||
- Stocke la couleur du sommet et la hauteur
|
||||
|
||||
- **`Color`** : Énumération des couleurs des joueurs
|
||||
- COLOR1 (Jaune) et COLOR2 (Rouge)
|
||||
|
||||
### Logique du jeu
|
||||
|
||||
Le plateau est représenté par une grille 9x9 où chaque case contient :
|
||||
- `null` : case vide (trou)
|
||||
- `ArrayList<Integer>` : tour de pions (chaque Integer = 1 pour PLAYER1, 2 pour PLAYER2)
|
||||
|
||||
### Règles implémentées
|
||||
|
||||
- ✅ Validation des limites du plateau
|
||||
- ✅ Vérification que la case source n'est pas vide
|
||||
- ✅ Vérification que la case destination n'est pas vide (pas de trou)
|
||||
- ✅ Vérification que la destination est voisine (horizontal, vertical ou diagonal)
|
||||
- ✅ Vérification que la hauteur totale après déplacement ≤ 5
|
||||
- ✅ Déplacement de toute la pile (pas partiel)
|
||||
- ✅ Détection de fin de partie (plus aucun coup possible)
|
||||
- ✅ Calcul du résultat (nombre de tours possédées par chaque joueur)
|
||||
|
||||
## Présentation [Avalam](https://escaleajeux.fr/?principal=/jeu/avaxl?)
|
||||
|
||||
Sur un plateau de jeu, les joueurs disposent de 24 pions chacun. Le but est de créer de petites tours avec son pion de couleur au-dessus. Pour ce faire, chaque joueur déplace son pion sur une tour ou déplace une tour sur un autre pion. La personne ayant le plus de pions sur le dessus des tours gagne.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
129
fr/iut_fbleau/Avalam/AvalamPly.java
Normal file
129
fr/iut_fbleau/Avalam/AvalamPly.java
Normal file
@@ -0,0 +1,129 @@
|
||||
package fr.iut_fbleau.Avalam;
|
||||
|
||||
import fr.iut_fbleau.GameAPI.AbstractPly;
|
||||
import fr.iut_fbleau.GameAPI.Player;
|
||||
|
||||
/**
|
||||
* Représente un coup dans le jeu Avalam.
|
||||
* Un coup consiste à déplacer une tour de la position (xFrom, yFrom)
|
||||
* vers la position (xTo, yTo).
|
||||
*
|
||||
* @author AMARY Aurelien, DICK Adrien, FELIX-VIMALARATNAM Patrick, RABAN Hugo
|
||||
* @version 1.0
|
||||
*/
|
||||
public class AvalamPly extends AbstractPly {
|
||||
/** Coordonnée X de la case source */
|
||||
private int xFrom;
|
||||
/** Coordonnée Y de la case source */
|
||||
private int yFrom;
|
||||
/** Coordonnée X de la case destination */
|
||||
private int xTo;
|
||||
/** Coordonnée Y de la case destination */
|
||||
private int yTo;
|
||||
/** Hauteur de la tour source (utilisée pour l'annulation de coup) */
|
||||
private int sourceHeight;
|
||||
|
||||
/**
|
||||
* Constructeur par défaut d'un coup Avalam.
|
||||
* La hauteur de la source sera définie automatiquement lors de l'application du coup.
|
||||
*
|
||||
* @param joueur Le joueur qui effectue le coup
|
||||
* @param xFrom Coordonnée X de la case source
|
||||
* @param yFrom Coordonnée Y de la case source
|
||||
* @param xTo Coordonnée X de la case destination
|
||||
* @param yTo Coordonnée Y de la case destination
|
||||
*/
|
||||
public AvalamPly(Player joueur, int xFrom, int yFrom, int xTo, int yTo) {
|
||||
super(joueur);
|
||||
this.xFrom = xFrom;
|
||||
this.yFrom = yFrom;
|
||||
this.xTo = xTo;
|
||||
this.yTo = yTo;
|
||||
this.sourceHeight = -1; // Sera défini lors du doPly
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructeur avec hauteur de la source spécifiée.
|
||||
* Utilisé principalement pour l'annulation de coups.
|
||||
*
|
||||
* @param joueur Le joueur qui effectue le coup
|
||||
* @param xFrom Coordonnée X de la case source
|
||||
* @param yFrom Coordonnée Y de la case source
|
||||
* @param xTo Coordonnée X de la case destination
|
||||
* @param yTo Coordonnée Y de la case destination
|
||||
* @param sourceHeight Hauteur de la tour source avant le déplacement
|
||||
*/
|
||||
public AvalamPly(Player joueur, int xFrom, int yFrom, int xTo, int yTo, int sourceHeight) {
|
||||
super(joueur);
|
||||
this.xFrom = xFrom;
|
||||
this.yFrom = yFrom;
|
||||
this.xTo = xTo;
|
||||
this.yTo = yTo;
|
||||
this.sourceHeight = sourceHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la coordonnée X de la case source.
|
||||
*
|
||||
* @return La coordonnée X de la case source
|
||||
*/
|
||||
public int getXFrom() {
|
||||
return xFrom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la coordonnée Y de la case source.
|
||||
*
|
||||
* @return La coordonnée Y de la case source
|
||||
*/
|
||||
public int getYFrom() {
|
||||
return yFrom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la coordonnée X de la case destination.
|
||||
*
|
||||
* @return La coordonnée X de la case destination
|
||||
*/
|
||||
public int getXTo() {
|
||||
return xTo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la coordonnée Y de la case destination.
|
||||
*
|
||||
* @return La coordonnée Y de la case destination
|
||||
*/
|
||||
public int getYTo() {
|
||||
return yTo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retourne la hauteur de la tour source.
|
||||
*
|
||||
* @return La hauteur de la tour source, ou -1 si non définie
|
||||
*/
|
||||
public int getSourceHeight() {
|
||||
return sourceHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Définit la hauteur de la tour source.
|
||||
* Cette méthode est appelée automatiquement lors de l'application du coup.
|
||||
*
|
||||
* @param height La hauteur de la tour source
|
||||
*/
|
||||
public void setSourceHeight(int height) {
|
||||
this.sourceHeight = height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "AvalamPly{" +
|
||||
"joueur=" + getPlayer() +
|
||||
", from=(" + xFrom + "," + yFrom + ")" +
|
||||
", to=(" + xTo + "," + yTo + ")" +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user