P52014.09.152AFC課題どのような課題か画面の左右に2つの円が提示され、どちらの円の方が明るいかを解答する課題です。実際にプログラムを動かしてみましょう。下記のリンク先のプログラムコードをコピーして、Processingのエディタに貼付けて下さい。プログラムコード実行する前に、このプログラムを保存しておいて下さい。保存場所やファイル名は何でもかまいません。プログラムを実行すると、まず画面下部に英文が表示されます。その画面でエンターキー(もしくはリターンキー)を押すと、試行が始まります。注視点のあと2つの円が提示され、どちらの方が明るいかをキーボードの左キーもしくは右キーで解答します。被験者が解答キーを押すか、もしくは一定時間が経過すると次の試行に移ります。全試行(デフォルトでは3試行)が終了すると、画面に終了メッセージが表示されます。いうファイルがあります。行ごとに各試行の反応データが記録されており、1つ目の値が押されたキー、2つ目の値が反応時間[msec]です。キーの値は、左キーが押された場合は1、右キーの場合は2、無回答の場合は0としています。この実験プログラムの意義この実験課題は、心理実験の課題としてはさほど意味のある課題ではありません。輝度の弁別閾の計測課題に近いですが、提示される円の輝度は毎試行でランダムとしているので、あまり統制された実験とはなっていません。よる心理実験プログラミングの基本手法の解説を目的として作成しました。刺激を提示し、被験者の反応を取得し、次の試行のためにまた画面を切り替える。したプログラムの流れは、ほぼ全ての知覚課題や認知課題に共通する基本的なものだと思います。この実験課題は、この基本的な流れを含み、かつ、それ以外の要素は可能な限り簡略化したものとなっています。様々なタイプの実験を作成する上での基礎となるプログラミング手法をこのプログラムを通して説明できると思います。順を追ってこのプログラムコードについて解説して行きます。変数の宣言と初期化コードの冒頭で、プログラムで使用する変数を宣言しています。//右の円の色エディタ内で日本語は使用できません上記のコード内ではコメントに日本語も使用していますが、Processingのエディタでは日本語は使用できません。日本語をエディタにコピペしても、おそらく文字化けすると思います。日本語を使用可能にする方法もあります。ここでは解説しないので必要な場合はやり方をググって下さい。次に、setup関数(初期化関数)内で、上記の変数たちに初期値を与えます。していますが、実際の実験の場合はフルスクリーンで行なうのが普通だと思います。フルスクリーンでプログラムを実行したい場合にはショートカットキーを利用すると良いでしょう。フルスクリーンでプログラムが実行されます。通常通り、エスケープキーを押せばプログラムは終了します。変数の意味についてはコメントに書いてあるので説明は不要でしょう。一部の変数についてはあとで意味を説明します。被験者の反応を保存しておくための変数です。反応時間が、それぞれ代入されることになります。続いて、draw関数(メインループ関数)は以下のようです。}}分量は短いですが、これがこの実験プログラムの骨格であり、その全体像となります。関数で画面の背景色を指定しています。設定しているので、画面の背景は黒色になります。値に応じて4種類の関数のうちのどれかが実行されます。いう変数はプログラムの現在の状態を表現しており、この状態に応じてどの関数が実行されるかが操作されています。関数が実行されることになります。最後の行はデバッグ情報を表示させるためのコードで、プログラムの本筋とはあまり関係ありません(後述)。持つ固有の関数ではありません。関数が実行されるようになります。関数はその名の通り、注視点を表示するためのコードが記述された関数です。関数が実行されるようになります。この関数には2つの円を提示したりするためのコードが記述されています。戻り、注視点が表示されます。関数(実験終了後のサンキューメッセージを表示する関数)が実行されるようになります。値によりいくつかの状態を行き来することでプログラムの実行が制御されています。使った実験プログラムの作成において最もキモとなる部分ではないかと思います。そこで、この点についてもう少し詳しく説明をします。状態遷移という考え方プログラムを、いくつかの状態が遷移して行くものとして捉える考え方について説明します。一般に、実験プログラムの流れはいくつかの画面(状態)が切り替わって行くことで進行します。今回の実験の場合、実験全体の流れを以下の4つの状態に分割することができます。0.初期画面1.注視点2.刺激提示画面3.終了画面これらの状態がどのように切り替わるかを図示すると以下のようになります。各ボックスがそれぞれの状態で、矢印に添えられた条件が成立した場合に、状態は遷移します。1.注視点と2.刺激提示はペアで1試行を構成しており、全試行が終わるまでこの2つの状態間を繰り返し行き来します。最終試行の刺激提示後、状態は終了画面へと遷移し、実験は終了します。それぞれの状態においてなされなければならない処理が、各ボックス内に書かれている関数にそれぞれ記述されています。関数には注視点を表示する処理が、それぞれ記述されているという具合です。いう変数を用いています。関数が実行されるようになっているのがわかると思います。他の状態の場合にもそれに対応した関数が実行されます。値が適切に変更されるようにすれば、上の図のような状態遷移を実現することができます。関数が実行されるようになります。上図における初期画面から注視点画面への遷移が行なわれたことになります。状態の遷移とはつまり、現在実行すべき関数を切り替える(スイッチする)ということを意味します。状態の切替という手法をより実感的に理解するために、下記ボックスの「変数情報の表示」も試みて下さい。等の値の様子が画面左上に表示されるようになります。場合のみ実行されます)。いった変数の挙動がわかりやすいのではないでしょうか。値が増えて行く様子が観察出来ます。ところで、プログラムの開発時にはこのように主要な状態変数の値を画面内に表示させておくようにすると、動作の不具合が生じている場合に原因の箇所がわかりやすくて便利です。関数なので、バグはこの関数内にあるのだろうと推測することができます。各状態ごとの関数それでは、各状態ごとの関数についてそれぞれ順に解説します。関数の内容は以下のようです。);}文字色をfill関数で指定し、text関数でテキストを表示しています。関数の内容は以下のようです。}}最初の4行は中心点を表示するためのコードです。線の色と太さを指定した後、line関数を用いて縦線と横線を引き、十字の注視クロスを描画しています。後半部分は状態を遷移させるための処理です。値(1000msです)より大きければ、状態を遷移させます。いう関数内に記述しています。関数の内容は以下のようです。関数の内容は以下のようです。次に、上記以外の残りの関数について説明します。関数の内容は以下のようです。関数の内容は以下のようです。関数の内容は以下のようです。);}準備中まとめ頭の整理のため、実験コード全体を大部分の関数の中身を省略して書いてみました。