package Characters; import java.util.ArrayList; import java.util.Arrays; import Objects.Snake; /** * Cet classe est la classe precurseur de tout les heritage pour creer un * personnage jouable. */ public class Personnage { public static int n; private int round; private int size = 0; private String name; /** *
la liste de toute les coordonnées en fonction de N. Si N = 2, * tout les deux tours, la taille du serpent augmente de 1. Si N = 3, * tous les 3 tours, ça va augmenter de 1. On peut l'ecrire comme * Round/N (les deux variables en int). *
Le premier index est la coordonnée de la tête et les autres
* sont les coordonnées de son corps.
*/
private ArrayList le constructor definie un arrayList pour {@link #coordinate}
* et defini n.
*
* @param n est une variable qui contient le nombre de tour avant
* l'augmentation de taille.
* @param coordinate est la variable qui contient les coordonnées
* qui sont placé par la suite dans {@link #coordinate}[0]}
*/
protected Personnage(String name, int[] coordinate) {
this.coordinate = new ArrayList cette fonction retourne la premiere coordonnée de la liste
* {@link #coordinate} qui la tête du personnage.
* @return la tête du personnage.
*/
public int[] getPrimaryCoordinate() {
return coordinate.get(0);
}
/**
* cette fonction retourne toute la liste
* {@link #coordinate} de coordonnée du serpent.
* @return toute la liste des coordonnées du serpent
*/
public ArrayList cette fonction est très pratique aggrandir le serpent
* car elle garde la derniere coordonnée et si on la fusionne
* avec {@link #increaseSnake()}, on peut l'utiliser
* ajouter la coordonnée pour justement l'aggrandir.
* @return garde la derniere coordonnée du serpent (sa queue)
*/
public int[] keepLatestCoordinate() {
return this.coordinate.get(getCoordinate().size()-1).clone();
}
/**
* ajoute au dernier index, la valeur en parametre, très utile
* en combinant avec {@link #keepLatestCoordinate()} pour aggrandir
* le serpent.
* @param coordinate ajout de la nouvelle coordonnée
*/
public void increaseSnake(int[] coordinate) {
this.coordinate.add(coordinate);
}
/**
* modifie toute la liste {@link #coordinate} pour deplacer tout le
* serpent.
* @param mouvements le mouvement utilisé pour deplacer le serpent
*/
public void moveSnake(Mouvements mouvements) {
int[] oldHeadPosition = getPrimaryCoordinate().clone();
for (int i = this.coordinate.size() - 1; i > 0; i--) {
this.coordinate.set(i, this.coordinate.get(i - 1).clone());
}
mouvements.editCoordinate(oldHeadPosition);
this.coordinate.set(0, oldHeadPosition);
}
public String getName() {
return name;
}
public Mouvements getMouvement(Integer keys) {
switch (keys) {
case 0x77: return Mouvements.HAUT; // w
case 0x73: return Mouvements.BAS; // s
case 0x61: return Mouvements.GAUCHE; // a
case 0x64: return Mouvements.DROITE; // d
case null: return null;
default: return null;
}
}
}