2023/09/12(火) [n年前の日記]
#1 [hsp] 疑似3D道路その9
_昨日
の続き。HSP 3.6 を使って、疑似3D道路が作れないか試しているところ。環境は Windows10 x64 22H2。
仮想画面の解像度を変更した際に、 BG/遠景の見た目が変わってしまっていたので、HSP の gzoom を使って拡大縮小描画をして、見た目を合わせようとしているところ。しかし、gzoom に与えるべき数値を計算するあたりで頭がこんがらがってきた。とりあえず、BG表示しかしないテストプログラムを書いて実験しよう…。
 仮想画面の解像度を変更した際に、 BG/遠景の見た目が変わってしまっていたので、HSP の gzoom を使って拡大縮小描画をして、見た目を合わせようとしているところ。しかし、gzoom に与えるべき数値を計算するあたりで頭がこんがらがってきた。とりあえず、BG表示しかしないテストプログラムを書いて実験しよう…。
◎ moduleとdeffunc :
 HSPは基本的に、変数が全てグローバル変数になってしまう。各処理の中でしか使わない変数についてはローカル変数(局所変数)にしたいのだけど、何か手は無いものか。
そのあたりをググっていたら、#module と #deffunc を使えばどうにかなりそうだと分かってきた。HSP 3.0以降で使えるらしい。
_HSP3 モジュール機能ガイド
_OHDL - #deffunc
_HSPで関数や局所変数を使いたい
_HSP3.0-変数の有効範囲
要するに、#module、#deffunc と #global で挟み込めば、その中で用意した変数は他から見えなくなるのだな…。
ただし、外で用意した変数も中から見えなくなるので、処理に必要な変数は引数として全部渡すようにしないといけないのだろう。一応、「変数名@」と書くことで、モジュール外の変数を参照することもできるようではあるけど、推奨はされてない模様。
そのあたりをググっていたら、#module と #deffunc を使えばどうにかなりそうだと分かってきた。HSP 3.0以降で使えるらしい。
_HSP3 モジュール機能ガイド
_OHDL - #deffunc
_HSPで関数や局所変数を使いたい
_HSP3.0-変数の有効範囲
#module
#deffunc test int a
    b = a + 1
    ; 何か処理
    return
#global
要するに、#module、#deffunc と #global で挟み込めば、その中で用意した変数は他から見えなくなるのだな…。
ただし、外で用意した変数も中から見えなくなるので、処理に必要な変数は引数として全部渡すようにしないといけないのだろう。一応、「変数名@」と書くことで、モジュール外の変数を参照することもできるようではあるけど、推奨はされてない模様。
◎ 剰余の結果がわからない :
 HSP は、「3 \ 2」といった感じで、「\」を使うと剰余(余り)を求めることができる。一般的なプログラミング言語なら、「%」を使うことが多いだろうか。「3 % 2」みたいな書き方が多い、そんなイメージがあるのだけど。
さておき。プラス値はともかく、マイナス値に対して剰余を求めたらどうなるのかが分からなかったので、テストプログラムを書いて調べてみた。
マイナス値が返ってくるのだな。
このあたり、Python の IDLE や、Ruby の irb のように、対話形式で HSP の言語仕様を確認できる何かは無いのだろうか。
余談。Python IDLE や Ruby irb で -41 % 20 をしたら 19 になった。これが C言語なら、試してないけどマイナス値になるそうで。プログラミング言語によって結果が違ってくるのだな。
_【C言語】負の値に対する剰余演算の結果まとめ | だえうホームページ
さておき。プラス値はともかく、マイナス値に対して剰余を求めたらどうなるのかが分からなかったので、テストプログラムを書いて調べてみた。
; 剰余の結果がどうなるかテスト
    #packopt name "mod_test"    ; exe filename
    #packopt type 0             ; generate ".exe"
    onkey goto *jobend
    
*mainloop
    v0 = -41
    v1 = 20
    
    cls 4
    
    font "Arial", 18, 1
    color 255, 255, 255
    pos 4, 4
    mes "mod : " + v0 + " , " + v1 + " = " + int(v0 \ v1)
    
    await (1000 / 60)
    goto *mainloop
    
*jobend
    end
マイナス値が返ってくるのだな。
このあたり、Python の IDLE や、Ruby の irb のように、対話形式で HSP の言語仕様を確認できる何かは無いのだろうか。
余談。Python IDLE や Ruby irb で -41 % 20 をしたら 19 になった。これが C言語なら、試してないけどマイナス値になるそうで。プログラミング言語によって結果が違ってくるのだな。
_【C言語】負の値に対する剰余演算の結果まとめ | だえうホームページ
[   ツッコむ ]
以上、1 日分です。
