001 package model.fish; 002 003 import model.fish.display.CircleFishDisplay; 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 fish that swims around in a circle. 013 * 014 * @author Mathias Ricken 015 */ 016 public class CircleFish extends AFish { 017 /** 018 * Create a new circle fish. 019 * 020 * @param fishColor color of the fish 021 */ 022 public CircleFish(Color fishColor) { 023 super(fishColor, CircleFishDisplay.Singleton); 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 // the field ahead is blocked, turn around 034 turnRight(Math.PI); 035 return null; 036 } 037 }, 038 new IOpenCommand() { 039 public Object apply(Object param) { 040 // the field ahead is open, move 041 ((ILambda)param).apply(null); 042 // turn 10 degrees to the right 043 turnRight(Math.PI / 18); 044 return null; 045 } 046 }); 047 048 } 049 }