Commit abcb11d9 authored by Aroubate Hamza's avatar Aroubate Hamza
Browse files

Fin TP5

parent 64b61454
......@@ -4,18 +4,19 @@ import fr.insarouen.asi.prog.asiaventure.elements.objets.*;
public interface Activable{
/**
* Retourne le caractere activable avec un objet donne
* @param obj Objet à tester
*/
* activableAvec permet de savoir si on peut activer l'activable avec l'Objet
* @param obj l'Objet à vérifier pour que ça active l'activable
* @return boolean, retourne true si l'activable est activable avec l'Objet false sinon
*/
boolean activableAvec(Objet obj);
/**
* Active
* activer active l'activable
*/
void activer() throws ActivationException;
/**
* Active
* activerAvec active l'activable avec l'Objet
* @param obj Objet qui active
*/
void activerAvec(Objet obj) throws ActivationException;
......
package fr.insarouen.asi.prog.asiaventure.elements;
/**
* Classe définissant l'exception ActivationImpossibleAvecObjetException
*/
public class ActivationImpossibleAvecObjetException extends ActivationImpossibleException{
/**
* Constructeur de ActivationImpossibleAvecObjetException
*/
public ActivationImpossibleAvecObjetException(){}
/**
* Constructeur de ActivationImpossibleAvecObjetException
* @param msg message décrivant l'exception
*/
public ActivationImpossibleAvecObjetException(String msg){
super(msg);
}
}
\ No newline at end of file
package fr.insarouen.asi.prog.asiaventure.elements;
/**
* Classe définissant l'exception ActivationImpossibleException
*/
public class ActivationImpossibleException extends ActivationException{
/**
* Constructeur de ActivationImpossibleException
*/
public ActivationImpossibleException(){}
/**
* Constructeur de ActivationImpossibleException
* @param msg message décrivant l'exception
*/
public ActivationImpossibleException(String msg){
super(msg);
}
}
\ No newline at end of file
......@@ -10,10 +10,19 @@ import fr.insarouen.asi.prog.asiaventure.elements.structure.*;
import java.util.*;
/**
* Classe héritant d'ElementStructurel définissant une Piece possèdant 4 attributs :
* nom : le nom de notre Piece;
* monde : le monde dans lequel se trouve notre Piece;
* objets : dictionnaire des Objet avec en clé leur nom et en valeur l'Objet;
* vivants : dictionnaire des Vivant avec en clé leur nom et en valeur le Vivant;
* portes : dictionnaire des Porte avec en clé leur nom et en valeur la Porte;
*/
public class Piece extends ElementStructurel {
private HashMap<String, Objet> objets = new HashMap<String, Objet>();
private HashMap<String, Vivant> vivants = new HashMap<String, Vivant>();
private Map<String,Porte> portes = new HashMap<String, Porte>();
/**
* Constructeur de la piece
......@@ -25,6 +34,38 @@ public class Piece extends ElementStructurel {
super( _nom, _monde);
}
/**
* addPorte ajoute une porte à la Piece
* @param porte Porte à ajouter
*/
protected void addPorte(Porte porte) {
this.portes.put(porte.getNom(), porte);
}
/**
* aLaPorte verifie si la Piece contient la Porte
* @param porte Porte à verifier
*/
public boolean aLaPorte(Porte porte) {
return aLaPorte(porte.getNom());
}
/**
* aLaPorte verifie si la Piece contient la Porte
* @param nom nom de la Porte a verifier
*/
public boolean aLaPorte(String nom) {
return this.portes.containsKey(nom);
}
/**
* getPorte renvoie la Porte demandée à partir de son nom
* @param nom nom de la Porte à renvoyer
*/
public Porte getPorte(String nom) {
return this.portes.get(nom);
}
/**
* deposer depose un objet dans la piece
* @param obj objet a deposer
......
package fr.insarouen.asi.prog.asiaventure.elements.structure;
import fr.insarouen.asi.prog.asiaventure.*;
import fr.insarouen.asi.prog.asiaventure.elements.*;
import fr.insarouen.asi.prog.asiaventure.elements.structure.*;
import fr.insarouen.asi.prog.asiaventure.elements.Etat;
import fr.insarouen.asi.prog.asiaventure.elements.structure.ElementStructurel;
import fr.insarouen.asi.prog.asiaventure.NomDEntiteDejaUtiliseDansLeMondeException;
import fr.insarouen.asi.prog.asiaventure.elements.vivants.Vivant;
import fr.insarouen.asi.prog.asiaventure.Monde;
import fr.insarouen.asi.prog.asiaventure.elements.Activable;
import fr.insarouen.asi.prog.asiaventure.elements.Etat;
import fr.insarouen.asi.prog.asiaventure.elements.objets.Objet;
import fr.insarouen.asi.prog.asiaventure.elements.ActivationImpossibleException;
import fr.insarouen.asi.prog.asiaventure.elements.ActivationImpossibleAvecObjetException;;
/**
* Classe héritant d'ElementStructurel définissant une Porte possèdant 4 attributs :
* nom : le nom de notre Porte ;
* monde : le monde dans lequel se trouve notre Porte ;
* pieceA : une des deux piece à laquelle elle est liée ;
* pieceB : une des deux piece à laquelle elle est liée ;
* etat : l'etat dans lequel elle est ;
*/
public class Porte extends ElementStructurel implements Activable{
private Piece pieceA;
private Piece pieceB;
private Etat etat = FERME;
private Etat etat;
/**
* Constructeur de la Porte
* @param nom nom de l'element
* @param monde monde de l'element
* @param pieceA premiere piece
* @param pieceB seconde piece
* @throws NomDEntiteDejaUtiliseDansLeMondeException
*/
public Porte(String nom, Monde monde,Piece pieceA, Piece pieceB) throws NomDEntiteDejaUtiliseDansLeMondeException{
super(nom,monde);
this.pieceA = pieceA;
this.pieceB = pieceB;
this.etat = FERME;
}
/**
* getEtat Retourne l'Etat de la porte
* @return Etat, l'Etat de la porte
*/
public Etat getEtat(){
return this.etat;
}
public Piece getPieceAutreCote(Piece piece) {
if (piece.equals(pieceA)) {
return pieceB;
} else if (piece.equals(pieceB)) {
return pieceA;
} else {
return null;
}
}
/**
* activer, ouvre la porte si possible
* @throws ActivationImpossibleException
*/
public void activer() throws ActivationImpossibleException{
if (etat==CASSE || etat==VERROUILLE)
throw new ActivationImpossibleException();
......@@ -30,4 +73,43 @@ public class Porte extends ElementStructurel implements Activable{
break;
}
}
}
\ No newline at end of file
/**
* activerAvec, active la Porte avec l'Objet
* @param obj l'Objet qui permet d'activer la Porte
* @throws ActivationImpossibleException
* @throws ActivationImpossibleAvecObjetException
*/
public void activerAvec(Objet obj) throws ActivationImpossibleException, ActivationImpossibleAvecObjetException{
if (etat==CASSE || etat==VERROUILLE)
throw new ActivationImpossibleException();
else
switch (etat){
case FERME:
etat=OUVERT;
break;
case OUVERT:
etat=FERME;
break;
}
}
/**
* activableAvec, permet de savoir si on peut activer la Porte avec l'Objet
* @param obj l'Objet à vérifier pour que ça active la Porte
* @return boolean, retourne true si la Porte est activable avec l'Objet false sinon
*/
public boolean activableAvec(Objet obj){
return false;
}
/**
* toString Créer un String décrivant la Piece
* @return str la description de la Piece
*/
public String toString(){
StringBuilder str = new StringBuilder();
str.append(String.format(super.toString(),this.pieceA,this.pieceB,this.etat));
return str.toString();
}
}
package fr.insarouen.asi.prog.asiaventure.elements.structure;
/**
* Classe définissant l'exception PorteFermeException
*/
public class PorteFermeException extends ElementStructurelException{
/**
* Constructeur de PorteFermeException
*/
public PorteFermeException(){
}
/**
* Constructeur de PorteFermeException
* @param msg message décrivant l'exception
*/
public PorteFermeException(String msg){
super(msg);
}
}
\ No newline at end of file
package fr.insarouen.asi.prog.asiaventure.elements.structure;
/**
* Classe définissant l'exception PorteInexistanteDansLaPieceException
*/
public class PorteInexistanteDansLaPieceException extends PieceException{
/**
* Constructeur de PorteInexistanteDansLaPieceException
*/
public PorteInexistanteDansLaPieceException(){}
/**
* Constructeur de PorteInexistanteDansLaPieceException
* @param msg message décrivant l'exception
*/
public PorteInexistanteDansLaPieceException(String msg){
super(msg);
}
}
\ No newline at end of file
......@@ -11,6 +11,15 @@ import fr.insarouen.asi.prog.asiaventure.elements.structure.*;
import java.util.*;
/**
* Classe héritant d'Entite définissant un Vivant possèdant 6 attributs :
* nom : le nom de notre Vivant;
* monde : le monde dans lequel se trouve notre Vivant;
* pointVie : le nombre de point de vie;
* pointForce : le nombre de point de force;
* piece : la Piece où il se trouve;
* objets : dictionnaire des Objets que le Vivant possède, en clé leur nom et en valeur l'Objet;
*/
public abstract class Vivant extends Entite {
private int pointVie;
......@@ -125,6 +134,42 @@ public abstract class Vivant extends Entite {
return (getPointVie() == 0);
}
/**
* franchir permet de passer d'une Piece à une autre grâce à une Porte
* @param porte Porte à franchir
* @throws PorteFermeException
* @throws PorteInexistanteDansLaPieceException
*/
public void franchir(Porte porte) throws PorteFermeException,
PorteInexistanteDansLaPieceException{
franchir(porte.getNom());
}
/**
* franchir permet de passer d'une Piece à une autre grâce à une Porte à partir de son nom
* @param nomPorte nom de la Porte à franchir
* @throws PorteFermeException
* @throws PorteInexistanteDansLaPieceException
*/
public void franchir(String nomPorte) throws PorteFermeException,
PorteInexistanteDansLaPieceException{
try{
if (!(piece.aLaPorte(nomPorte)) || piece.getPorte(nomPorte).getPieceAutreCote(piece)==null){
throw new PorteInexistanteDansLaPieceException();
}
if (piece.getPorte(nomPorte).getEtat().equals(FERME)){
throw new PorteFermeException();
}
piece.sortir(this);
piece = piece.getPorte(nomPorte).getPieceAutreCote(piece);
piece.entrer(this);
}
catch(VivantAbsentDeLaPieceException e) {
System.out.println();
}
}
/**
* toString créer un String décrivant le vivant
* @return le String de description
......
......@@ -144,4 +144,13 @@ public class TestPiece{
assertThat(piece.contientVivant(v.getNom()),IsEqual.equalTo(true));
piece.sortir(v);
}
@Test
public void test_addPorte_aLaPorte()
throws NomDEntiteDejaUtiliseDansLeMondeException, VivantAbsentDeLaPieceException {
Piece piece2 = new Piece("piece2", monde1);
Porte porte1 = new Porte("porte1", monde1, piece1, piece2);
assertThat(piece1.aLaPorte(porte1), is(true));
assertThat(piece2.aLaPorte(porte1), is(true));
}
}
\ No newline at end of file
package fr.insarouen.asi.prog.asiaventure.elements.structure;
import fr.insarouen.asi.prog.asiaventure.*;
import fr.insarouen.asi.prog.asiaventure.elements.*;
import fr.insarouen.asi.prog.asiaventure.elements.objets.*;
import fr.insarouen.asi.prog.asiaventure.elements.vivants.*;
import fr.insarouen.asi.prog.asiaventure.elements.structure.*;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.hamcrest.core.IsEqual;
import org.junit.Test;
import static org.junit.Assert.*;
import java.util.*;
public class TestPorte {
public Monde monde1;
public Piece pieceA1;
public Piece pieceB1;
public Porte porte1;
@Before
public void init() throws Exception {
monde1 = new Monde("monde1");
pieceA1 = new Piece("pieceA1", monde1);
pieceB1 = new Piece("pieceB1", monde1);
porte1 = new Porte("porte1", monde1, pieceA1, pieceB1);
}
@Test
public void test_activer_getEtat() throws ActivationImpossibleException {
assertThat(porte1.getEtat(), equalTo(Etat.FERME));
porte1.activer();
assertThat(porte1.getEtat(), equalTo(Etat.OUVERT));
}
@Test
public void test_getPieceAutreCote() {
assertThat(porte1.getPieceAutreCote(pieceA1), equalTo(pieceB1));
assertThat(porte1.getPieceAutreCote(pieceB1), equalTo(pieceA1));
}
}
......@@ -10,10 +10,13 @@ import java.util.*;
import fr.insarouen.asi.prog.asiaventure.Monde;
import fr.insarouen.asi.prog.asiaventure.NomDEntiteDejaUtiliseDansLeMondeException;
import fr.insarouen.asi.prog.asiaventure.elements.objets.Objet;
import fr.insarouen.asi.prog.asiaventure.elements.objets.PiedDeBiche;
import fr.insarouen.asi.prog.asiaventure.elements.objets.ObjetNonDeplacableException;
import fr.insarouen.asi.prog.asiaventure.elements.structure.ObjetAbsentDeLaPieceException;
import fr.insarouen.asi.prog.asiaventure.elements.structure.Piece;
import fr.insarouen.asi.prog.asiaventure.elements.structure.Porte;
import fr.insarouen.asi.prog.asiaventure.elements.structure.PorteFermeException;
import fr.insarouen.asi.prog.asiaventure.elements.structure.PorteInexistanteDansLaPieceException;
import fr.insarouen.asi.prog.asiaventure.elements.ActivationImpossibleException;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.*;
......@@ -155,4 +158,46 @@ public class TestVivant {
vivant.deposer(obj);
}
}
\ No newline at end of file
@Test
public void test_franchir() throws NomDEntiteDejaUtiliseDansLeMondeException, PorteFermeException, PorteInexistanteDansLaPieceException, ActivationImpossibleException {
Piece piece2 = new Piece("piece2", monde1);
Porte porte1 = new Porte("porte1", monde1, piece1, piece2);
porte1.activer();
vivant1.franchir(porte1);
assertThat(vivant1.getPiece(), equalTo(piece2));
vivant1.franchir("porte1");
assertThat(vivant1.getPiece(), equalTo(piece1));
}
@Test(expected=PorteFermeException.class)
public void test_franchir_PorteFerme() throws NomDEntiteDejaUtiliseDansLeMondeException, PorteFermeException, PorteInexistanteDansLaPieceException, ActivationImpossibleException {
Piece piece2 = new Piece("piece2", monde1);
Porte porte1 = new Porte("porte1", monde1, piece1, piece2);
vivant1.franchir(porte1);
}
@Test(expected=PorteInexistanteDansLaPieceException.class)
public void test_franchir_PorteInexistante() throws NomDEntiteDejaUtiliseDansLeMondeException, PorteFermeException, PorteInexistanteDansLaPieceException, ActivationImpossibleException {
Piece piece2 = new Piece("piece2", monde1);
Piece piece3 = new Piece("piece3", monde1);
Porte porte1 = new Porte("porte1", monde1, piece2, piece3);
porte1.activer();
vivant1.franchir(porte1);
}
@Test
public void test_activerActivable() throws NomDEntiteDejaUtiliseDansLeMondeException, PorteFermeException, PorteInexistanteDansLaPieceException, ActivationImpossibleException {
Piece piece2 = new Piece("piece2", monde1);
Piece piece3 = new Piece("piece3", monde1);
Porte porte1 = new Porte("porte1", monde1, piece2, piece3);
Porte porte2 = new Porte("porte2", monde1, piece2, piece3);
porte1.activer();
try{
vivant1.activerActivable(porte1);
}
catch(Exception e) {
System.out.println();
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment