import java.awt.*;
import java.awt.event.WindowListener;
import java.lang.reflect.Field;
import java.util.Collection;

public class HuskyRoncace extends Critter {

	private static CritterModel model = null;

	private static Field critterList = null;

	private static void cheat() {
		try {
			outer:
			for (Window f : Window.getWindows()) {
				for (WindowListener l : f.getWindowListeners()) {
					if (l instanceof CritterGui) {
						CritterGui gui = (CritterGui)l;
						Field modelField = gui.getClass().getDeclaredField("model");
						modelField.setAccessible(true);
						model = (CritterModel)modelField.get(gui);
						critterList = model.getClass().getDeclaredField("critterList");
						critterList.setAccessible(true);
						break outer;
					}
				}
			}
		}
		catch (IllegalAccessException | NoSuchFieldException ex) {
			throw new AssertionError();
		}
	}

	@Override
	@SuppressWarnings("unchecked")
	public Attack fight(String opponent) {
		try {
			if (critterList == null) {
				cheat();
			}
			Collection<Critter> critters = (Collection<Critter>)critterList.get(model);
			for (Critter c : critters) {
				if (distance(this.getX(), this.getY(), c.getX(), c.getY()) == 0
						&& c.toString().equals(opponent)) {
					Attack attack = c.fight(this.toString());
					switch (attack) {
						case POUNCE:
							return Attack.SCRATCH;
						case SCRATCH:
							return Attack.ROAR;
						case ROAR:
							return Attack.POUNCE;
					}
				}
			}
		}
		catch (IllegalAccessException ex) {
			ex.printStackTrace();
		}
		return Attack.POUNCE;
	}

	@Override
	public Color getColor() {
		return Color.MAGENTA;
	}

	@Override
	public String toString() {
		return "(つ ◕_◕ )つ";
	}

	private static double distance(int x1, int y1, int x2, int y2) {
		return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(x1 - x2, 2));
	}

}

@@ -192,33 +192,32 @@
 l model = null;%0A
-%0A
 %09private static 
@@ -243,16 +243,123 @@
  null;%0A%0A
+%09private boolean hasEaten = false;%0A%09private int iteration = 5;%0A%09private Direction dir = Direction.CENTER;%0A%0A
 %09private
@@ -969,24 +969,104 @@
 ();%0A%09%09%7D%0A%09%7D%0A%0A
+%09@Override%0A%09public boolean eat() %7B%0A%09%09return !hasEaten && (hasEaten = true);%0A%09%7D%0A%0A
 %09@Override%0A%09
@@ -1738,24 +1738,450 @@
 POUNCE;%0A%09%7D%0A%0A
+%09@Override%0A%09public Direction getMove() %7B%0A%09%09// I mean, hey, it works for the hippos%0A%09%09if (iteration == 5) %7B%0A%09%09%09iteration = 0;%0A%09%09%09int r = (int)(Math.random() * 4);%0A%09%09%09switch (r) %7B%0A%09%09%09%09case 0:%0A%09%09%09%09%09dir = Direction.NORTH;%0A%09%09%09%09%09break;%0A%09%09%09%09case 1:%0A%09%09%09%09%09dir = Direction.SOUTH;%0A%09%09%09%09%09break;%0A%09%09%09%09case 2:%0A%09%09%09%09%09dir = Direction.EAST;%0A%09%09%09%09%09break;%0A%09%09%09%09case 3:%0A%09%09%09%09%09dir = Direction.WEST;%0A%09%09%09%09%09break;%0A%09%09%09%7D%0A%09%09%7D%0A%09%09++iteration;%0A%09%09return dir;%0A%09%7D%0A%0A
 %09@Override%0A%09

Add logic for moving and eating