HSPサンプルスクリプト
00.03.03〜カウンタ

 HSPのサンプルスクリプトです。
 ほとんどは20行くらいで、長いものでも80行弱です(一部例外あり)。
 ご自由にお使いください。
全部ダウンロード(185kバイト、長いサンプルやhtmlを含む)
最近の更新内容
11.10.15 initpal.asを追加した
11.10.12 ほとんどのスクリプトについてHSP3版を公開した
08.10.07 tournament.asのバグを修正した(なぜか実害なし)
08.10.02 tournament.ascalendar.asを追加した
07.11.07 packlist.asをHSP3.1に対応させた
07.03.16 packlist.asをHSP3.0に対応させた
分類別目次
画像
  背景とキャラクタの重ね合わせ
  アニメーション
  キャラクタの移動とスクロール
  アイコンの表示・書き換え
  ヘクスマップ
  閉じた図形内の塗りつぶし
マウス     
  ウィンドウ内判定
キー
  アルファベット・数字判定
  getkeyのキーコード
ウィンドウ   
  screen,ginfo,winx,winy
  ドラッグによるウィンドウ移動
  ウィンドウをアクティブにする(Win98以降)
文字列
  csvデータの分割
  16進→数値変換
  全角文字の処理
  8進←→数値変換
  2進←→数値変換
  JIS→シフトJIS
  16進←→10進変換(32ビット以上)
ファイル・フォルダ
  ファイルのドラッグ&ドロップ
  インターネットショートカット
  特定フォルダ以下全ファイル処理
変数
  複数配列の保存
オブジェクト
  スクロールバー
  グループボックス
サウンド・ビデオ
  MPEGプレイ
  MCIデバイスタイプ
exeファイル
  exeファイル内packファイルリスト
クリップボード
  コピー
デバッグ
  デバッグウィンドウの変数ソート
総合
  関数マクロ
  スロットマシン
  乱数で迷路作成
  ボールのバウンドのシミュレート
  花火
  ヒット&ブロー
  キャラ探し
  3回戦ジャンケン
  雪
  ハイパーリンク
  トーナメント表の作成
  リーグ戦の組み合わせリスト
  カレンダー
  定型処理簡略化モジュール



【総合】

macrofunc.as for HSP2 for HSP3
 HSP2.6のマクロを使って関数を書きました。
以下の関数があります。
absf()絶対値
sign()符号(-1 or 0 or 1)
iff()条件によって2つの数値の一方を選ぶ
max2(),max3()最大値
min2(),min3()最小値
logicand()亜論理積
logicnot()亜論理否定
bitnot()ビットごとの否定
 詳しい使い方はスクリプトの注釈を参照してください。
 注意が2つあります。
  • 文字列に変換される式(先頭が文字列の式)の中では使えません。
  • 関数マクロの引数に関数マクロを書くことはできません(hsp2.61以降ではできるようになりました。ただし、かっこのネスティングは32重までという制限にご注意ください。マクロを展開した結果がこの制限に引っかかる可能性があります)。
 common¥hspdef.asに追加しておくといいでしょう。マクロは、モジュールや拡張プラグインと違って、使わなければ配布ファイルの容量を無駄に増やすことがないのがいいところです。

slot.as for HSP2 for HSP3
 スロットマシンです。

makemaze.as for HSP2 for HSP3
 乱数で迷路を作って表示するサンプルです。

bound.as for HSP2 for HSP3
 ボールのバウンドをシミュレートします。放物線の方程式を使うより、速度と加速度を使う方がリアルになります。反発係数と摩擦係数を調整すれば、いろいろなバウンドに対応させることができます。

boundx.as for HSP2 for HSP3
 上と同じことをDirectXを使ってやってみました。ボールではなくサイコロを想定しています。

ffire.as for HSP2 for HSP3
 花火のように点を円形に広がらせます。

HitBlow8.as for HSP2 for HSP3
 おにたまさん(HSPの作者)のページにあったヒット&ブロー(8桁になっている上、寧ろヒット&ヒットと言うべきか?)を作ってみました(実は、自分がじっくりやってみたかっただけだったりする)。マスターマインドの数字版の変わり種と言えばわかる人もいるかもしれません。
 初めは当てずっぽうで、1〜9の数字からなる8桁の数を答え、正しい数字がいくつあったかをヒントに、答を考えるパズルゲームです。
 うまい人なら、平均10回くらい、最悪15回くらいで正解できるはずです。普通の4桁のヒット&ブローなら、平均7回くらいだったと思うので、けっこう、難しいです。1発で当たる確率は約36万分の1になります。
 Exforce.dllが必要です。

HiddenCh.as for HSP2 for HSP3
 ウィンドウ内に隠れているキャラクタをクリックして探すという、子供が喜びそうなゲームです。

janken3.as for HSP2 for HSP3
 HSP掲示板で、「例えば3回戦ジャンケンはどんな風に作ったらいいんでしょう?」という質問に答えて作ったものです。
 Exforce.dllが必要ですが、ない場合に動かす方法がスクリプトに書いてあります。

snow.as for HSP2 for HSP3
 雪が降っているようなイメージの環境ソフト(^_^;;です。

hyperlink.as for HSP2 for HSP3
 HTMLのハイパーリンクのようなことをします。

mcomm100.lzh for HSP2(31kバイト)
 定型処理簡略化モジュールとそのサンプルのパッケージです。
 以下の命令があります。
mcmdlinecmdlineが空のとき自動ファイル選択
mstatエラーチェックの手間を軽減
mexistファイルがないとき自動ダイアログ表示
mdirlistフォルダ名の終わりが「¥」のとき自動削除
 anthspex.dllを使っています。

league.as for HSP2 for HSP3
 チーム数を入力すると、リーグ戦の可能な組み合わせをリストアップします。
 8チーム以上だと、最後まで出力させるには、かなりの時間を要します。

tournament.as for HSP2 for HSP3
 チーム数を入力すると、トーナメント表(線のみ)を表示します。

calendar.as for HSP2 for HSP3
 紀元前46年から(日本では1873年から)有効なカレンダーです。ただし、異説もあります。



【デバッグ】

SortDbgW.as for HSP2
 スクリプトに以下の1行を追加するだけで、デバッグウィンドウの変数リストがアルファベット順にソートされる(並べ替えられる)というスクリプトです。ただし、エラーが起きたときはソートされません。

#include "SortDbgW.as"

 最初の1回だけ、準備が必要です。準備作業についてはスクリプトの注釈を参照してください。
 anthspex.dllを使っています。
 HSP2.6に対応しています。



【変数】

savevars.as for HSP2 for HSP3
 複数配列(数値・文字列)を1つのファイルに保存するサンプル。
なお、単純数値変数は、dup命令によって1つの配列にまとめることができます。



【ウィンドウ】

ginfo.as for HSP2 for HSP3
 screen命令、ginfo命令、winx,winyについて、より深く理解するためのサンプルです。
 スクリプトを読むことより、実行結果を読んで分析することが重要です。

movescr.as for HSP2 for HSP3
 ドラッグによるウィンドウ移動のサンプルです。
 bgscrで描いたタイトルバーのないウィンドウをマウスのドラッグによって動かします。

winact.as for HSP2 for HSP3
 Windows95では、「gsel id,1」でウィンドウをアクティブにすることができますが、Windows98以降ではマイクロソフトの仕様変更(私に言わせればバグ)のため、できない場合があります。
 このスクリプトは、Windows98以降で確実にウィンドウをアクティブにするモジュールと、その使い方のサンプルです。
 サンプルは、メモ帳を起動し、3秒後にウィンドウ2をアクティブにします。
 なお、このモジュールは、Windows95でも「gsel id,1」と同じ機能の命令として使えます。
 使用しているWin32APIは、さくらさんに教えてもらったものです。
 WindowsXPでは、このスクリプトでもダメです。hsp2はHSP2掲示板過去ログの[19319]、hsp3はさくらさんのHPをご覧ください。



【オブジェクト】

scrollbar.as for HSP2 for HSP3
 スクロールバーを描画・制御するモジュールです。
 オブジェクト(コントロール)ではなく、自分で描いて自分で制御しています。
 HSPのcommonフォルダに置いてください。
 sbmake,sbget,sbsetの3つの命令があります。各命令の使い方は、スクリプト先頭のコメントを参照してください。また、下のサンプルも参照してください。
 マウスホイールには対応していません。
 あくまでも、スクロールバーの描画・制御をしているだけなので、スクロール領域内の表示は、sbgetで得られる値によって描画する必要があります。
 ウィンドウIDの31を使用しています。

scrlsmp.as for HSP2 for HSP3
 上のスクロールバーモジュールの使い方を示すサンプルです。
 同じフォルダに、HSPのsample¥demo¥ONIINFO.JPG(hsp3ではsky_bg.jpg)を置いてください。

groupbox.as for HSP2 for HSP3
 グループボックスのサンプルです。
 objsendを使ったグループボックスには問題があるため(マニュアルの「以前のバージョンからの変更点(アップデートガイド) (update.htm)」参照)、グループボックスを描くサブルーチンを作りました。
 その使い方のサンプルです。



【マウス】

mouse.as for HSP2 for HSP3
 mousex,mouseyでマウスカーソルの座標を取得することができますが、これには以下のような欠点があります。
  1. マウスカーソルがウィンドウの描画領域外にあることを検出できない
  2. マウスカーソルが、HSPのどのウィンドウ上にあっても、そのウィンドウ上の座標を返す
  3. マウスカーソルがオブジェクト上にあるとき、誤った座標を返す
 2は、寧ろ便利な場合もあるでしょうが、不便な場合もあるでしょう。
 そこで、マウスカーソルが特定のウィンドウ上にあり、かつそのウィンドウがアクティブな場合のみ、マウスカーソル座標をタイトルバーに表示するサンプルスクリプトを作りました。



【キー】

inkey.as for HSP2 for HSP3
 押したキーの文字をそのまま表示するサンプルです。
 ただし、数字とアルファベットしか対応していません。
 通常、文字入力はinput命令で行ないますが、何らかの理由でキーを直接読みたい場合のサンプルです。

getkey.as for HSP2 for HSP3
 getkeyのキーコードを調べるためのスクリプトです。
 キーを押すとコードを表示します。
 キーボードによっては3個以上の同時押しを検知できない場合がありますが、このスクリプトを使うと、目的の組み合わせを検出できるか調べることができます。また、代替の組み合わせを探すためにも使えます。
 このスクリプト自体は最大10個の同時押しまで検出できます。ただし、PC互換機では1つのキーが複数のコードに対応する場合があり、一度押すと消えないコードもあるため、10個以下しか押してなくても表示できないコードが生じる場合があります。



【画像】

put.as for HSP2 for HSP3
 背景とキャラクタの重ね合わせ表示、およびアニメーションのサンプルです。
 HSPをインストールしたフォルダのsample¥demoにあるOniinfo.jpgとHsplogo8.mag(HSP3ならsky_bg.jpgとhsplogo8.bmp)をこのスクリプトと同じフォルダに置いてください。

charmove.as for HSP2 for HSP3
 RPG等のキャラクタの移動のサンプルです。
 矢印キーを押すとキャラクタ(矢印)が移動します。

obstacle.as for HSP2 for HSP3
 charmove.asにマップを設定して障害物があると進めないようにしたものです。
 マップデータまで含まれるので、けっこう長いです。
 charmove.asがわかっていれば理解しやすいでしょう。
 先頭の「dot=2」を書き換えると任意のドット数ずつ移動させることができます。

scroll.as for HSP2 for HSP3
 obstacle.asのマップを広げてスクロールするようにしたものです。
 obstacle.asがわかっていれば理解しやすいでしょう。
 先頭の「dot=4」を書き換えると任意のドット数ずつスクロールさせることができます。

scroll2.as for HSP2 for HSP3
 scroll.asと同じですが、bufferにマップ全体を描くのが現実的でない場合のサンプルです。

animove.as(animv103.lzh) for HSP2 for HSP3
 scroll2.asに2パターンアニメを追加したものです。
Ver. 1.03
11.10.12
  • HSP3用スクリプトを同梱した
Ver. 1.02
04.12.18
  • WinXP+HSP2.61で、BGMの継ぎ目で2秒ほど止まるのを直した(sndloadをやめてmciにした)
  • WinXPで思いのほか遅かったのでintervalを減らした
  • 斜め移動をしやすくした(上下優先)
Ver. 1.01
04.06.27
  • char.bmpとmapchar.bmpのパレットを統一したので、少し速くなった
  • ドキュメントに加筆した

initpal.as for HSP3
 HSP3でパレットをHSP2と同じに設定するinitpal命令のモジュールです。
 HSP3のcommonフォルダに置いておき、パレットモード画面を使っているHSP2用スクリプトをHSP3用に変換した場合、頭に「#include "initpal.as"」と書いてinitpal(パラメータなし)を実行しておくといいでしょう。最初に一度だけ実行すれば、その後に実行されるscreen, buffer, bgscrすべてに対して有効です。
 ただし、元のスクリプト内にpalette命令がある場合、HSP3では、その後で実行されるパレットモードのscreen,buffer,bgscrに影響することに注意してください。そうした影響を排除するにはscreen等を実行する度にinitpalを実行する必要があります。
 下のinitpalSample.asも参照してください。

initpalSample.as for HSP3
 上記initpalモジュールのサンプルスクリプトです。

loadicon.as for HSP2
 .icoファイルを読み込んで表示します。2色・16色・256色に対応しています。
 Tomさんのiconrewr.dllのソースを参考にしました。

ldexeico.as for HSP2 for HSP3
 .exeや.dllファイルからアイコンを読み込んで表示します。2色・16色・256色に対応しています。
 少し長いです。
 Tomさんのiconrewr.dllのソースを参考にしました。

chngicon.as for HSP2 for HSP3
 .exeファイルのアイコンを.icoファイルのアイコンに書き換えます。
 かなり長いです。
 Tomさんのiconrewr.dllのソースを参考にしました。
 HSP2用もHSP3用もHSP2で作成したexeファイルのみに対応しています。

hexmap.as for HSP2 for HSP3
 シミュレーションウォーゲームで使われるヘクスマップの枠を描きます。

paint.as for HSP2 for HSP3
 ドラッグで閉じた図形を描いてください。内部で右クリックすると塗りつぶします。
 遅いので、ボードゲーム等で塗りつぶしアルゴリズムが必要になった場合くらいしか使えません。
 アルゴリズムは、迷路を解くのに使われる右手法(右手を壁につけ、壁から離さないようにして進む)そのまんまですが、塗り残しを後から塗るために、進まない方向に進める場合、その位置をスタック(後から記憶したものを先に取り出す記憶領域──実際には配列)に記憶します。
 Win32APIを使っても、できるらしいです。



【サウンド・ビデオ】

winmpg.as for HSP2 for HSP3
 HSPのウィンドウ内でMPEGビデオを再生します。Windows95(4.00.950a)の場合、Media Player2(6.4.07.1112)が必要です。

listmci.as for HSP2 for HSP3
 レジストリやSYSTEM.INIに登録されているMCIデバイスタイプ名をリストアップするスクリプトです



【文字列】

hexcsv.as for HSP2 for HSP3
 以下の3つを行なっているサンプルです。
  • カンマで区切られたデータ文字列を分割する
  • 16進文字列をHSPで取り扱える数値に変換する
  • 255以下の数値を、1個につき1バイトのバイナリデータとしてファイルに保存する

hex2num.as for HSP2 for HSP3
 上のhexcsv.asとほとんど同じですが、以下の点が違います。
  • 16進数のA〜Fは大文字でも小文字でも(混在していても)よい
  • データ1個は必ずしも2文字でなくてもよい
  • 「バイナリデータとしてファイルに保存」はやっていない

zenkaku.as for HSP2 for HSP3
 全角半角混在文字列のm文字目からn文字を抜き出すサンプルです。

octal.as for HSP2 for HSP3
 8進←→数値変換のサンプルです。

binary.as for HSP2 for HSP3
 2進←→数値変換のサンプルです。

jis2sjis.as for HSP2 for HSP3
 JISコードをシフトJISコードに変換します。

longhex.as for HSP2 for HSP3
 HSPの数値上限を超えるような大きな数(文字列)の16進←→10進変換です。



【ファイル・フォルダ】

dragdrop.as for HSP2 for HSP3
 ファイルのドラッグ&ドロップのサンプルです。
 EXEファイルやそのショートカットへのドラッグ&ドロップによる起動と、起動後のウィンドウへのドラッグ&ドロップとが考えられますが、両方に対応しているサンプルです。
 エクスプローラやマイコンピュータからファイルやフォルダをドラッグ&ドロップすると、そのフルパスを表示します。
 EXEファイルへのドラッグ&ドロップに対応するには、cmdline(HSP3ではdir_cmdline)を使います。これにより、関連づけにも対応し、さらに、¥Windows¥SendTo(WindowsXPではC:¥Documents and Settings¥ユーザー名¥SendTo。ただし、エクスプローラ-ツール-フォルダオプション-表示で「すべてのファイルとフォルダを表示する」に設定していないと、このフォルダは表示されません)にEXEファイルのショートカットを置けば、右クリック→「送る」メニューにも対応することになります。
 ウィンドウへのドラッグ&ドロップに対応するには、Exforce.dllのsetdnd,chkdnd,getdnd(HSP3ではoncmd, Win32API(shell32.dll)のDragAcceptFiles, DragQueryFile, DragFinish)を使います。
 ただし、複数ファイルをドラッグ&ドロップした場合については考慮していません(HSP3版は考慮しています)。
 EXEファイルに複数ファイルがドラッグ&ドロップされた場合に対応するには、anthspex.dllのdivide命令が便利です。

iscut.as for HSP2 for HSP3
 インターネットショートカットからURLを取り出すサンプルです。
IE5.0、ネスケ4.6で動作確認しています。

recursiveRen.as for HSP2
 あるフォルダ以下のすべてのファイルの内、拡張子が一定のもののファイル名を変えるサンプルです。
 再帰呼び出し(recursive call=自分自身を呼び出すサブルーチン)のサンプルにもなっています。
 Exforce.dllが必要です。
 hspext.dll(HSPに標準添付)を使っています。

treedo.as for HSP2 for HSP3
 上のサブルーチンをモジュール化したもので、指定したフォルダ以下の全ファイルと全フォルダに対して自由な処理ができます。ただし、再帰呼び出しは使っていません。
 使い方は、スクリプトの注釈を参照してください。
 また、下の2つのサンプルも参考にしてください。

TreeDoSm.as for HSP2 for HSP3
 上のtreedoモジュールの使い方のサンプルです。
 Windowsフォルダ以下の全ファイル数と全フォルダ数を数えます。

copydir.as for HSP2 for HSP3
 上のtreedoモジュールの使い方のサンプルです。
 フォルダを階層構造ごとコピーします。
 anthspex.dllのgetdir命令とlastchar命令を使っていますが、Exforceのseldir命令とextract命令に変えることもできます。



【exeファイル】

packlist.as for HSP2 for HSP3
 exeファイルにpackされているファイルのリストを表示します。なぜか、packfileのファイルが読めないというとき、exeファイルに含まれているかどうか確認することができます。
 anthspex.dllを使っています。



【クリップボード】

cpfilenm.as for HSP2 for HSP3
 引数をクリップボードにコピーするスクリプトです。
 メインルーチンは数行しかありませんが、EXEファイルにしてショートカットを¥Windows¥SendTo(WindowsXPではC:¥Documents and Settings¥ユーザー名¥SendTo。ただし、エクスプローラ-ツール-フォルダオプション-表示で「すべてのファイルとフォルダを表示する」に設定していないと、このフォルダは表示されません)に入れておくと、エクスプローラでファイルを右クリックして、「送る」メニューでファイルのフルパスをクリップボードにコピーできるので、けっこう便利です。
 短いファイル名を長いファイル名に変換するサブルーチンを使うサンプルにもなっています。

ホームページ HSP