rendered paste bodypackage model;
import view.GameObserver;
/**
* Models "Galapagos" The game of evolution
* @author hartmann
*
*/
public class Model {
/**
* Construct a new game instance with two specific finks.
*/
public Model( AbstractFink fink1, AbstractFink fink2 )
{
this.fink1 = fink1;
this.fink2 = fink2;
this.turn = 0;
}
/**
* Query: Has the game finished
* @return
*/
public boolean gameOver()
{
return !( fink1.alive() && fink2.alive() );
}
/**
* Command: Play a game of evolution
*/
public void play( GameObserver reporter )
{
while (!gameOver()) {
move();
reporter.update( this );
}
}
/**
* Command: Execute a single turn in the game
*/
private void move()
{
turn += 1;
//System.out.println(turn);
fink1.birthday();
fink2.birthday();
fink1.giveBirth();
fink2.giveBirth();
fink1.prune( fink2 );
boolean fink1Pruned = fink1.lastPruned();
fink2.prune( fink1 );
boolean fink2Pruned = fink2.lastPruned();
if( fink1Pruned && fink2Pruned )
{
fink1.addEnergy( 3 );
fink2.addEnergy( 3 );
}
if( fink1Pruned && ! fink2Pruned )
{
fink1.addEnergy( 0 );
fink2.addEnergy( 5 );
}
if( ! fink1Pruned && fink2Pruned )
{
fink1.addEnergy( 5 );
fink2.addEnergy( 0 );
}
if( ! fink1Pruned && ! fink2Pruned )
{
fink1.addEnergy( 1 );
fink2.addEnergy( 1 );
}
fink1.removeEnergy( 2 );
fink2.removeEnergy( 2 );
}
/**
* Query: Which turn number is it.
* @return
*/
public int turn()
{
return turn;
}
/**
* Query: Which fink object plays fink 1
* @return
*/
public AbstractFink fink1()
{
return fink1;
}
/**
* Query: Which fink object plays fink 2
* @return
*/
public AbstractFink fink2()
{
return fink2;
}
private AbstractFink fink1;
private AbstractFink fink2;
private int turn = 0;
}