package 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; }