/** 方向クラス */

public class Direction {

	int direction;	//現在どの方向を向いているか

	static final int UP = 0;
	static final int RIGHT = 1;
	static final int DOWN = 2;
	static final int LEFT = 3;

	public Direction(int direction) {
		this.direction = direction;
	}

	public Direction(Direction direction) {
		this.direction = direction.direction;
	}

	public int getDirection() { return direction; }
	public void setDirection( int direction ) { this.direction = direction; }
	public void setDirection( Direction direction ) { this.direction = direction.direction; }

	public int getContrary() {

		int retDir;

		switch (direction) {
			case UP :
				retDir = DOWN;
				break;
			case RIGHT :
				retDir = LEFT;
				break;
			case DOWN :
				retDir = UP;
				break;
			case LEFT :
				retDir = RIGHT;
				break;
			default :
				retDir = DOWN;
				break;
		}

		return retDir;

	}

	public int getNextX() {
		int retX = 0;

		switch (direction) {
			case 1 : retX++;
				break;
			case 3 : retX--;
				break;
		}

		return retX;
	}
	public int getNextY() {
		int retY = 0;

		switch (direction) {
			case 0 : retY--;
				break;
			case 2 : retY++;
				break;
		}

		return retY;
	}

	/** 引数として与えられた二点の座標をもとに、方向を算出するルーチン */
	public void calculateDirectionStoD(int sourceX, int sourceY, int destX, int destY) {

		if (sourceY < destY) {
		// sourceから見てdest座標は下かも。。。
			if (sourceX < destX)
				if ( (destY - sourceY) < (destX - sourceX) )
					direction = RIGHT; // その座標は右。
				else
					direction = DOWN; // その座標は下。
			else
				if ( (destY - sourceY) < (sourceX - destX) )
					direction = LEFT; // その座標は左。
				else
					direction = DOWN; // その座標は下。

		}
		else {
		// sourceから見てdest座標は上かも。。。
			if (sourceX < destX)
				if ( (sourceY-destY) < (destX - sourceX) )
					direction = RIGHT; // その座標は右。
				else
					direction = UP; // その座標は上。
			else
				if ( (sourceY-destY) < (sourceX - destX) )
					direction = LEFT; // その座標は左。
				else
					direction = UP; // その座標は上。
		}
	}

	/** 自身と引数として与えられたDirection二点の座標をもとに、相対的な方向を算出するルーチン */

	public void leftTurn() {
		direction--;
		direction &= 3;
	}
	public void rightTurn() {
		direction++;
		direction &= 3;
	}
	public void contraryTurn() {
		direction += 2;
		direction &= 3;
	}

}