import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; public class Controleur extends JFrame implements KeyListener { private Case[][] tableauCase; //Création d'un tableau pour stocker les cases du plateau de jeu private VuePlateau plateau; //Création d'une variable vue du plateau de jeu private int xHeros; //Création d'une variable coordonées x du héros private int yHeros; //Création d'une variable coordonées Y du héros private int points; //Création d'une variable points public Controleur(String typehero, int pvbase) { //Initialisation des coordonnées du héros et des points this.xHeros = 2; this.yHeros = 2; this.points = 0; //Création du tableau de cases et de vues de cases this.tableauCase = new Case[5][5]; VueCase[][] tabCase = new VueCase[5][5]; //Parcours du tableau de cases for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (i == this.xHeros && j == this.yHeros) { //Création d'une instance de la classe Heros pour le héros this.tableauCase[i][j] = new Heros(i, j, typehero, pvbase); //Création d'une vue de case pour le héros tabCase[i][j] = new VueCase(tableauCase[i][j]); this.add(tabCase[i][j]); } else { //Création d'une instance de la classe Case pour les autres cases Case c = new Case(i, j, "temp"); //Génération d'une case aléatoire this.tableauCase[i][j] = c.newRandomCase(i, j); //Création d'une vue de case pour la case aléatoire tabCase[i][j] = new VueCase(tableauCase[i][j]); this.add(tabCase[i][j]); } } } //Création de la vue du plateau en utilisant le tableau de vues de cases this.setLayout(new GridLayout(6,5)); this.plateau = new VuePlateau(tabCase); this.add(this.plateau); //Mise à jour de la vue du plateau avec les cases du tableau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); } } //Ajout du contrôleur en tant que KeyListener pour gérer les événements clavier this.addKeyListener(this); } private void rencontre(int xNew, int yNew) { int tempX = xHeros; int tempY = yHeros; int tempZ; VueCase[][] tabCase = new VueCase[5][5]; if (!this.tableauCase[xHeros][yHeros].rencontrer(this.tableauCase[xNew][yNew])) { //Vérifie si le héros peut rencontrer la case aux nouvelles coordonnées if (this.tableauCase[xHeros][yHeros].getArme().getValue() > 0) { //Vérifie si le héros a une arme et si sa valeur est supérieure à 0 if (this.tableauCase[xHeros][yHeros].getType().equals("berserker")){ if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armeglace") && this.tableauCase[xNew][yNew].getType().equals("monstrefeu")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; }else if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armefeu") && this.tableauCase[xNew][yNew].getType().equals("monstreglace")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else if (this.tableauCase[xHeros][yHeros].getArme().getValue()*2 > this.tableauCase[xNew][yNew].getPv()) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case tempZ=this.tableauCase[xNew][yNew].getPv(); //Réduit la valeur de l'arme du héros de la valeur des points de vie de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xHeros][yHeros].getArme().getValue()-tempZ/2,this.tableauCase[xHeros][yHeros].getArme().getType()); this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else { this.tableauCase[xNew][yNew].setPv(this.tableauCase[xNew][yNew].getPv() - (this.tableauCase[xHeros][yHeros].getArme().getValue())*2); //Réduit les points de vie de la case par la valeur de l'arme du héros this.tableauCase[xHeros][yHeros].setArme(0,"arme"); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } return; } } else if (this.tableauCase[xHeros][yHeros].getType().equals("tank")){ if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armeglace") && this.tableauCase[xNew][yNew].getType().equals("monstrefeu")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armefeu") && this.tableauCase[xNew][yNew].getType().equals("monstreglace")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else if (this.tableauCase[xHeros][yHeros].getArme().getValue()*0.8 > this.tableauCase[xNew][yNew].getPv()) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case tempZ=this.tableauCase[xNew][yNew].getPv(); //Réduit la valeur de l'arme du héros de la valeur des points de vie de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xHeros][yHeros].getArme().getValue()-tempZ*120/100,this.tableauCase[xHeros][yHeros].getArme().getType()); this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } }else { this.tableauCase[xNew][yNew].setPv(this.tableauCase[xNew][yNew].getPv() - (this.tableauCase[xHeros][yHeros].getArme().getValue())*80/100); //Réduit les points de vie de la case par la valeur de l'arme du héros this.tableauCase[xHeros][yHeros].setArme(0,"arme"); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } return; } } else { if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armeglace") && this.tableauCase[xNew][yNew].getType().equals("monstrefeu")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else if (this.tableauCase[xHeros][yHeros].getArme().getType().equals("armefeu") && this.tableauCase[xNew][yNew].getType().equals("monstreglace")) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else if (this.tableauCase[xHeros][yHeros].getArme().getValue() > this.tableauCase[xNew][yNew].getPv()) { // Vérifie si la valeur de l'arme du héros est supérieure aux points de vie de la case tempZ=this.tableauCase[xNew][yNew].getPv(); //Réduit la valeur de l'arme du héros de la valeur des points de vie de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xHeros][yHeros].getArme().getValue()-tempZ,this.tableauCase[xHeros][yHeros].getArme().getType()); this.tableauCase[xNew][yNew] = new Or(this.tableauCase[xNew][yNew].getPv() ,xNew ,yNew ); //Remplace la case par une case "Or" avec la valeur des points de vie //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); this.plateau.update(this.tableauCase[i][j], i, j); } } return; } else { this.tableauCase[xNew][yNew].setPv(this.tableauCase[xNew][yNew].getPv() - this.tableauCase[xHeros][yHeros].getArme().getValue()); //Réduit les points de vie de la case par la valeur de l'arme du héros this.tableauCase[xHeros][yHeros].setArme(0,"arme"); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } } return; } } } else { if (this.tableauCase[xNew][yNew].type.equals("or")) { //Vérifie si la case aux nouvelles coordonnées est de type "or" this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } if (this.tableauCase[xNew][yNew].type.equals("arme")) { //Vérifie si la case aux nouvelles coordonnées est de type "arme" if (this.tableauCase[xHeros][yHeros].getArme().getValue() < this.tableauCase[xNew][yNew].getValue()) { //Vérifie si la valeur de l'arme du héros est inférieure à la valeur de l'arme de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xNew][yNew].getValue(),"arme"); //Si c'est le cas, le héros récupère l'arme de la case this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //Met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } else { this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } if (this.tableauCase[xNew][yNew].type.equals("armeglace")) { //Vérifie si la case aux nouvelles coordonnées est de type "arme" if (this.tableauCase[xHeros][yHeros].getArme().getValue() < this.tableauCase[xNew][yNew].getValue()) { //Vérifie si la valeur de l'arme du héros est inférieure à la valeur de l'arme de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xNew][yNew].getValue(),"armeglace"); //Si c'est le cas, le héros récupère l'arme de la case this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //Met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } else { this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } if (this.tableauCase[xNew][yNew].type.equals("armefeu")) { //Vérifie si la case aux nouvelles coordonnées est de type "arme" if (this.tableauCase[xHeros][yHeros].getArme().getValue() < this.tableauCase[xNew][yNew].getValue()) { //Vérifie si la valeur de l'arme du héros est inférieure à la valeur de l'arme de la case this.tableauCase[xHeros][yHeros].setArme(this.tableauCase[xNew][yNew].getValue(),"armefeu"); //Si c'est le cas, le héros récupère l'arme de la case this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //Met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } else { this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //Met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } if (this.tableauCase[xNew][yNew].type.equals("potion")) { //Vérifie si la case aux nouvelles coordonnées est de type "potion" this.points += this.tableauCase[xNew][yNew].getValue(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getValue()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } if (this.tableauCase[xNew][yNew].type.equals("monstre")) { //Vérifie si la case aux nouvelles coordonnées est de type "monstre" if (this.tableauCase[xHeros][yHeros].getType().equals("berserker")){ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-(this.tableauCase[xNew][yNew].getPv())/2); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } }else{ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-this.tableauCase[xNew][yNew].getPv()); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } } if (this.tableauCase[xNew][yNew].type.equals("monstreglace")) { //Vérifie si la case aux nouvelles coordonnées est de type "monstre" if (this.tableauCase[xHeros][yHeros].getType().equals("berserker")){ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-(this.tableauCase[xNew][yNew].getPv())/2); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { Random rand = new Random(); int aleatoire = rand.nextInt(); if(aleatoire < 0){ aleatoire = -aleatoire; } if (aleatoire % 100 < 20){ System.out.println("Vous avez été gelé !"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } } else{ this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } }else{ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-this.tableauCase[xNew][yNew].getPv()); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { Random rand = new Random(); int aleatoire = rand.nextInt(); if(aleatoire < 0){ aleatoire = -aleatoire; } if (aleatoire % 100 < 20){ System.out.println("Vous avez été gelé !"); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } } else{ this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } } } if (this.tableauCase[xNew][yNew].type.equals("monstrefeu")) { //Vérifie si la case aux nouvelles coordonnées est de type "monstre" if (this.tableauCase[xHeros][yHeros].getType().equals("berserker")){ Random rand = new Random(); int aleatoire = rand.nextInt(); if(aleatoire < 0){ aleatoire = -aleatoire; } if (aleatoire % 100 < 25){ System.out.println("Vous avez été brulé !"); this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-(((this.tableauCase[xNew][yNew].getPv())/2)+(this.tableauCase[xHeros][yHeros].getPv()*20)/100)); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } else{ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-(this.tableauCase[xNew][yNew].getPv())/2); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } } else{ Random rand = new Random(); int aleatoire = rand.nextInt(); if(aleatoire < 0){ aleatoire = -aleatoire; } if (aleatoire % 100 < 25){ System.out.println("Vous avez été brulé !"); this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-((this.tableauCase[xNew][yNew].getPv())+(this.tableauCase[xHeros][yHeros].getPv()*20)/100)); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } else{ this.tableauCase[xHeros][yHeros].setPv(this.tableauCase[xHeros][yHeros].getPv()-(this.tableauCase[xNew][yNew].getPv())); //Réduit les points de vie du héros par la valeur des points de vie du monstre if (this.tableauCase[xHeros][yHeros].getPv() <= 0) { //Si les points de vie du héros sont inférieurs ou égaux à 0, affiche un message de Game Over et termine le jeu System.out.println("GameOver, votre score final est de : " + this.points); this.dispose(); } else { this.points += this.tableauCase[xNew][yNew].getPv(); //Ajoute la valeur de la case aux points du héros et met à jour la vue du plateau this.plateau.upPoint(this.tableauCase[xNew][yNew].getPv()); this.tableauCase[xNew][yNew] = this.tableauCase[xHeros][yHeros]; //Remplace la case par le héros this.tableauCase[xHeros][yHeros] = new Case(xHeros, yHeros, "temp").newRandomCase(xHeros, yHeros); //Génère une nouvelle case aléatoire à l'ancienne position du héros //On met à jour la vue du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); tabCase[i][j] = new VueCase(tableauCase[i][j]); tabCase[i][j].setLocation(i * 200, j * 200); tabCase[i][j].setSize(200, 200); this.add(tabCase[i][j]); } } //On met à jour les coordonnées du héros xHeros = xNew; yHeros = yNew; } } } } } } @Override public void keyTyped(KeyEvent e) { //Cette méthode est appelée lorsqu'une touche est tapée (enfoncée puis relâchée) sur le clavier } @Override public void keyPressed(KeyEvent e) { } @Override public void keyReleased(KeyEvent e) { //On récupère les coordonnées actuelles du héros int tempX = xHeros; int tempY = yHeros; if (e.getKeyCode() == KeyEvent.VK_RIGHT) { //Si la touche enfoncée est la flèche de droite tempX = xHeros; tempY = yHeros; if (tempY + 1 > 4) { //Vérifie si le déplacement vers la droite est possible System.out.println("Impossible d'aller plus à droite."); } else { this.rencontre(tempX, tempY + 1); //Appelle la méthode "rencontre" pour gérer la rencontre avec la case en bas //On met à jour l'affichage du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); } } } } if (e.getKeyCode() == KeyEvent.VK_LEFT) { //Si la touche enfoncée est la flèche de gauche tempX = xHeros; tempY = yHeros; if (tempY - 1 < 0) { //Vérifie si le déplacement vers la gauche est possible System.out.println("Impossible d'aller plus à gauche."); } else { this.rencontre(tempX, tempY - 1); //Appelle la méthode "rencontre" pour gérer la rencontre avec la case en haut //On met à jour l'affichage du plateau for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); } } } } if (e.getKeyCode() == KeyEvent.VK_UP) { //Si la touche enfoncée est la flèche du haut tempX = xHeros; tempY = yHeros; if (tempX - 1 < 0) { //Vérifie si le déplacement vers le haut est possible System.out.println("Impossible d'aller plus haut."); } else { this.rencontre(tempX - 1, tempY); //Appelle la méthode "rencontre" pour gérer la rencontre avec la case à gauche //On met à jour l'affichage du plat for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); } } } } if (e.getKeyCode() == KeyEvent.VK_DOWN) { //Si la touche enfoncée est la flèche du bas tempX = xHeros; tempY = yHeros; if (tempX + 1 > 4) { //Vérifie si le déplacement vers le bas est possible System.out.println("Impossible d'aller plus bas."); } else { this.rencontre(tempX + 1, tempY); //Appelle la méthode "rencontre" pour gérer la rencontre avec la case à droite //On met à jour l'affichage du plat for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { this.plateau.update(this.tableauCase[i][j], i, j); } } } } } }