〜HSP簡単講座〜

- HSP紹介 -
- 自己紹介 -
- 初めてのHSP -
- HSPを使う -
- HSP発展 -
- HSPで制作 -

TOP > HSPで制作  

〜HSP制作編について〜

 

HSPでゲームやソフトを制作する場合は作り始める前に、大体どういったものを作るのかという計画 を立てる必要があります。そうです、なんの計画もなしに制作しようと思ってもなにから取り掛かればいいのか 全く分からないのです。そこで、この章では計画を立てていく過程を記していき、そして作品を完成させることにしています。

 

〜タイトルを決めて展開する〜

 

今回の制作では前の章の応用として、「数当てゲーム」を作ることにしました。この「数当てゲーム」は数を入力して その数が答えならば、正解という表示を出力するという動作を行うことにします。プレイヤーが数を入力した回数も表示 する。

 

このようにだいたいの過程を初めに書いていくことで、先が展開しやすくなっていきます。次に考えることは、初めに 書いた過程をどのようにプログラムで書くかです。

 

このゲームでは数を入力することから、キーボードから入力するためのスペースが必要にな ってきます。そして、値が入力した数と等しいとき新しいウィンドウ を表示したあと、正解であることを伝えることが問題となります。

 

この時点で使用しなければならない命令が分かってきます。赤文字で表示し ている文字がありますが、この部分がポイントになります。

 

まずスペースですが、これは「input」命令で対処することができます。詳 しい使用方法は後より説明しております。

次に値が等しいときですが、これは「〜ならば」 という意味をもつ「if」命令で対処できます。この命令もまた後より説明しています。

最後に「新しいウィンドウ」を表示する方法ですが、これはHSPを使 う編で紹介した「screen」命令で対処できます。

 

それでは新しく出てきた「input」、「if」命令について紹介していきます。

 

〜「input」命令について〜

 

「input」命令の使用方法は「input 変数名、ボックスのx座標、ボックスのy座標、最大文字数」となって います。この時の最大文字数にを入力した場合は、windowsで扱える最大文字数が扱えます。

 

下図はinput命令を使った簡単なプログラム例です。

プログラム

 

出力結果

 

上図は出力結果ですが、10という値が入力されているスペースは「input A」による命令で、20という値が入力され ているスペースは「input B」による命令です。このプログラムでは、「input A」、「input B」に入力されている値を 足して、新たに変数cに代入してcの値を「mes」命令を使って表示しています。プログラムを見て分かるように「input」 命令の変数名以外は省略することができます。また、「end」命令 を使うことでウィンドウを閉じることができます。

 

従って、出力結果から分かるように二つの値を足した計算結果を表示しているので、このプログラムは二つの値を加算する ことができる電卓となったわけです。

 

〜「if」命令について〜

 

「if」命令とは自分で条件を指定することができ、その条件によってプログラムを分岐させ動作させることができます。一体 どういうことなのかというと、例としては変数aの値が80以下なら表示する文字を"B"とし、変数aの値が81以上なら表示 する文字を"A"とするといった操作ができるのです。下図は説明した文章をそのままプログラムにしたものです。

 

プログラム

 

出力結果  出力結果

 

このプログラムでは「if 条件1 & 条件2」のように表示している部分がありますが、これは「条件1と 条件2を両方満たしているならば」という意味になります。また「if」命令の使い方が「if 条 件 : 操作」、「if 条件{ 操作 }」のように異なっているものがありますが、どちらの 書き方でも大丈夫です。

 

〜プログラム作成〜

 

それでは数当てゲームのプログラムを作っていきましょう。ひとつずつ確実に進めていくことで効率よく作っていくこと ができます。コンピュータは一番上の行から動作していくので、それと同じように人間も一番上の行から作っていくわけ です。

 

〜基本から発展へ〜

 

必ず必要なものが数当てゲームを表示させる画面ですね。[screen]命令を使いましょう。 次にその画面のタイトルを付ける[title]命令を使います。そしてラベ ルを使うことで数当てのために必要な機能の、値を何度も入力させるということが できます。ラベルを用いるのでもちろんサブルーチンを使います。では現在のプログラム 状態を見てみましょう。

 

プログラム

 

ここまでは一度見たことのあるプログラムだと思います。しかしプログラムを見てのとおりまだComputeラ ベルに内容が書かれていません。ここには初めに計画していた、数を入力してその数が答 えならば、正解という表示を出力するという動作を書きます。どうすれば良いのかというと、プレイヤーが入力した 値である[Input]命令のという変数がラン ダムに設定されている答えと等しいならば、正解を知らせるウィ ンドウを表示できれば良いというわけです。

 

そこでランダムに設定される変数は答えなのでansという変数として設定します。ランダムの 数を設定するためには[変数 = rnd(n)]という関数を使います。nに入力するものはランダム に設定したい数の範囲です。nに10と設定したのなら変数には0から9の中の一つが代入されます。設定した値は範囲 に含まれないので注意して下さい。

また、この関数一つだけではランダムに発生する値はパターン化されてしまいます。 つまりnで設定した範囲の数はランダムに代入されるのですが、そのランダムに代入される値は変化しないということです 。このままではもうランダムではありません。

 

ここで必然的に使わなければならない命令が[randomize]です。この命令は [rnd]関数で設定される値のパターンを初期化することができるのです。これによりプログラムを起動させるたびに、異 なる値を変数ansに代入することができるのです。

[rnd]関数で設定した値は数当てゲーム中で一度のみ必要であるため、[randomize]命令と一緒 にプログラムの上部に書きます。

 

 

次にComputeラベルの内容を書いていきましょう。書くことはとても簡単で、さきほど[rnd]関数によって設定された変数 ansと入力した値Aが等しいならば、ということを[if]命令で設定すれば良いのです。そして、その場合の内容では[screen] 命令を使います。

 

 

プログラムを見ると新しい[width n1,n2,n3,n4]という命令があります。これは[screen]命令でウィンドウ を表示した、そのウィンドウの表示する位置を指定することができます。

n1とn2にはそれぞれ表示したいウィンドウのサイズの縦横 を指定できます。しかし、ここで指定できるウィンドウのサイズは[screen]命令で指定したウィンドウサイズより大きい値 は指定できません。n3とn4にはウィンドウを表示したい位置をx,y座標でそれぞれ指定できます。この場所で使う[screen] 命令のウィンドウIDは必ず1に指定しなければいけない点に注意して下さい。

また、今回このウィンドウは数当てゲームのウィンドウの上に表示するので[screen]と[width]命令の 座標を、全て数当てゲームのウィンドウの座標と同じにします。

 

このプログラムには変数Nという未知の値がありますが、これはプレイヤーが入力した値の回数としています。従ってこの Nの値はプログラム開始時に0に初期化する必要があります。

 

 

以上のプログラムで数当てゲームの全体の八割は作れたことになります。あと何が足りていないのかというと、以上のプロ グラムを実行して分かるように、数を入力してもウィンドウが閉じてしまいます。つまりその改善方法です。そこで考え なければならないのが、なぜウィンドウが閉じてしまうのかということです。この問題の答えは Computeラベルの中にあります。[if]命令で[A=ans]の場合しか指定していませんね 。よって改善方法は[if]命令で[A=ans]以外の場合を書くことです。

ここは作成者自身で自由に決めて良いと思います。例として私が考えた方法を下記に表示しておきます。

 

 

このように細かく指定することが可能です。これでプログラムを実行すると数当てゲームを遊ぶことができますが、表 示される文字のバランスが悪いので下記のプログラムを付け加えましょう。

 

 

上記のプログラムの[ != ]は、変数Nが0と等しくなかったら[if]命令の内容を実行するという意味になります。

 

〜祝プログラム完成〜

 

これで一つのゲームが完成できたわけですが、数当てゲームだから簡単に作れると思っていた方もいるかもしれません。 しかし、エディタで数当てゲームのプログラムの行数を数えてみると80行ちかくあります。簡単なゲームでも内容しだい ではとんでもない量の行数になってしまうのです。しかし、一つずつ確実に組み立てていくことで、良い作品を作り出す ことができると思います。

今回はプログラム作成お疲れ様でした、そして最後まで読んでいただきありがとうございました。m(。_。)m

ページ上部へ