All pastes #809737 Raw Edit

Miscellany

public text v1 · immutable
·published 2007-12-09 05:19 UTC
rendered paste body
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;
}