Skip to content

Commit

Permalink
#6 done, insecte now have a special way to eat (ChasseHerbivore), Tou…
Browse files Browse the repository at this point in the history
…rInsecte is mutch more easier to understand & full commented, new function isHungry in Creature.
  • Loading branch information
HydrolienF committed Jan 22, 2021
1 parent 951e220 commit f4f6bac
Show file tree
Hide file tree
Showing 7 changed files with 159 additions and 27 deletions.
14 changes: 14 additions & 0 deletions src/main/fr/formiko/formiko/Creature.java
Original file line number Diff line number Diff line change
Expand Up @@ -212,4 +212,18 @@ public void mourirOuPas(int x){
if(x==2 && age>ageMax){mourir(x);return;}
if(x==3 && nourriture < 0){mourir(x);return;}
}
/**
*{@summary check if this is hungry.<br>}
*@param percentageOfHungryness 0=are you starving to death, 40=are you hungry, 90=can you eat something more.<br>
*return true if actual %age of food is &#60; than percentageOfHungryness.<br>
*@version 1.28
*/
public boolean isHungry(int percentageOfHungryness){
if(percentageOfHungryness>100){percentageOfHungryness=100;}
else if(percentageOfHungryness<0){percentageOfHungryness=0;}
if((getNourriture()*100)/getNourritureMax()<percentageOfHungryness){
return true;
}
return false;
}
}
12 changes: 0 additions & 12 deletions src/main/fr/formiko/formiko/Insecte.java
Original file line number Diff line number Diff line change
Expand Up @@ -91,17 +91,5 @@ public String toString(){
sr+= " "+id+ m +" "+g.get("de")+" "+g.get("type")+" "+type+" "+p.desc()+" "+g.get("nourritureFournie")+" : " + getNourritureFournie() +" "+g.get("nourriture")+" "+nourriture+"/"+nourritureMax;
return sr;
}
/**
*{@summary Eat as a grass eater.<br>}
*@version 1.13
*/
public void manger(){ //TODO #6
byte nourritureSurCase = this.getCCase().getContenu().getNourritureInsecte();
if (nourritureSurCase > 0){
byte nourritureMangé = (byte) math.min(nourritureSurCase,nourritureMangeable);
this.getCCase().getContenu().setNourritureInsecte((byte)(nourritureSurCase-nourritureMangé));
this.setNourriture(this.getNourriture() + nourritureMangé);
}
}

}
47 changes: 47 additions & 0 deletions src/main/fr/formiko/formiko/interfaces/ChasseHerbivore.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package fr.formiko.formiko.interfaces;
import fr.formiko.usuel.debug; import fr.formiko.usuel.erreur; import fr.formiko.usuel.g; import fr.formiko.formiko.Main;
//def par défaut des fichiers depuis 0.79.5
import fr.formiko.formiko.Creature;
import fr.formiko.formiko.Insecte;
import java.io.Serializable;
import fr.formiko.usuel.math.math;
/**
* {@summary Chasse implementation.<br/>}
* Allow a creature to do hunt as an herbivore.<br/>
* @author Hydrolien
* @version 1.28
*/
public class ChasseHerbivore implements Serializable, Chasse {
Creature c;
public void chasser(Creature c, int directionSiPasDeProie){chasse(c);}
/**
*{@summary Hunt as an herbivore.<br>}
*@version 1.28
*/
public void chasse(Creature c){
this.c=c;
int nourritureMangeable = 1;
if(c instanceof Insecte){nourritureMangeable=((Insecte)(c)).getNourritureMangeable();}
if(c.getNourriture()<c.getNourritureMax()/2 && c.getCCase().getContenu().getNourritureInsecte() > nourritureMangeable){
manger();
}else{
c.ceDeplacer(true); // ce déplacer de façon alléatoire.
}
}

/**
*{@summary Eat as an herbivore.<br>}
*@version 1.28
*/
public void manger(){
byte nourritureSurCase = c.getCCase().getContenu().getNourritureInsecte();
int nourritureMangeable = 1;
if(c instanceof Insecte){nourritureMangeable=((Insecte)(c)).getNourritureMangeable();}
if (nourritureSurCase > 0){
byte nourritureMangé = (byte) math.min(nourritureSurCase,nourritureMangeable);
c.getCCase().getContenu().setNourritureInsecte((byte)(nourritureSurCase-nourritureMangé));
c.setNourriture(c.getNourriture() + nourritureMangé);
}
}

}
62 changes: 47 additions & 15 deletions src/main/fr/formiko/formiko/interfaces/TourInsecte.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,22 @@
import java.io.Serializable;

/**
* {@summary Ant implementation.<br/>}
* Allow an ant to play a turn<br/>
* {@summary Insect implementation.<br>}
* Allow an insect to play a turn.<br>
* All insect can extends this class to modify runAway(), eat() or reproduce()<br>
* @author Hydrolien
* @version 1.24
*/
public class TourInsecte implements Serializable, Tour{
private Insecte f;
private Insecte c;
/**
*PLay 1 turn with Creature c.
*@version 1.24
*/
public void unTour( Creature c){
debug.débogage("la créature "+c.getId()+" tente de jouer un tour");
if(c instanceof Insecte){
f = (Insecte) c;
this.c = (Insecte) c;
tour();
debug.débogage("fin du tour de l'insecte.");
}else{
Expand All @@ -29,21 +30,52 @@ public void unTour( Creature c){

/**
*{@summary Play a turn as an Insecte.<br>}
*Turn work like this :
*<ul>
*<li>Eat if the creature is starving.
*<li>Run away from predator.
*<li>Eat if the creature is hungry.
*<li>Try to fined an other creature to reproduce.
*<li>Eat if the creature is not full.
*<li>Wait untill next turn.
*</ul>
*@version 1.13
*/
public void tour(){
int i=0;
while(f.getAction()>i){
if(f.getNourriture()<f.getNourritureMax()/2 && f.getCCase().getContenu().getNourritureInsecte() > f.getNourritureMangeable()){
f.manger();
}else{
f.ceDeplacer(true); // ce déplacer de façon alléatoire.
}
i++;
}
if (c.getAction()>0) {eat(5);}
if (c.getAction()>0) {runAway();}
if (c.getAction()>0) {eat(50);}
if (c.getAction()>0) {reproduce();}
if (c.getAction()>0) {eat(100);}

if(c.getAction()>0){c.setAction(0);}//end the turn normaly
// Un tour ça coute en age et en nourriture.
f.setNourritureMoins1();
f.setAgePlus1();
c.setNourritureMoins1();
c.setAgePlus1();
}

/**
*{@summary Run away if a predator is next to you.<br>}
*@version 1.28
*/
private void runAway(){ //TODO
return;
}
/**
*{@summary Eat with the interface Chasse.<br>}
*@version 1.28
*/
private void eat(int percentageOfHungryness){
if(c.isHungry(percentageOfHungryness)){
c.chasse();
}
}
/**
*{@summary reproduce.<br>}
*@version 1.28
*/
private void reproduce(){ //TODO
return;
}

}
49 changes: 49 additions & 0 deletions src/test/fr/formiko/formiko/CreatureTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package fr.formiko.formiko;
import fr.formiko.usuel.debug; import fr.formiko.usuel.erreur; import fr.formiko.usuel.g; import fr.formiko.formiko.Main;
//def par défaut des fichiers depuis 0.79.5
import fr.formiko.formiko.Creature;
import fr.formiko.usuel.test.TestCaseMuet;
import org.junit.Test;
import fr.formiko.formiko.Insecte;
import fr.formiko.formiko.GCase;

public class CreatureTest extends TestCaseMuet{

// Fonctions propre -----------------------------------------------------------
@Test
public void testIsHungry(){
Main.initialisation();
GCase gc = new GCase(1,1);
Insecte i = new Insecte(gc.getCCaseAlléa());
i.setNourritureMax(10);
i.setNourriture(5);
assertTrue(!i.isHungry(0));
assertTrue(!i.isHungry(20));
assertTrue(!i.isHungry(40));
assertTrue(!i.isHungry(49));
assertTrue(!i.isHungry(50));
assertTrue(i.isHungry(51));
assertTrue(i.isHungry(80));
assertTrue(i.isHungry(100));
//exception
assertTrue(!i.isHungry(-20));
assertTrue(i.isHungry(200));
//more than full (should be correct by setNourriture(1) when setNourritureMax(1)).
i.setNourriture(5);
i.setNourritureMax(1);
assertTrue(!i.isHungry(0));
assertTrue(!i.isHungry(100));
i.setNourritureMax(10);
i.setNourriture(9);
assertTrue(!i.isHungry(89));
assertTrue(i.isHungry(100));
i.setNourritureMax(100);
i.setNourriture(2);
assertTrue(!i.isHungry(2));
assertTrue(i.isHungry(3));
i.setNourritureMax(101);
assertTrue(!i.isHungry(1));
assertTrue(i.isHungry(2));
assertTrue(i.isHungry(3));
}
}
1 change: 1 addition & 0 deletions src/test/fr/formiko/usuel/strTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import fr.formiko.usuel.conversiondetype.str;
import fr.formiko.usuel.test.TestCaseMuet;
import org.junit.Test;
//other import
import fr.formiko.usuel.Os;

public class strTest extends TestCaseMuet{
Expand Down
1 change: 1 addition & 0 deletions testJunit.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
fr.formiko.formiko.interfaces.TrophallaxieFourmiTest
fr.formiko.formiko.interfaces.TourCreatureSansActionTest
fr.formiko.formiko.PartieTest
fr.formiko.formiko.CreatureTest
fr.formiko.usuel.liste.GIntTest
fr.formiko.usuel.liste.GGIntTest
fr.formiko.usuel.liste.CStringTest
Expand Down

0 comments on commit f4f6bac

Please sign in to comment.