Projet d'Exploration Informatique Index du Forum
Projet d'Exploration Informatique
Les élèves de 6TT Informatique vous présentent leurs projets de fin d'études
 
Projet d'Exploration Informatique Index du ForumFAQRechercherS’enregistrerConnexion

:: Rapport d'activité [5] ::

 
Poster un nouveau sujet   Répondre au sujet    Projet d'Exploration Informatique Index du Forum -> Les projets de l'année 2018-2019 ->
Sujet précédent :: Sujet suivant  
Auteur Message
garydaneels
6TT-2018

Hors ligne

Inscrit le: 16 Oct 2017
Messages: 7
Localisation: belgique
Masculin

MessagePosté le: Mer 24 Oct - 22:11 (2018)    Sujet du message: Rapport d'activité [5] Répondre en citant

Bonjour aujourd'hui je vais vous montrez le code qui me permet de jouer avec les déplacements des ennemis en fonction des positions et des HP de mon héros.


Voici le Code complet que j'utilise pour touts les déplacements.

ce code comprend;
//Classe mère dont héritent les différents ennemis

//mouvement aléatoire de l'ennemi (s'il est loin du héros)
//mouvement de l'ennemi vers le héros (s'il en est proche)
//fuite de l'ennemi loin du héros (si sa vie est faible) //en haut à gauche, droite, haut, bas
//méthode permettant de savoir si le héros est proche d'un ennemi


//méthode de l'interface Activable
//méthode permettant de supprimer un élément de la Map
//méthode de l'interface Deletable
//méthode de l'interface Deletable
//méthode permettant de savoir si un élément est présent sur un bloc particulier

Code:
package Model;

import java.util.ArrayList;
import java.util.Random;

//Classe mère dont héritent les différents ennemis

public class Ennemy extends Personnage implements Runnable, Deletable, Activable{
   
   private ArrayList<DeletableObserver> observer = new ArrayList<DeletableObserver>();
   private int timeMove;
   private Thread thread;
   
   public Ennemy(int posX, int posY, int color, int life, int timeMove, Game game) {//constructeur
      super(posX, posY, color, 1, life, game);
      this.timeMove = timeMove;
      this.thread = new Thread(this);
      this.thread.start();
   }
   
   public int getTimeMove() {//getteurs
      return this.timeMove;
   }
   
   public int getColor(){
      return this.color;
   }
   
   public int getDirection() {
      return this.direction;
   }

   public void run() {//méthode de l'interface Runnable gérant le Thread d'un ennemi
      while(this.getLife() > 0) {
         try {
            Thread.sleep(this.getTimeMove());
            if (Math.abs(this.getPosX() - game.getHero().get(0).getPosX()) <= 3 && Math.abs(this.getPosY() - game.getHero().get(0).getPosY()) <= 3 && this.getLife()<=2 ) {
               this.moveAwayHero();
               this.game.notifyView();
            }
            
            else if (Math.abs(this.getPosX() - game.getHero().get(0).getPosX()) <= 3 && Math.abs(this.getPosY() - game.getHero().get(0).getPosY()) <= 3) {
               this.moveToHero();
               this.game.notifyView();
            }
         
            else {
               this.moveRandom();
               this.game.notifyView();
            }
            
            if (heroNearEnnemy()) {
               game.getHero().get(0).loseLife();
            }
         }
      
         catch(InterruptedException e) {
            e.printStackTrace();
         }
      }
   }
   
   public void moveRandom() {//mouvement aléatoire de l'ennemi (s'il est loin du héros)
      int direction = new Random().nextInt(4);
      if (direction == 0) {
         if (!this.getGame().unaccessibleBlock(getPosX() + 1, getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) { //on checke à l'est
            this.setPosX(this.getPosX() + 1);
         }
      }
      
      else if (direction == 1) {
         if (!this.getGame().unaccessibleBlock(getPosX(), getPosY() - 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) { //on checke au nord
            this.setPosY(this.getPosY() - 1);
         }
      }
      
      else if (direction == 2) {
         if (!this.getGame().unaccessibleBlock(getPosX() - 1, getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) { //on checke à l'ouest
            this.setPosX(this.getPosX() - 1);
         }
      }
      
      else if (direction == 3) {
         if (!this.getGame().unaccessibleBlock(getPosX(), getPosY() + 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) { //on checke au sud
            this.setPosY(this.getPosY() + 1);
         }
      }
   }
   
   public void moveToHero(){//mouvement de l'ennemi vers le héros (s'il en est proche)
      Hero hero = game.getHero().get(0);
      int xhero = hero.getPosX();
      int yhero = hero.getPosY();
      int xennemi = this.getPosX();
      int yennemi = this.getPosY();
      if (yennemi < yhero && xennemi < xhero) {//en haut à gauche
         if (xennemi-xhero <= yennemi-yhero) {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
      }
      
      else if(yennemi < yhero && xennemi > xhero) {//en haut à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX()-1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
                this.setPosX(xennemi - 1);   
            }
         }
      }
      
      else if (yennemi > yhero && xennemi < xhero){//en bas à gauche
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()-1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
      }
      
      else if (yennemi > yhero && xennemi > xhero){//en bas à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()-1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX()-1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
      }   
      
      else if(xennemi == xhero){//même abscisse
         if (yennemi > yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()-1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
      }
      
      else if(yennemi == yhero){//même ordonnée
         if (xennemi > xhero){
            if(!this.getGame().unaccessibleBlock(getPosX()-1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
      }
   }
   
   public void moveAwayHero(){//fuite de l'ennemi loin du héros (si sa vie est faible)
      Hero hero = game.getHero().get(0);
      int xhero = hero.getPosX();
      int yhero = hero.getPosY();
      int xennemi = this.getPosX();
      int yennemi = this.getPosY();
      if (yennemi < yhero && xennemi < xhero) {//en haut à gauche
         if (xennemi-xhero <= yennemi-yhero) {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() - 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
            else {
               if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
                  this.setPosX(xennemi + 1);
               }
            }
      }
      
      else if(yennemi < yhero && xennemi > xhero) {//en haut à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
             if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
                this.setPosX(xennemi + 1);   
             }
         }
      }
      
      else if (yennemi > yhero && xennemi < xhero){//en bas à gauche
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() - 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
      }
      
      else if (yennemi > yhero && xennemi > xhero){//en bas à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() + 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
      }
      
      else if(xennemi == xhero){//même abscisse
         if (yennemi > yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() + 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() - 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
      }
      
      else if(yennemi == yhero){//même ordonnée
         if (xennemi > xhero){
            if(!this.getGame().unaccessibleBlock(getPosX() + 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() - 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
      }
   }
   
   public boolean heroNearEnnemy() {//méthode permettant de savoir si le héros est proche d'un ennemi
      boolean near = false;
      Hero hero = game.getHero().get(0);
      int posXHero = hero.getPosX();
      int posYHero = hero.getPosY();
      if(Math.abs(this.getPosX() - posXHero) <= 1 && Math.abs(this.getPosY() - posYHero) <= 1){
         near = true;
      }
      return near;
   }
   
    public void activate(){//méthode de l'interface Activable
       if (life <= 1){
            crush();
            this.setLife(this.getLife() - 1);
            this.getGame().setScore(this.getGame().getScore() + 1);
            this.getGame().endGame();
        }
       
        else {
            this.setLife(this.getLife() - this.getGame().getHero().get(0).getPower());
        }
    }

    public void crush(){//méthode permettant de supprimer un élément de la Map
        notifyDeletableObserver();
    }
   
    public void attachDeletable(DeletableObserver po) {//méthode de l'interface Deletable
        observer.add(po);
    }

    public void notifyDeletableObserver() {//méthode de l'interface Deletable
        int i = 0;
        for (DeletableObserver o : observer) {
            i++;
            o.delete(this, null);
        }
    }

    public boolean isAtPosition(int x, int y) {//méthode permettant de savoir si un élément est présent sur un bloc particulier
        return (this.posX == x && this.posY == y);
    }
}




Je reprend ici ce que Monsieur Dumont m'a demandé de vous présenter ce jeudi. Ce qui correspond à la fuite des ennemis quand sont bas au niveau point de vie et prêt de mon héros, c'est ce qu'on appelle LA FUITE
Code:
public void moveAwayHero(){//fuite de l'ennemi loin du héros (si sa vie est faible)
      Hero hero = game.getHero().get(0);
      int xhero = hero.getPosX();
      int yhero = hero.getPosY();
      int xennemi = this.getPosX();
      int yennemi = this.getPosY();
      if (yennemi < yhero && xennemi < xhero) {//en haut à gauche
         if (xennemi-xhero <= yennemi-yhero) {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() - 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
            else {
               if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
                  this.setPosX(xennemi + 1);
               }
            }
      }
      
      else if(yennemi < yhero && xennemi > xhero) {//en haut à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
             if(!this.getGame().unaccessibleBlock(getPosX()+1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
                this.setPosX(xennemi + 1);   
             }
         }
      }
      
      else if (yennemi > yhero && xennemi < xhero){//en bas à gauche
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() - 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
      }
      
      else if (yennemi > yhero && xennemi > xhero){//en bas à droite
         if (xennemi-xhero <= yennemi-yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY()+1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() + 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
      }
      
      else if(xennemi == xhero){//même abscisse
         if (yennemi > yhero){
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() + 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() + 1)) {
               this.setPosY(yennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX(),getPosY() - 1) && !this.getGame().isOutOfMap(getPosX(), getPosY() - 1)) {
               this.setPosY(yennemi - 1);
            }
         }
      }
      
      else if(yennemi == yhero){//même ordonnée
         if (xennemi > xhero){
            if(!this.getGame().unaccessibleBlock(getPosX() + 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() + 1, getPosY())) {
               this.setPosX(xennemi + 1);
            }
         }
         else {
            if(!this.getGame().unaccessibleBlock(getPosX() - 1,getPosY()) && !this.getGame().isOutOfMap(getPosX() - 1, getPosY())) {
               this.setPosX(xennemi - 1);
            }
         }
      }
   }

_________________
Revenir en haut
Publicité






MessagePosté le: Mer 24 Oct - 22:11 (2018)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Projet d'Exploration Informatique Index du Forum -> Les projets de l'année 2018-2019 -> Toutes les heures sont au format GMT + 2 Heures
Page 1 sur 1

 
Sauter vers:  

Portail | Index | Panneau d’administration | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Texno x0.3 © theme by Larme D'Ange 2006
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com