HSP3プログラミング入門講座
powered by Let's HSP!
無料のWindows向けプログラミングツール「HSP3」(公式サイト 「HSPTV!」)で、自前の命令や関数を定義してスクリプトから利用 できるようにしてみましょう。
スクリプト内で一定のパターン化した処理がたくさん存在する場合は、処理を1つにまとめる形で新規命令 や新規関数を定義し、モジュール化ておくと便利です。モジュールファイルは他のプログラムのスクリプトにも流用できます。HSP付属リファレンスでは下のファイルで解説されてます。
- プログラミングマニュアル1・基本仕様ガイド (hspprog.htm) → 3. 拡張文法 → モジュール
#deffunc命令
#deffunc命令は新規に命令を定義するプロプロセッサ命令です。
お題として、位置指定を行うpos命令と文字描画を行うmes指定を合体させた命令とういうのを用意してみましょう。
// 一般的な処理 pos, 100, 150 mes "Hello World!" pos 50, 250 mes "Let's HSP!"
// サブルーチン処理で再現 moji = "Hello World!" itix = 100 itiy = 150 gosub *jump moji = "Let's HSP!" itix = 50 itiy = 250 gosub *jump stop *jump pos itix, itiy mes moji return
// 新規命令で定義 // posmes "文字列", X座標, Y座標 #module #deffunc posmes str p1, int p2, int p3 pos p2, p3 mes p1 return #global posmes "Hello World!", 100, 150 posmes "Let's HSP!", 50, 250
まず、#deffunc命令は通常「#module〜#global」でくくります。#deffunc命令の1番目のパラメータは 定義するユニークな命令名です。他の命令や関数、変数の名前と被ったりしないようにしてください。
2番目以降のパラメータは新規命令のパラメータを宣言していきます。エイリアス名の「str」は文字列、
「int」は整数値を意味します。ここでは触れませんが「double」は実数値(小数点数値)を意味します。
「p1〜p3」というのは、この定義内で利用する変数名です。ここではパラメータ1〜3という意味をこめて、
このような名前にしてあります。そして、実際にpos命令とmes命令にこれを反映させてます。
最後に必ず処理をreturnさせてください。
この一連の処理をサブルーチンで再現したものもありますが、1度命令を定義しておけば後々楽という のがよく分かるかと思います。
次のお題として、指定した数値を100倍した結果を返す命令です。#deffunc命令の「var」は変数を意味し、 このパラメータに結果が返ります。また、同じパラメータに10000倍した結果を返すことも可能です。
#module #deffunc bai var p1, int p2 p1 = p2 * 100 return #deffunc baibai var p1 p1 *= 10000 return #global value1 = 777 bai kekka, value1 mes kekka value2 = 5 bai kekka, value2 mes kekka value3 = 10 baibai value3 mes value3
最後に配列変数の「array」です。100倍にした結果を返します。
#module #deffunc sample_array array p1 foreach p1 p1.cnt *= 100 loop return #global value = 5, 4, 3, 2, 1 sample_array value foreach value mes value.cnt loop
#defcfunc命令
#defcfunc命令は新規に関数を定義するプロプロセッサ命令です。使用方法は#deffunc命令
と同じです。
上の100倍した結果を返す命令というのは関数形式にした方がスッキリします。必ずreturnにパラメータを
指定して結果を返すようにしてください。
#module #defcfunc bai int p1 return p1 * 100 #global value1 = 777 mes bai(value1) value2 = 5 mes bai(value2)
配列変数を意味する「array」を使って加算する。文字同士を結合する。
#module #defcfunc tasu array p1 return p1.0 + p1.1 #defcfunc ketugo str p1, str p2 return p1 + p2 #global value = 123, 321 mes tasu(value) mes ketugo("あいうえお", "かきくけこ")
メモ
新規に定義された命令や関数の処理を別ファイルにすれば、いわゆるモジュールファイルになります。
「#module〜#global」の範囲を別ファイルにして、メインのスクリプトからこのファイルを#includeします。
たとえば、文字のゆっくり表示関連のtext命令は、HSP2(HSP 2.x)では標準命令でしたが、HSP3(HSP 3.x)では廃止されました。
そこで、モジュールファイル「hsp3util.as」にて、#deffunc命令でtext命令やemes命令を定義して、実際の処理を
標準命令で再現させてるわけです。
ちなみに、新規命令や新規関数はコード量が減った結果として、実行ファイルのサイズ減量につながる
場合があります。ただ、あらかじめ処理が定義されてるからといって高速化するようなことはないでしょう。
このページで提示してるサンプルは、あくまで説明のためのコードであって、実際にはこのような小さな処理
のためだけに、わざわざ定義を用意する効果はほとんどありません。
#deffunc命令と#defcfun命令で指定するパラメータタイプ(型)の入出力表。
型 | IN | OUT |
int (整数値) | O | - |
str (文字列) | O | - |
double (実数値) | O | - |
var (変数) | O | O |
array (配列変数) | O | O |
キーワード de HSP
- 無料プログラミング
- HSPダウンロード
- 実行ファイル作成
- HSP動作環境
- 演算子
- 文字列操作
- 命令・関数一覧
- アイコン変更
- PACKFILE
- PACKFILE編集
- #packopt
- #deffunc
- HSPエラー
- HSPエラー番号
- HSPエラー7
- HSPエラー12
- HSPエラー13
- HSPエラー33
- HSPエラー38
- HSPエラー41
- ホームページ作成
- バージョン
- フォント
- オブジェクト
- ボタン
- 入力ボックス
- オブジェクト非表示
- Win32 API
- メニュー
- HSPLet
- サウンド再生
- 画像
- PNGファイル
- HSP質問掲示板
- デバッグ
- ドラッグ&ドロップ
- ブラウザ作成
- HSP書籍本