package j2.lesson02;
/**
* 課題1504 - 解答例.
* 二次元座標上を動き回る亀を表すクラス.
* @author arakawa
* @version $Id: Turtle_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class Turtle {
// 内部表現
/** x 座標. */
int x;
/** y 座標. */
int y;
/**
* 現在の向きを表す。
* <ul>
* <li> 0 - North </li>
* <li> 1 - East </li>
* <li> 2 - South </li>
* <li> 3 - West </li>
* </ul>
*/
int direction;
/**
* Turtle インスタンスを生成する。
* 初期値は (x,y)=(0,0), direction=North.
*/
public Turtle() {
this.x = 0;
this.y = 0;
this.direction = 0;
}
/**
* 現在向いている方向に1だけ移動する。
* つまり、以下のように移動する。
* <ul>
* <li> North を向いている → y 方向へ +1 移動する </li>
* <li> South を向いている → y 方向へ -1 移動する </li>
* <li> East を向いている → x 方向へ +1 移動する </li>
* <li> West を向いている → x 方向へ -1 移動する </li>
* </ul>
* @return 動作後の自分自身
*/
public Turtle move() {
switch(this.direction) {
case 0:
this.y++;
break;
case 1:
this.x++;
break;
case 2:
this.y--;
break;
case 3:
this.x--;
break;
default:
// do nothing
break;
}
return this;
}
/**
* 90度右へ向く。
* @return 動作後の自分自身
*/
public Turtle turnRight() {
// direction を 1 足す
this.direction = (this.direction + 1) % 4;
return this;
}
/**
* 90度左へ向く。
* @return 動作後の自分自身
*/
public Turtle turnLeft() {
// direction を 1 引く
this.direction = (this.direction + 3) % 4;
return this;
}
/**
* 現在位置を返す。
* @return 現在位置
*/
public Point getCurrentPosition() {
return new Point(this.x, this.y);
}
/**
* テストプログラム。自由に作成してよい。
* @param args 無視される
*/
public static void main(String[] args) {
Turtle t = new Turtle();
// そのまま 1 進む
t.move();
// 右を向いて 2 進む
t.turnRight().move().move();
// 左を向いて 2 進む
t.turnLeft().move().move();
Point p = t.getCurrentPosition();
System.out.println("(" + p.x + ", " + p.y + ")");
}
}
|