2015年02月04日

[HSP] 適当に作ったヘクスマップ描画ルーチン

hex_map_id0.png hex_map_id1.png

 ゲーム制作経験ない人が勢いで作ったので細かいところが少しおかしいかも。

#module
#const HEX_WIDTH_DEF 36 ; ヘクス横幅デフォルト(4の倍数)
#const HEX_HEIGHT_DEF 32 ; ヘクス縦幅デフォルト(2の倍数)

/* 横xi番目、縦yi番目のヘクスを横向きに描画 */
#deffunc draw_hex int xi, int yi, int scale_hex

HEX_WIDTH = HEX_WIDTH_DEF * scale_hex ; 描画するヘクス横幅
HEX_HEIGHT = HEX_HEIGHT_DEF * scale_hex ; 描画するヘクス縦幅

if (xi \ 2) { ; 横奇数番目
yoffset = HEX_HEIGHT / 2 ; 縦方向の描画位置を半分ずらす
}
else {
yoffset = 0
}

xstart = ( HEX_WIDTH / 4 * 3 ) * xi ; ヘクスをぴったり囲む四角形の左上X座標
ystart = HEX_HEIGHT * yi + yoffset ; ヘクスをぴったり囲む四角形の左上Y座標

; 左上の頂点から左回りで線を引いていく
line xstart + ( HEX_WIDTH / 4 ), ystart, xstart, ystart + ( HEX_HEIGHT / 2 )
line xstart, ystart + ( HEX_HEIGHT / 2 ), xstart + ( HEX_WIDTH / 4 ), ystart + HEX_HEIGHT
line xstart + ( HEX_WIDTH / 4 ), ystart + HEX_HEIGHT, xstart + ( HEX_WIDTH / 4 * 3 ), ystart + HEX_HEIGHT
line xstart + ( HEX_WIDTH / 4 * 3 ), ystart + HEX_HEIGHT, xstart + HEX_WIDTH, ystart + ( HEX_HEIGHT / 2 )
line xstart + HEX_WIDTH, ystart + ( HEX_HEIGHT / 2 ), xstart + ( HEX_WIDTH / 4 * 3 ), ystart
line xstart + ( HEX_WIDTH / 4 * 3 ), ystart, xstart + ( HEX_WIDTH / 4 ), ystart
return

/* 指定されたマス数・倍率のマップを横向きヘクスで描画 */
#deffunc draw_hex_map int xnum, int ynum, int scale_map, int winid

; 描画に必要なサイズでウィンドウを初期化
map_width = ( ( HEX_WIDTH_DEF / 4 * 3 * xnum ) + ( HEX_WIDTH_DEF / 4 ) ) * scale_map
map_height = ( HEX_HEIGHT_DEF * ynum ) * scale_map
screen winid, map_width, map_height
title "ID " + winid

repeat xnum
xcnt = cnt
if ( xcnt \ 2 ) { ; 横奇数番目
ynum_cur = ynum - 1 ; 1個少なくてよい
}
else {
ynum_cur = ynum
}
repeat ynum_cur
draw_hex xcnt, cnt, scale_map
loop
loop
return "" + map_width + "," + map_height ; 描画サイズを返す
#global

; マス数・倍率・ウィンドウIDを指定してマップ描画
xnum = 7 ; 横マス数
ynum = 5 ; 縦マス数
scale = 1 ; 描画倍率(正整数)
id = 0 ; 描画するウィンドウID
draw_hex_map xnum, ynum, scale, id

; 描画サイズ取得
sizestr = refstr
split sizestr, ",", wid, hei
wid = int( wid )
hei = int( hei )

; 90度回転して別ウィンドウにコピー
screen 1, hei, wid
title "ID 1"
gmode 0, wid, hei
pos ( hei / 2 ), ( wid / 2 )
grotate id, 0, 0, 1.57, wid, hei
stop
posted by chrono at 19:40| Comment(0) | TrackBack(0) | HSP
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/113175825
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック