-- / --
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

11 / 03
Sun

方向を表現するとき、 下は 2, 左は 4, 右は 6, 上は 8 と、 テンキーの位置に対応する数字を使ってます。 そこで困るのは、 方向を表す数字が格納された変数 direction があって、 ある座標 (x, y) から direction の方向に 1 進んだ座標を取得するときです。 コードはこんな感じ。 (rx, ry) が移動後の座標です。

var rx: Int = x
var ry: Int = y
when (direction) {
2 ->
  rx = x
  ry = y - 1
4 ->
  rx = x - 1
  ry = y
6 ->
  rx = x + 1
  ry = y
8 ->
  rx = x
  ry = y + 1
}

あるいは、 マップを使ってもっと簡略に。

val directionX: Map = mapOf(2 to x, 4 to x - 1, 6 to x + 1, 8 to x)
val directionY: Map = mapOf(2 to y - 1, 4 to y, 6 to y, 8 to y + 1)
val rx: Int = directionX[direction]
val ry: Int = directionY[direction]

さて、 これはこれで良いんですが、 この処理、 結構いろいろなところで使うんですよ。 同じコードを何度も書くのって嫌じゃないですか。 そこで、 Vector クラスというものを作って、 val vector: Vector = Vector(x, y) みたいにオブジェクト作って、 vector.inDirection(direction) で、 ほしい Vector オブジェクトが返される、 みたいにすれば良いんじゃないかと思ったんです。

で、 この Vector クラスに plus, minus とかの関数を定義して、 演算子のオーバーロードすれば、 いろいろ便利になると思うんです。 ということで、 座標の管理をこの Vector クラスで行うように、 プログラムを修正しています。

スポンサーサイト

comment ×0
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。