2013.06.03更新
- じゃんけんゲームの制作 -
実習1 / 実習2 / フローチャート / ロケットマン / Q&A NEW
7. フローチャート
「じゃんけんゲーム」全体の処理の流れをフローチャートを使って以下に表します。まず初期設定では、実習2 その1のサンプルにあるとおり、ウィンドウサイズの指定や勝敗数を記憶する変数の初期化などを行います。次に開始ボタンが押されるのを待ち、キャラクターが踊る画像を表示します。コンピュータ側の手を決定するには、1から3の乱数を発生させ、1ならば「グー」、2ならば「チョキ」、3ならば「パー」とします。こちらの手はボタンによって決定し、コンピュータの手と比較して勝ち負けの判定、画像の表示、勝敗数のカウントが行われます。「勝ち負け判定」の詳細な流れについては、「グー」ボタンを押した場合(図3の赤い部分)のみを図4に示しました。
図3 全体の処理の流れ
図4 グー入力の場合の勝ち負け判定処理
8. その他 テクニック
1)乱数の発生
r=rnd(3)+1 if r=1 : pic="gu" if r=2 : pic="choki" if r=3 : pic="pa"
乱数を発生させる関数rnd()の使用例です。( )内で3を指定すると0から2までの整数値がランダムでつくられます。それに1を足して、rの値は1, 2, 3のいづれかとなります。(実際には、擬似乱数で生成規則があります。)
2)勝敗数をカウントするには?
まず、勝ち/負け数を記憶する変数を設けます。例えば k : 勝ち / m : 負け数。開始間もない初期化の部分で0としておくことを忘れないで下さい。
k=0 m=0
次に勝敗数を表示する例を示します。まず、表示場所をpos命令で指定。次に色を指定します。予め表示された数字(文字)があると、重なって見づらくなるので、boxf命令をつかって消しておきます(背景色で塗りつぶし)。文字、数字を合せて一度に表示させるには、mes命令において、"+"記号を使い、連結させます。
pos 80,300 //80,300の位置を指定 color 255,255,255 //白色(赤:255,緑:255,青255)を指定 boxf 70,300,300,320 //(70,300)-(300,320)を対角線とする四角の領域を塗りつぶす color 0,0,0 //黒色を指定 mes "今、"+k+"勝"+m+"負です" //メッセージ表示
勝敗を判定し、kとmの値を更新する手続きは、以下のように行います。
if r=1 : picload "aiko.jpg",1 //コンピュータ「グー」に対して「グー」を出した場合 // ->あいこの画像を表示し、勝敗数のカウントは行わない。 if r=2 : picload "kati.jpg",1 : k=k+1 //コンピュータ「チョキ」に対して「グー」を出した場合 // ->勝ちの画像を表示し、勝ち数kを増やす if r=3 : picload "make.jpg",1 : m=m+1 //コンピュータ「パー」に対して「グー」を出した場合 // ->負けの画像を表示し、負け数mを増やす
Q1. エラー 「No debug module」, 「画像がありません」と表示される
次の原因が考えられます。順番に確認してみて下さい。
- 作業フォルダ(例 Z:\HSP)を予め作り、HSPのプログラムキットを解凍する。ソースファイルも同じ作業フォルダ内に名前を付けて保存すること。(タイトルバーに「(Untitled)*と表示されていれば、未だ名前が付いていない状態です。また、ソースファイルを作業フォルダ内に納めていないと、画像ファイルがありませんと表示されます。)
Q2. エラー 「Startup failed」と表示される
- コンパイルがなされていない可能性があります。メニューの「HSP(P)」-「コンパイル+実行(C)」を選んで下さい。
Q3. 結果レポート 「ラベル名がすでに使われています」と表示される
- プログラム内に同じ名前のラベルが2つ以上あってはいけません。(サンプルプログラムは1つずつ貼付を行って実行を確認する。次のサンプルブログラムをつけ足してはいけない。)
Q4. if 命令にはどんなものがありますか?
目的に応じて次のような記述を行い、使い分けができます。
タイプ 記述例 解説 シンプル if r = 1 : picload "aiko.jpg",1 もしrが1であるならば、画像aiko.jpgを現在の画面に表示させる。
rが1と異なる場合は、何もしない。複文 if r = 1 {
pic="gu"
picload "aiko.jpg",1
}もしrが1であるならば、変数picに"gu"を代入し、画像aiko.jpgを
現在の画面に表示させる。
( { } でくくることによって複数の命令を実行できる)条件不成立
の場合も有りif r = 1 {
pic="gu"
}
else {
pic="pa"
}もしrが1であれば、変数picに"gu"を代入する。
rが1とは異なるならば、変数picに"pa"を代入する。
Q5. 「閉じる」ボタンを押した時にMicrosoft Visual C++ Runtime Library のエラーが出現する。
Windoows8でプログラムを作成を行う場合、「閉じる」ボタンを押すと次のダイアログが出現します。下記の命令を加えると、エラーの出現を回避できます。
<追加プログラム>
onexit goto *exit
stop
*exit
end