一部、HSP2.61に基づいてかかれたものをHSP3用に修正中なので注意 !!!HSP {{outline}} ---- !![[HSPで教材開発|CALLbyHSP]] !![[HSPで言語心理学的実験|ExpbyHSP]] ---- //{{bbs}} ---- !![[HSPの導入|HSPintro]] !!画面「消去」の3つの命令 + boxf ** 画面(のある範囲)を「色」で塗りつぶすことで「消去」する + cls ** 画面上のすべてを初期化してしまう + screen ** ウィンドウの初期化 参考:https://wiki.hsp.moe/ !!画像の一部分のコピー(画像を「部品」として使う) *gmode によってコピーするモードを選ぶ *gcopy によって、どのウィンドウIDの画像のどの部分をコピーするか指定 gmode 0 gcopy ウィンドウID, コピー元座標x, y, x軸で何ドット分か、y軸で何ドット分か [[PictureFeedback]]参照 !!文字列と数値の連結 「文字列型」に「数値型」を足し算した場合には、「数値」を文字列にして連結される。 「数値型」に「文字列型」を足し算した場合には、「文字列」を数値にして加算される。 つまり、計算式で最初の項になっている型に自動的に合わせてくれるということです。 http://www.onionsoft.net/hsp/v34/doclib/hsp3str.htm !!音声を録音する mci "set sam channels 2" mci "set sam samplespersec 44100" mci "set sam bitspersample 16" mci "open new alias sam type waveaudio" mci "record sam" ; 録音の開始 mci "stop sam" ; 録音停止 mci "save sam \"sample.wav\"" ; 音声ファイル保存 mci "close sam" ; 録音終了(デバイスを閉じる) !<<重要な訂正>>(2020-06-14) 上記のスクリプトの2行目「samplepersec」ではなく「sample<>persec」です。 間違えていました。すみません。 *サンプルプログラム sound recording !!実行ファイル作成時にファイル名を特定しておく #packopt name "postoffice01" !!実行ファイル作成時に複数のファイルをまとめてコンパイルする #pack "ファイル名" *packできるのは **画像ファイル *.jpg **テキストファイル *.txt **音声ファイル *.wav ***ただし、大きさは2MB以下 !!文字を順番に表示する text ミリ秒 mes "文字列" text で設定したミリ秒ずつwaitがかかってmesで指定した文字列が順に表示されていく。 !HSP3では、#include "hsp3util.as" して、mes ではなく emes を使うことになったので注意。 !!データを保存する notesel 変数名 ; データを保存する特別な変数を設定 noteadd "データ" ; データを追加 notesave "ファイル名" ; データを「ファイル名」で保存する !!オブジェクト !!ボタンの大きさを変える objsize 横, 縦 objsize 200, 20 button "ちょっと長い名前", *nextstep !!配列 (配列変数) 複数の変数を順に並べて番号を付けたもの。 番号で変数を指定できるので、順番に処理するのに便利。 変数と同様に、配列に名前をつける。(kamoku) 名前のうしろに括弧で番号をつける。 番号は 0 から始まる。 kamoku(0) 値は変数と同様に = で代入する。(「配列変数kamokuの要素0に39を代入する」という) kamoku(0) = 39 kamoku(1) = 29 kamoku(2) = 32 !配列の数を調べる length(配列名) kamokusuu = length(kamoku) !HSP2.61でのこと 配列の後ろに、番号を付ける。(kamoku.0) 15個以上使うときは、最初にdimで使う数を設定する。 dim kamoku,20 文字を扱うときは、sdim で設定する。 sdim 配列名,文字数,要素数 ひとつの科目名の文字数は20文字以下で、科目は10科目あるとすると、 sdim kamoku,20,10 !!テキストを読み込む notesel 変数名 noteload "ファイル名" mes 変数名 変数名は何でも良い。bun とか、、、 一行が長い場合、自動的に改行はしてくれないので注意。 !!画像を読み込む picload "ファイル名" ウインドウサイズは、読みこんだ画像の大きさになる。 事前にウインドウを表示して、その中に画像を位置づけるには、 pos 100, 200 picload "ファイル名", 1 !!getkey と stick の違い getkeyは連続してキーの値を受け付ける。 stickはキーを押したときに一度だけ値を受け取る。 repeat ; getkey a, 32 ; 特定のキーを先に想定 ; if a&1 : break ; a には、そのキーが押されたという意味の「1」が入っている。 stick a, 0 ; 何が押されるかはわからない if a&16 : break ; a には押されたキーのコードが入っている。 loop mes "Hit" stop !!キーボードやマウスボタンのコード (stick) 「ヘルプ」の「HSP命令リファレンスを開く」でstickの項目を見る。 1 : カーソルキー左(←) 2 : カーソルキー上(↑) 4 : カーソルキー右(→) 8 : カーソルキー下(↓) 16 : スペースキー 32 : Enterキー 64 : Ctrlキー 128 : ESCキー 256 : マウスの左ボタン 512 : マウスの右ボタン 1024 : TABキー !!キーボードやマウスボタンのコード (getkey) 「ヘルプ」の「HSP命令リファレンスを開く」でgetkeyの項目を見る。 ---- 1 : マウスの左ボタン 2 : マウスの右ボタン 3 : キャンセル([CTRL]+[BREAK]) 4 : 3ボタンマウスのまん中のボタン 8 : [BACKSPACE](PC98の[BS]) 9 : [TAB] 13 : [ENTER] 16 : [SHIFT] 17 : [CTRL] 18 : [ALT](PC98の[GRPH]) 20 : [CAPSLOCK] 27 : [ESC] 32 : スペースキー 33 : [PAGEUP](PC98の[ROLLDOWN]) 34 : [PAGEDOWN](PC98の[ROLLUP]) 35 : [END](PC98の[HELP]) 36 : [HOME](PC98の[HOMECLR]) 37 : カーソルキー[←] 38 : カーソルキー[↑] 39 : カーソルキー[→] 40 : カーソルキー[↓] 48〜57 : [0]〜[9](メインキーボード) 65〜90 : [A]〜[Z] !!動きを一時停止する wait 300 ; 300 x 10ミリ秒 = 3秒 待つ !!画面の色を変える =画面と同じ大きさの四角を、色で塗りつぶす color 0,255,255 : boxf 0,0,640,480 colorコマンドで色を指定し、直後に、boxfコマンドで範囲を指定する。 boxf: 四角い範囲を指定して色で塗りつぶす。 四角い範囲=ウィンドウの大きさ にすると画面全体の色が変わる。 boxf は、範囲を指定しなければ、ウインドウ全体を塗りつぶす。だから、結論としては、画面の色を変えるには、 color 0,255,0 : boxf とするだけでよい。 !!色を設定する [RGB|http://ja.wikipedia.org/wiki/RGB]値で指定する color 0,200,0 color Red, Green, Blue 0(暗い) - 255(明るい)で値を決める。 0, 0, 0; black 255, 0, 0; red 0, 255, 0; green 0, 0, 255; blue 0, 255, 255; light blue 255, 0, 255; purple 255, 255, 0; yellow 255, 255, 255; white 255, 165, 0; orange 255, 200, 200; pink !!フォントを指定する font "MS ゴシック", 32, 1 font "フォント名", サイズ, スタイル スタイルの設定 1 太字 2 イタリック 4 下線 8 打ち消し線 16 アンチエイリアス スタイルを組み合わせたい場合は、数字を足す。 !!位置を指定する pos 左上横, 左上縦 ウィンドウの広さはデフォルトでは 640 x 480 !!実際に実験する際に注意すること プログラムの実行中にHSPのプログラム以外のものが動いたりして、測定に影響を与えるといけないので、以下の点に注意すること。 1)スクリーンセーバーを切っておく 2)電源の設定で、節電にしないこと。(処理能力最優先にする) 3)ネットワークの接続をすべて無効にしておく。 4)ウイルスチェックのプログラムを止めておく。 5)WindowsUpdateなどの自動更新を止めておく。 6)画面の色を必要最低限にする。 7)デスクトップの背景に何もないようにする。 !!str 変数を文字列型に変更。 オプションで、ゼロを含めた桁数にできる。 str 数値を含む変数, オプション suuji= 7 str suuji, 2 これによりsuujiには「07」という文字列が入る。 !!strlen 文字列の長さを調べる。 strlen 結果の変数名, 調べたい文字列 全角は2文字分。 !!strmid 部分的に文字列を取り出す。 何文字目から何文字取り出すか、と指定する。 strmid 結果を保存する変数, 取り出し元の変数, 何文字目から, 何文字分を text='When I was a child, I lived in Tokyo.' strmid kekka, text, 7, 3 kekkaには、「was」が入る。 文字の位置は0から始まる。7と指定すると8文字目から。 !!特定の文字列以降を取り出すには text='When I was a child, I lived in Tokyo.' instr koko, text, "," : getstr kekka, text, koko+2 カンマ以降をとりだし、kekkaには「I lived in Tokyo.」が入る。 前半でinstrでカンマの位置を調べて、後半でgetstrでカンマの位置に直後のスペース一文字分を足して「2」を足した位置から行末までをkekkaに保存する。 !!instr 検索文字列が何文字目にあるかを調べる。 instr 結果を保存する変数, 検索対象の変数, "検索文字列", 何文字目から検索するか 第4項目の「何文字目から検索するか」を指定しなければ行頭から。 結果は、数字で保存される。1文字目が「0」となる。 文字列がなければ「-1」が結果となる。 text='When I was a child, I lived in Tokyo.' instr kekka, text, "was" kekkaは「7」となる。 !!getstr 文字列を取り出す。 getstr 結果を保存する変数, 取り出し元の変数, 何バイト目から, どこまで 第4項目の「どこまで」を指定しなければ行末まで。 「どこまで」は区切りとする文字で指定する。例:',' kekka text='When I was a child, I lived in Tokyo.' getstr kekka, 0, text, ',' text中の0文字目からカンマまでを取り出して、kekkaに入れる。 kekkaには「When I was a child」が入る。 !!gettime 時間の情報を得る 変数 = gettime (パラメタ) パラメタで、時間のどの情報を得るかを設定 0 年 1 月 2 曜日 3 日 4 時 5 分 6 秒 7 ミリ秒 現在、何時 何分 何秒か? ji = gettime(4) fun = gettime(5) byo = gettime(6) mes "今は"+ji+"時"+fun+"分"+byo+"秒です" !!objimage 画像をボタンにする {{ref objimage-sugiura.hsp}} {{ref_text objimage-sugiura.hsp}} {{ref_image flower1.jpg}} {{ref flower1.jpg}} !二種類の画像のボタンを使うには *事前に二種類の画像を合わせた一枚の画像を用意する。 *二種類の画像を左右に並べたとして、 *左側と右側の画像をそれぞれ左上隅の座標で指定することによって、 *二つの画像のボタンを配置したように表示できる。 {{ref objimage-sugiura-2.hsp}} !!チェックボックスでアンケート *チェックするだけ {{ref ankeito.hsp}} *自由記載欄とチェックボックス、結果をテキストファイルに保存。 {{ref ankeito-2.hsp}} !!システム変数 !cnt *デフォルトでは、0から始まる。 **あらかじめ指定しておけば、そこから始まる。 !rnd() *ランダム化 *0から()内の数字まで(その数字は含まない)の間の数字を一つランダムに選ぶ *rnd(10)は、0から9までの10個の数字から一つ選ぶ *ランダム化の確認スクリプト **配列要素のランダム配置 {{ref simplerandom.hsp}} *Reference Fisher–Yates shuffle http://home.a00.itscom.net/hatada/c01/algorithm/shuffle.html !! モジュール(開発中) +被験者の入力IDを保存ファイル名にする方法 +問題がランダムに出るようにする方法 +選択問題(ラジオボタン) +自由記載ボックス