トラップインクルード・作成(1)

まずは移動経路を求めるサブルーチンの作成。

SRCで「移動」コマンドを使用した際の移動アニメーションをチェックすると、移動前x,y座標と移動後x,y座標の差をそれぞれ比較し、移動距離の絶対値が小さい方向へまず移動するようだ。(絶対値が等しい場合はx方向へまず移動)

この法則を元に、移動経路を求めるサブルーチンを作成。

// 移動経路を求めるサブルーチン
// args(1) : 移動前x座標
// args(2) : 移動前y座標
// args(3) : 移動先x座標
// args(4) : 移動先y座標
_getRoute:
	// 移動距離を求める
	Local _diff
	_diff["x"] = Args(3) - Args(1)
	_diff["y"] = Args(4) - Args(2)

	// 絶対値と符号(正負を判断)を求める
	_diff["x","abs"] = Abs(_diff["x"])
	_diff["x","sign"] = _diff["x"] / _diff["x","abs"]
	_diff["y","abs"] = Abs(_diff["y"])
	_diff["y","sign"] = _diff["y"] / _diff["y","abs"]

	// 先に進む方向を求める
	Local _before _after
	If (_diff["x","abs"] <= _diff["y","abs"]) Then
		_before = "x"
		_after = "y"
	Else
		_before = "y"
		_after = "x"
	EndIf

	Local i _pos
	// Local _route
	_pos["x"] = Args(1)
	_pos["y"] = Args(2)
	For i = 1 to _diff[_before,"abs"]
		Incr _pos[_before]
		_route[(Count(_route) + 1)] = _pos["x"] & " " & _pos["y"]
	Next
	For i = 1 to _diff[_after,"abs"]
		Incr _pos[_after]
		_route[(Count(_route) + 1)] = _pos["x"] & " " & _pos["y"]
	Next
Return


配列を返り値にできないんでこのままじゃ使えないけど、まあいいか。