package snakes; public class Player { private String name; private ISquare square; private boolean invariant() { return name != null && square != null; } public Player(String name) { this.name = name; // invariant holds only after joining a game } public void joinGame(Game game) { square = game.firstSquare(); square.enter(this); assert invariant(); } public int position() { assert invariant(); return square.position(); } public void moveForward(int moves) { assert moves > 0; square.leave(this); square = square.moveAndLand(moves); square.enter(this); } public String toString() { return name; } public ISquare square() { return square; } public boolean wins() { return square.isLastSquare(); } }