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 boolean hasEaten = false;
	private int iteration = 5;
	private Direction dir = Direction.CENTER;

	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
	public boolean eat() {
		return !hasEaten && (hasEaten = true);
	}

	@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 Direction getMove() {
		// I mean, hey, it works for the hippos
		if (iteration == 5) {
			iteration = 0;
			int r = (int)(Math.random() * 4);
			switch (r) {
				case 0:
					dir = Direction.NORTH;
					break;
				case 1:
					dir = Direction.SOUTH;
					break;
				case 2:
					dir = Direction.EAST;
					break;
				case 3:
					dir = Direction.WEST;
					break;
			}
		}
		++iteration;
		return dir;
	}

	@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));
	}

}

@@ -243,16 +243,47 @@
  null;%0A%0A
+%09private final String donger;%0A%0A
 %09private
@@ -381,16 +381,350 @@
 ENTER;%0A%0A
+%09private static final String%5B%5D dongers = %7B%0A%09%09%09%22(%E3%81%A4 %E2%97%95_%E2%97%95)%E3%81%A4%22,%0A%09%09%09%22(%E3%81%A4%C2%B0%E3%83%AE%C2%B0)%E3%81%A4%22,%0A%09%09%09%22%E2%95%B0(%E2%97%95%E3%83%AE %E2%97%95)%E2%95%AF%22,%0A%09%09%09%22(%C2%B4%E2%88%80 %60)%22,%0A%09%09%09%22%E2%94%94%E2%95%8F%EF%BD%A5%E3%83%AE %EF%BD%A5%E2%95%8F%E2%94%90%22,%0A%09%09%09%22%E1%83%9A(%E2%9D%9B%D0%94%E2%9D%9B%E1%83%9A)%22%0A%09%09%09// %3Etfw no lenny%0A%09%09%09// %3Etfw no raise your dongers%0A%09%7D;%0A%0A%09public HuskyRoncace() %7B%0A%09%09donger = dongers%5B(int)(Math.random() * dongers.length)%5D;%0A%09%7D%0A%0A%09@Override%0A%09public String toString() %7B%0A%09%09return donger;%0A%09%7D%0A%0A
 %09private
@@ -2603,73 +2603,8 @@
 %09%7D%0A%0A
-%09@Override%0A%09public String toString() %7B%0A%09%09return %22(%E3%81%A4 %E2%97%95_%E2%97%95 )%E3%81%A4%22;%0A%09%7D%0A%0A
 %09pri

Increase diversity of Huskies