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

2015年01月26日

作業日誌

 GtkFontChooserDialogのサンプルプログラム作成。

 やっぱbinフォルダにPATHを通さずに使おうとするのは、不毛なんだろうなあ。Windows向けGTK+アプリケーションを他人に使ってもらう時は、バンドルアーカイブもダウンロードしてもらうのが一番簡単?
posted by chrono at 15:02| Comment(0) | TrackBack(0) | 日記、雑文

2015年01月25日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 メッセージダイアログ、色選択ダイアログのサンプルプログラム作成。

 クリップボード、プログレスバー、スピナーの簡単な説明とサンプルプログラム作成。

2015年01月22日

WindowsでPATHを通さずにGtkFileChooserを動かす方法

 Windowsでバイナリ版GTK+を使う場合、アーカイブのbinフォルダにPATHを通してしまえば、基本的に不都合なく動くっぽい。

 ただ、PATHが通っていない時に最低限必要なファイルが知りたかったので、いろいろ試して調べてみた。

 DLLがプログラムと同じフォルダにあれば、大抵のウィジェットは動くが、動かないものの一つがGtkFileChooser系。

 これを動かすには、アーカイブのshare\glib-2.0\schemasフォルダを同じ場所にコピーしておけばいい。(HSP経由で動作確認)
posted by chrono at 05:52| Comment(0) | TrackBack(0) | Windows

2015年01月12日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 【主な変更】

 2章に「ライブラリの基本的な構成と使い方」の節を追加。

 9章「メニューバー(GtkMenuBar)とツールバー(GtkToolbar)」の基本的な説明とサンプルプログラムを書いた。

2015年01月04日

人生の目標

 最近、いまさらながら、人生の目的とか目標とか考えたりしてるんだけど、自分の命よりも長生きする何かをひとつでも作る、ってのはどうかなと思った。

 ただ自分の好きなプログラミングでこれをやるのは至難の業な気がする。他人がバージョンアップしてくれるのを生きてるとみなすとしても、それこそ革新的なOSとか作らない限り無理だ。

 ていうか他のものでも難しさは似たようなものか? 普通の人は、こういう時「子供」とか考えるんかな?
posted by chrono at 14:27| Comment(0) | TrackBack(0) | 日記、雑文

2014年12月29日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 EPUB3とMOBIのデータも公開。ウェブ版は、画面の小さいタブレットで読みやすいように作ったEPUB3データのコンテンツ部分をほぼそのままアップしているので、ページ分け、段落分けされまくりになっている。

 コンボボックスの説明少しとサンプルスクリプトを書いた。+細かい修正。

 GtkTreeModel系はなんとか使えそうな気がする。

2014年12月25日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを少し更新。

 ボタン系ウィジェットの基本説明をだいだい書いた。

 コンボボックスとかのGtkTreeModelを使うウィジェットをなんとかまともに動かしたい。


 部屋のオイルヒーターのスイッチが故障して、半分の威力しか出ない。寒い。

2014年12月18日

HSPからGTK+3を使うためのチュートリアル更新

 HSPからGTK+3を使うためのチュートリアルを更新。

 新しい内容はほとんどない。

 チュートリアルの名前を変更。

 章の順番を入れ替え。

 ボタンウィジェットのサンプルスクリプトにラベルのフォントを設定する処理を追加。

 リンクボタンウィジェットの節を再度追加。

 GtkTreeModel系がHSPでも使えるかも。

2014年12月07日

HSPで学ぶGTK+3チュートリアル更新

 HSPで学ぶGTK+3チュートリアルを更新。

 Windows版のGTK+では、ウィジェット内のURLリンクが動作しないため、リンクボタンの節は削除した。

 HSPで、g_signal_connect関数で設定したコールバック関数の引数を利用すると、システムエラーでスクリプトが強制終了することが多いので、引数を利用しないことを推奨する方向で内容を修正する予定。

 GtkTreeModelを利用するウィジェットがHSPでうまく動かないので、最悪それらのウィジェットを扱う章を全部削除するかも。