[過去ログ] Delphiゲームプログラミング相談室 (976レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
282
(2): 名前は開発中のものです。 [sage] 03/05/18 23:17 ID:Vqiijavw(1) AAS
>>280
280(1): 272@眠 [sage] 03/05/18 05:59 ID:GM64wXCS(1/2) AAS
>>270 >>275
昔のソース見たら、やはり Sqrt を使った >>274 の方法だった…。
よく、動いていたな〜。 この直線距離は単なる目安だったからかも。
それで、やっと”コマを動かす距離”を出せましたわ…。 コレでいいはず。

xlen := Abs(x1-x0); ylen := Abs(y1-y0);
if xlen <= (ylen div 2) then hexlen := ylen
else hexlen := xlen + ylen - (ylen div 2);

0 1 2 3 4
 1 2 3 4 5  ← 1つずらしレンガ状の移動距離を…
2 2 3 4 5
 3 3 4 5 6

0 1 2 3 4
1 2 3 4 5  ← 整えるとこうなる。
2 2 3 4 5
3 3 4 5 6
今度は(1,0)-(0,1)で2になります。

x0=1;
y0=0;
x1=0;
y1=1;
xlen = Abs(0-1) = 1;
ylen = Abs(1-0) = 1;

1 <= (1 div 2) が成立しないので、
hexlen := 1 + 1 - (1 div 2) = 2;

最終的にこれでいけました。
function GetHexLen(const P1, P2: TPoint): Integer;
var
 W, H: Integer;
begin
 W := Abs(P2.X - P1.X);
 H := Abs(P2.Y - P1.Y);
 if H <= W * 2 then
 begin
  if (Odd(P1.Y) and (P1.X >= P2.X)) or
   ((not Odd(P1.Y)) and (P1.X <= P2.X)) then
   Result := H + W - H div 2
  else
   Result := W + H div 2
 end else
  Result := H;
end;
283: 272 [sage] 03/05/19 00:13 ID:xetwIoTi(1) AAS
>>282
あう。 何度も何度もすいませんでした。
(0,0)からしか検算していなかった私のミスです。
301
(1): 名前は開発中のものです。 [sage] 03/05/29 23:33 ID:mpTwdvzD(1/2) AAS
>>300
300(1): 名前は開発中のものです。 [sage] 03/05/29 18:32 ID:N4i9Vcx6(1) AAS
遅レスですまんが

0 1 2 3 4
 1 2 3 4 5
2 2 3 4 5
 3 3 4 5 6

移動条件を全マス上下左右+左上+右下に統一しておいて
こうずらしたほうが良くない?

0 1 2 3 4
  1 2 3 4 5
  2 2 3 4 5
    3 3 4 5 6
 5 4 3 3 3 3 4 5 6
5 4 3 2 2 2 3 4 5
 4 3 2 1 1 2 3 4 5
4 3 2 1 0 1 2 3 4
 4 3 2 1 1 2 3 4 5
5 4 3 2 2 2 3 4 5
 5 4 3 3 3 3 4 5 6

が、

    5 4 3 3 3 3 4 5 6
  5 4 3 2 2 2 3 4 5
  4 3 2 1 1 2 3 4 5
4 3 2 1 0 1 2 3 4
  4 3 2 1 1 2 3 4 5
  5 4 3 2 2 2 3 4 5
    5 4 3 3 3 3 4 5 6

になるということですか。
うーん、 >>282 のように(1,0)−(0,1)が2になりそうな予感…。
ソース、ぷりーず。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.032s