HSP3プログラミング入門講座
powered by Let's HSP!
ONION software のおにたまさんが製作されてるスクリプト言語システム『HSP』(Hot Soup Processor)の開発環境は、完全にフリーウェア(無料・無償)です。HSPは明日になったら突如としてフリーウェアでなくなっちゃうようなシロモノでもありません。
すでにHSP3は「OpenHSP」としてコア部分にあたるソースコード(C++言語)自体もオープンになってます。タダでWindowsプログラミングができ、最終的にはプログラムを実行ファイル(EXEファイル)として出力できます。
著作権は作成者にあるので、HSPで作成したゲームやらツールを自分のホームページで配布したり、営利的な販売(たとえばシェアウェア、同人ソフト)なんかも自由にできますー。(^^)/
詳しくはHSPに付属する『HSPシステムドキュメント・インストールガイド (hsp3.htm) 』の「HSPによって作られたソフトウェアの ライセンスについて」の項目を参照のこと。
腕と努力次第で実用ツールやスクリーンセーバーの製作、ゲームプログラミング(パズルゲーム、シューティングゲーム、アドベンチャーゲーム、シミュレーションゲーム、ノベルゲーム、アクションゲーム、RPG、3Dゲームなど・・・)なんかがHSPで実現可能です。拡張プラグインを別途利用することになりますが、DirectXも呼び出せます。
HSPを使ってどんなプログラムを生み出せるかは、2003年から毎年開催されてるプログラムコンテスト(開発元であるONION software主催)の出品作をチェックすればいいカモ。
HSPの公式サイトにフリーであることは一応書かれているにもかかわらず、HSP公式掲示板でコレについて質問してくる人がたまーに・・・。もし、仮にシェアウェア(有料・有償)であったとすれば、値段なり支払い方法なり、そのことを公式サイトにある程度目立つように書いとかないと、いろいろと問題になっちゃうでしょう。(^ー^;
☆ 関連サイト
HSP(HSP3)ってどんなコードを書いてくの?
たとえばこんな感じ。
これを実行すると「Hello World! こんにちは〜」という文字が表示されたウィンドウが開きます。 文字色を赤色にしたい!、大きめの文字サイズ(フォント)で表示したい!、 なんてな感じで続けていくと、下のようにコードになっていく感じ。
; 普通に文字表示 mes "Hello World! こんにちは〜" stop
; 文字色の指定 (RGB値) color 255, 0, 0 // 赤色 mes "Hello World! こんにちは〜" stop
; 文字のフォントと表示サイズの指定 font "MS UI Gothic", 40 mes "Hello World! こんにちは〜" stop
この中で登場する「mes」とか「color」というのがHSPの命令です。命令はアルファベット(英数字)を 使った文字で指令します。別に英語が分からなくても大丈夫。英語の文章を書いたり、英会話をするわけではないので、最低限 アルファベットを認識できてキーボードで文字を打てればOK。
「mes」という文字の直後には半角スペースを入れて、表示文字の前後には「"」(ダブルクォーテション)で
くくる必要があります。「mes」という命令は「"」の中の文字を表示せよ、という処理です。この命令名の由来は
英単語の「messsage」(メッセージ)から来たものです。
「color」は表示色を指令する命令です。英単語の「色」という意味ですな。この命令はRGB値の形式で指定します。
半角の「,」(コンマ)で区切って、それぞれR(赤)、G(緑)、B(青)の数値を指定してます。
「hsed3.exe」がコードを編集するスクリプトエディタです。エディタ上で命令文字の部分にカーソルを置いて「F1キー」を押すと、HSPヘルプブラウザ(HSP Document Library)が起動して、該当する命令の説明が表示されるので読んでみましょう。別に説明を暗記する必要はありません。
ちなみに、半角のセミコロン(;
)やスラッシュ2つ(//
)は「コメント」と呼ばれるもので、プログラムの処理にはいっさい影響しない注釈(ちゅうしゃく)です。何をしている部分か説明したり、コードをスキップする場合に利用します。
次に、四角形、1本ライン、円のような図形を描画するスクリプトコード。(ちなみに、ここでは書きませんが、BMPファイル/GIFファイル/JPEGファイルのような画像ファイルを読み込んで表示することもデキル)
color 0, 255, 0 ; 四角形を表示 boxf 50, 50, 100, 100 color 0, 255, 255 ; 1本線を表示 line 0, 0, 150, 160 color 0, 0, 255 ; 円を表示 circle 150, 150, 300, 350
Windowsのアプリケーションでよくお目にかかるオブジェクト(コントロール)も用意できます。
ボタンオブジェクトを設置して、そのボタンを押したらダイアログがポンッと表示されるコード。アスタリスクの「ラベル」という処理が登場します。
button "押して!", *push stop *push dialog "ボタンを押しましたね(^^)" stop
その他の雑多なサンプルコードいろいろと。へっぽこペイント、サンプルビューアー、カラーコードチェッカー、
システムアイコンの描画、パスワードジェネレータ、アプリケーションランチャー、RSSフィードの表示。筆者はHSPでゲームの類をまったく製作しないので、
楽しめる要素はないです。→擬似3Dワイヤーフレームレンダリングモジュールd3moduleはクール!
最初は理解不能かもしれませんが、実際にHSPを入手してマニュアル
を読んでくだされ。レッツ HSPプログラミングゥ〜。
ものすごくベーシックなもので、数値の10をループ内で減らしていき表示させてます。ほとんど同じようなことを 繰り返す処理用にrepeat-loop命令を用意してます。
// 10からカウントダウン表示 (by Kpan) value = 10 repeat 10 ; 文字列の描画 mes value ; 1減らす value-- ; 1秒ウェイト wait 100 loop mes "発射!!!(って何が?"
小学校で習う九九の表(っぽいの)を表示するコード。わざと1段づつ出現させてます。文字の追加結合にpoke命令、 数値の桁ぞろえ変換にstrf関数を利用してます。
// 九九の表示 (by Kpan) font "MS ゴシック", 40, 2 | 16 color 255 sdim data repeat 9 value++ i = 0 repeat 9, 1 poke data, i, strf("%2d ", cnt * value) i += strsize loop mes data ; 0.5秒の処理待ち wait 50 loop
流れる文字。文字を表示してクリアして、位置を変えて再び同じ文字を表示して・・・、をひたすら繰り返してます。 目の錯覚で動いているように見えてしまうアニメーションの原型ですな。(このコードはパフォーマンスを考えると、 あんまりいい組み方をしてないです。バッファ画面にあらかじめ文字を描画させおいて切り取りコピーしてくるのが王道?)
// へっぽこ流れるテキスト (by Kpan) font "MS UI Gothic", 50, 1 | 16 repeat ; 描画の一時停止 redraw 0 ; 塗りつぶしクリア color boxf color 0, $FF, 0 pos 0, posy * 10 mes "こんにちは、HSP" posy++ if posy > ginfo(13) / 10 : posy = 0 color 0, 0, $FF pos posx * 5, 100 mes "Hello World!" posx++ if posx > ginfo(12) / 5 : posx = -40 ; 描画の再開 redraw 1 await 50 loop
へっぽこペイント
ペイントとは名ばかりですが、マウスでお絵かき。rnd関数で乱数(バラバラ数値)を発生させてテキトーな装飾。
// へっぽこペイント (by Kpan) repeat redraw 0 ; 左クリックのチェック getkey check, 1 if check { color rnd(255), rnd(255), rnd(255) line mousex, mousey circle mousex-rnd(10),mousey-rnd(10),mousex+rnd(10),mousey+rnd(10) } pos mousex, mousey redraw 1 await 16 loop
HSPサンプルビューアー
HSPの開発環境にはサンプルファイル(「hsp31\sample」フォルダ)がいくつか用意されてるんですが、その中の 「basic」フォルダにあるサンプルスクリプトを閲覧するビューアー。左側のファイルリストから選択してボタンを押すと、 右側のボックスに読み込んだファイルの中身を表示させる仕組み。(ユーザビリティを考えてちゃんと作成したものはコチラ)
// HSP付属サンプルファイルの閲覧ツール (by Kpan) // スクリプトエディタの設定で[全般]-[ディレクトリ]→[起動時のカレント // ディレクトリ]を「指定なし」に設定しておく必要あり title "簡易サンプル閲覧ツール by Kpan" sdim filelist, 1024 sdim filename sdim buf, 4096 ; サンプルファイル(Basic)をリストアップ dirlist filelist, "sample\\basic\\*.hsp", 3 objsize 110, 30 index = -1 listbox index, 400, filelist pos , 419 button "表示", *load button "編集", *edit objmode 2 font "MS ゴシック", 14 pos 110, 0 mesbox buf, 530, 480, 5 stop *load gosub *getname ; HSPスクリプトの読み込み notesel filebuf noteload "sample\\basic\\"+filename+"" ; HSPスクリプトをメッセージボックスに表示 objprm 3, filebuf stop *edit gosub *getname ; HSPスクリプトエディタの起動 exec "sample\\basic\\"+filename+"", 16 stop *getname if index = -1 : stop ; リストボックスのインデックス番号からファイル名取得 notesel filelist noteget filename, index return
カラーコードチェッカー
RGB(光の三原色)カラーを表示するツール。トラックバーコントロールでRGB値をいじれるようにしてあります。 はっきり言って、ここから下のスクリプトはHSPプログラミングの基礎知識ではとてもカバーできない処理がポツポツでてきます。(^^;
// 簡易カラーコードチェッカー (by Kpan) #define ctype RGB(%1,%2,%3) (%1 | %2 << 8 | %3 << 16) screen 0, 230, 80 title "Color Code Checker by Kpan" ; WM_HSCROLL oncmd gosub *hscroll, $114 dim value_color, 3 ; トラックバー pos 65, 10 repeat 3 winobj "msctls_trackbar32", "", , $50000000 | $100, 150, 20 hTrackbar.cnt = objinfo(stat, 2) ; TBM_SETRANGEMAX (0〜255) sendmsg hTrackbar.cnt, $408, , 255 loop gosub *draw_circle stop *hscroll if lparam = hTrackbar.0 { ; TBM_GETPOS sendmsg lparam, $400 value_color.0 = stat gosub *draw_circle return } if lparam = hTrackbar.1 { sendmsg lparam, $400 value_color.1 = stat gosub *draw_circle return } if lparam = hTrackbar.2 { sendmsg lparam, $400 value_color.2 = stat gosub *draw_circle return } return *draw_circle ; 円形で塗りつぶし color value_color.0, value_color.1, value_color.2 circle 10, 20, 55, 65 ; タイトルバーに「#RRGGBB」表示 value_rgb = RGB(value_color.2, value_color.1, value_color.0) title "Color Code - "+strf("#%06X", value_rgb) return
システムアイコンの描画表示
Windowsのシステム(shell32.dll)に含まれてるアイコンイメージの画像をズラズラっと描画表示するコードです。 Win32 API関数を使って、アイコンの取得と描画を行わせてます。
// システムアイコンの描画表示 (by Kpan) #include "shell32.as" #include "user32.as" filepath = dirinfo(3) + "\\shell32.dll" ; アイコン数の取得 ExtractIconEx filepath, -1, 0, 0, 0 if stat = 0 : stop title "システムアイコン描画 by Kpan ["+stat+"コ]" ; アイコンハンドルの取得 dim phIconLarge, stat ExtractIconEx filepath, 0, varptr(phIconLarge), 0, stat ; アイコンイメージの描画 repeat stat DrawIcon hdc, cnt \ 20 * 32, cnt / 20 * 32, phIconLarge.cnt DestroyIcon phIconLarge.cnt loop redraw
パスワード文字列ジェネレータ
乱数を使ってまったくデタラメなパスワード文字列を生成するツール。「数字」+「アルファベット小文字」の 組み合わせだけ生み出せるようになってます。Win32 API関数を呼んだり、 桁指定できるようアップダウンコントロールを用意してます。まだまだ機能を用意できますが、それでも実用的な シロモノです。
// 簡易パスワードジェネレータ (by Kpan) #include "user32.as" #define ctype MAKELONG(%1,%2) (%1) & $FFFF | (%2) << 16 screen , 350, 90 title "簡易パスワードジェネレータ by Kpan" randomize sdim pass dim kouho, 10 objmode 2 font "MS ゴシック", 30, 16 | 1 ; 生成したパスワードが表示されるボックス pos 10, 10 input pass, 330, 38 SetWindowLong objinfo(stat, 2), -16, $50010080 | $2 objmode 1 ; 桁数を指定するボックス (8〜20ケタ) pos 220, 61 input keta, 40, 22, 2 ; アップダウンコントロール winobj "msctls_updown32", "", , $50000012 | $4 sendmsg objinfo(stat, 2), $465, , MAKELONG(20, 8) objprm 1, 8 objsize 70, 22 pos 270, 60 button "生成", *create stop *create if keta < 8 : stop ; パスワード文字列生成 repeat keta repeat 10 if rnd(2) { ; 数字 kouho.cnt = $30 + rnd(10) } else { ; アルファベット小文字 kouho.cnt = $61 + rnd(26) } loop poke pass, cnt, strf("%c", kouho.rnd(10)) loop objprm 0, pass
アプリケーション起動ランチャー
へっぽこなアプリケーション起動ランチャー。設定を保存しとく処理は用意してません。ボタンのシフトキー押しで 実行ファイルの登録、ついでにボタン上に実行ファイルのアイコンを表示。(Windows XP以降のビジュアルスタイル時に ボタンのデザインがクラシックスタイルに変身してしまう仕様がありますが、対処は処理が増えるのでパス)
// へっぽこランチャー(by Kpan) #include "user32.as" #include "shell32.as" #define BS_ICON $40 #define BM_SETIMAGE $F7 #define SHGFI_ICON $100 screen , 120, 120, 2 title "へっぽこランチャー by Kpan" onexit *exit sdim filepath, 256, 4 dim SHFILEINFO dim hIcon, 4 syscolor 15 boxf objsize 50, 50 pos 10, 10 button "", *execute hButton.0 = objinfo(stat, 2) SetWindowLong hButton.0, -16, $50000000 | BS_ICON pos 60, 10 button "", *execute hButton.1 = objinfo(stat, 2) SetWindowLong hButton.1, -16, $50000000 | BS_ICON pos 10, 60 button "", *execute hButton.2 = objinfo(stat, 2) SetWindowLong hButton.2, -16, $50000000 | BS_ICON pos 60, 60 button "", *execute hButton.3 = objinfo(stat, 2) SetWindowLong hButton.3, -16, $50000000 | BS_ICON gsel , 2 stop *execute id_obj = stat ; シフトキー押しで実行ファイル登録 getkey key, 16 if key { dialog "exe", 16, "実行ファイル" if stat = 0 : stop filepath.id_obj = refstr ; 実行ファイルのアイコンハンドル取得 SHGetFileInfo filepath.id_obj, 0, varptr(SHFILEINFO), 4, SHGFI_ICON if stat = 0 : stop if hIcon.id_obj { DestroyIcon hIcon.id_obj } hIcon.id_obj = SHFILEINFO.0 ; ボタンにアイコンイメージを反映 sendmsg hButton.id_obj, BM_SETIMAGE, 1, hIcon.id_obj stop } ; 実行ファイルの有無確認 exist filepath.id_obj if strsize = -1 : stop ; 実行ファイルの起動 exec filepath.id_obj, 16 stop *exit ; アイコンハンドルの解放 foreach hIcon DestroyIcon hIcon.cnt loop end
RSSフィードの表示 (Yahoo!トップニュース)
HSP(HSP3)はCOMにも対応してるので、「XML DOM」という機能を使ってXMLファイルを処理してるコード。Yahoo!の トップニュースのRSSフィードデータを取得してきて、意味もなくメニューバーに表示させて ます。項目をクリックすると、ブラウザが起動して記事ページへジャンプ。
// RSSフィードをメニューに表示 (by Kpan) #include "mod_menu.as" #define ctype LOWORD(%1) (%1 & $FFFF) ; Yahoo!ニュースRSS #define URL "http://dailynews.yahoo.co.jp/fc/rss.xml" title "Yahoo!トップニュース フィード by Kpan" oncmd gosub *command, WM_COMMAND ; XML DOM newcom oDom, "Microsoft.XMLDOM" oDom("async") = "false" oDom->"load" URL elm_title = oDom("getElementsByTagName", "title") count = elm_title("length") if count = 0 : dialog "error" : stop elm_link = oDom("getElementsByTagName", "link") ; 文字列型配列変数 sdim data_title, 128, count sdim data_link, 256, count repeat count node = elm_title("item", cnt) data_title.cnt = node("text") node = elm_link("item", cnt) data_link.cnt = node("text") loop delcom node delcom elm_title delcom elm_link delcom oDom ; メニュー表示 newmenu hMenu.1, 1 repeat count - 1, 1 addmenu hMenu.1, data_title.cnt, cnt loop newmenu hMenu.0 addmenu hMenu.0, data_title.0, hMenu.1, $10 applymenu hMenu.0 stop ; WM_COMMAND *command if lparam = 0 { ; ブラウザでURLアドレスを開く exec data_link.LOWORD(wparam), 16 return } return
HSPユーザーによるHSP講座サイトのリンク集。
- HSP情報・講座サイト (HSPTV!)
- 初心者向けサイト / 中級者以降向けサイト (HSPWiki)
キーワード 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書籍本