{{category HSP}} !!!02. HSPの基礎2: 変数、条件と繰返し、サブルーチン {{outline}} ---- !!02.0 前回の課題の発表会 ---- !!02.1 ボタンを押した回数を記録する:「変数」と「goto を使った繰返し」 ! pushTheButton2.hsp {{pre ; 変数とボタン ; copyleft 2015-05-21 sugiura@nagoya-u.jp ; 2019-05-31 ; 2020-05-29 pushTheButton2 kai = 0 ; 変数の初期化 *hajime cls pos 300, 200 mes kai ; 変数の中身を表示 button "押してね", *tasu button "おしまい", *owari stop *tasu kai = kai + 1 ; 変数の中身の数を増やす goto *hajime *owari cls ; 改良点 ; if kai < 1 { ; if 構文を分けて書く ; mes "一度は押してね!" ; wait 200 ; goto *hajime ; } pos 300, 200 mes "あなたは" + kai + "回押しましたね。お疲れ様。" ; 文字列と変数の連結 wait 200 end }} ---- !!02.2 「変数」という入れ物 * 「変数」に数字を入れる。 変数への代入 = * 押すたびに、数字を増やす。(「回数の記録」) n = n + 1 * 記録された結果(変数の中身)を表示する。 mes 変数 * 変数の中身と文字列をつなげて表示する。(「+」) mes 変数 + "文字列" !!02.3 条件で場合分け(流れの制御) ! pushTheButton2.hsp の改良 (コメント部分の解説) * 万が一、押さなかった場合の対応(条件で場合分け) if 条件 { 命令 } * 一行で書く時の書き方 if 条件 : 命令 ---- !!02.4 問題文を提示し、反応を記録する ! 2monQuiz2.hsp {{pre ; 2問クイズ ; copyleft 2016-05-08 sugiura@nagoya-u.jp ; 2019-05-31 ; 2020-05-29 2monQuiz2 *mon1 cls pos 150, 150 font "MS 明朝", 18, 1 mes "正しい場合は、マウスの左ボタン" mes "間違いの場合、マウスの右ボタン" mes "" key = 0 ; どのキーを押したかを記録 mes "第1問" mes "" mes "アメリカの首都はニューヨークである。" mes "" repeat stick key ; 押されたキーの番号取得し key に入れる if key==256 : gosub *matigai : break ; 256はマウス左ボタン if key==512 : gosub *seikai : break ; 512はマウス右ボタン await 1 ; repeatのループに一瞬の隙を作る loop *mon2 cls pos 150, 150 font "MS 明朝", 18, 1 mes "正しい場合は、マウスの左ボタン" mes "間違いの場合、マウスの右ボタン" mes "" key = 0 mes "第2問" mes "" mes "カリフォルニアの州都はサンフランシスコである。" mes "" repeat stick key if key==256 : gosub *matigai : break ; key&256 でもよい if key==512 : gosub *seikai : break await 1 loop ;------------------------------------------------------- *owari cls pos 150, 150 mes "あっていた数は、" +maru+ "個です。" mes "" mes "まちがった数は、" +batu+ "個です。" wait 300 end ;--------------------------sub------------------------ ; サブルーチンは、必ず returnで、元に戻る *seikai maru = maru + 1 return *matigai batu = batu + 1 return }} ! スクリプトの解説:プログラムの流れ * 問題文を呈示する。 * 「はい」「いいえ」で回答してもらう。 ! 「stick」を使った入力のチェック:どのボタンを押したか stick ! 「repeat」を使った繰り返し repeat 繰り返す回数 命令 loop ! 押されるまでひたすら待つ状態(指定回数なし=無制限) repeat 繰り返す内容 await 1 ; 決まり文句 loop ! 条件が満たされるまで待つ:条件が合ったら「break」で抜け出す repeat 繰り返す内容 if 条件 : break await 1 ; 決まり文句 loop ! 回答の記録:場合に分けて、別の変数に記録 * 合っていたら「正答数」に記録する。 * 間違っていは「誤答数」に記録する。 * いくつ合っていたかを最後に表示する。 ---- !!02.5 サブルーチン * 同じ「処理」は、一カ所に「部品」としてまとめ、再利用 **★普通の「段落」との違いは、return で元(gosubしたところ)に戻るところ * スクリプトの一番下にまとめて書いておく ---- !! 課題: 10問クイズを作る !できるだけサブルーチンにまとめてみよう。 ★スクリプトエディターの使い方のコツ 1)コメントを使って、試行錯誤 2)ヘルプでキーワード検索 3)検索と置換