001 package model.fish; 002 003 import model.fish.display.ImageFishDisplay; 004 import model.ILambda; 005 import sysModel.fish.AFish; 006 import sysModel.env.IBlockedCommand; 007 import sysModel.env.IOpenCommand; 008 009 import java.awt.*; 010 011 /** 012 * A simple fish that swims back and forth. 013 * 014 * @author Mathias Ricken 015 */ 016 public class SimpleFish extends AFish { 017 /** 018 * Constructor. 019 * 020 * @param fishColor color of the fish 021 */ 022 public SimpleFish(Color fishColor) { 023 super(fishColor, new ImageFishDisplay("smallfish.gif", 3.0 * Math.PI / 2.0)); 024 } 025 026 /** 027 * Carry out movement behavior for the fish. 028 */ 029 protected void move() { 030 // attempt to move forward 031 tryMoveFwd(new IBlockedCommand() { 032 public Object apply(Object param) { 033 // cannot move 034 // turn PI radians 035 turnRight(Math.PI); 036 return null; 037 } 038 }, new IOpenCommand() { 039 public Object apply(Object param) { 040 // can move forward, do it 041 ((ILambda)param).apply(null); 042 return null; 043 } 044 }); 045 } 046 }