

私は心理学を専攻する大学4年生です。
現在卒業論文で実験プログラムを作成しなければならないのですが、プログラミングは大の苦手であり、心理学実験用のマニュアルや資料を参照しても全く完成させることができません。使用しているアプリケーションソフトはVisualStudio2015、言語はVisualBasicです。
作成すべきプログラムは以下のようなものです。
1. 開始ボタンを押すと開始ボタンが消え、画面中央のラベルに文字が1個表示される。
2. ラベルの文字は全部で28種類あり、1ブロックにおいてそれぞれが1回ずつランダムに表示される。これが全部で4ブロックまで繰り返されるので、総試行数は112試行となる。
3. 1試行は、1個の文字が10秒間表示されることであり、10秒経つと自動的に次の試行へと移り、文字が切り替わる。
4. ただし、1試行中に被験者がスペースキーを押すと、ただちに画面全体が暗転する。暗転状態は10秒間であり、10秒経つと自動的に次の試行へと移る(元通りの画面になり、次の文字が表示される)。
5.ある文字に対してスペースキーが押された回数と、その文字が表示されてからスペースキーを押すまでの時間(潜時)を計測する。
指導教授からは簡単なプログラムなのだから早く完成させろと叱責します(ただし、教授自身にはプログラミングの具体的指導は仰げません)。別の先生によるプログラミングの授業も以前受けたことがありますが、その際も今回よりも簡単なプログラムの作成すらままなりませんでした。その先生は大変プログラミングにお詳しいので、今回もご相談したところ、授業で用いたレジュメよりも詳細なものを頂きました。また、「はじめての行動分析実験―VisualBasicでまなぶ実験プログラミング」という本を入手し、これらを参照して作成に励みました。しかし、それぞれの項目にあるサブプロシージャを単に組み合わせただけでは、デバッグをしても思うように作動せず(何も表示されない、暗転状態が終わらない、表示された文字が10秒経過しても切り替わらない、など)、徹夜を続けて試行錯誤的に記述してはデバッグを繰り返しましたが、全く完成させることができませんでした。サブプロシージャ同士のつながりが重要なのだろうと思いますが、それをどうやって実現すればよいかは資料を読んでも私の頭では理解・実現困難でした。
指導教授には2日後の月曜日から実験を始めるよう命じられており、明日には完成させなければなりません。先のプログラミングにお詳しい先生とは休日にはコンタクトがとれないので間に合いません。私のゼミにはそのようなプログラミングに詳しい院生の方はおらず、他のゼミにもご相談できる方がおりません。本日も完成させるべくずっと頑張っていたのですが、ついに思うように作動することはなく、完成の見通しが全く立たないため、このサイトにて質問を投稿する決心を致しました。このような事態になったことは完全に私の自業自得であり、私の横着と怠慢故の質問で大変恐縮ですが、本当に困っています。ここ1週間は慢性的に頭痛腹痛に悩まされ、夜も眠れません。どなたかお助け下さい。どうかよろしくお願い申し上げます。
お恥ずかしながら、以下が私が作成したコードになります。
Button1は開始ボタン、Label1は文字を表示するラベル、Trialは試行数カウンタ、StartTimeは表示開始時間、EndTime1は表示終了時間、RespTimeはキーを押した時間、EndTime2は暗転終了時間、Latencyは表示開始からキーが押されるまでの時間、EndFlag1は表示終了、EndFlag2は暗転終了、StimTypeは文字の種類、dataは当座の順番保管場所になります。
(以下作成コード)
Public Class Form1
Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal nVirtKey As Integer) As Short
Dim Trial As Integer
Dim StartTime, EndTime1, RespTime, EndTime2, Latency(130) As Long
Dim EndFlag1, EndFlag2 As Boolean
Dim StimType(30) As Integer
Dim data(30) As Integer
Dim i As Integer
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Button1.Visible = False
EndFlag1 = False
Trial = 1
ArrangeStim()
StimStream()
End Sub
Private Sub StimStream()←文字の表示
Label1.Visible = True
StartTime = System.Environment.TickCount
EndFlag2 = False
StimType(Trial) = data(i)
Select Case StimType(Trial)
Case 1
Label1.Text = "文字1"
Case 2
Label1.Text = "文字2"
(中略)
Case 28
Label1.Text = "文字28"
End Select
Do Until EndFlag1
Application.DoEvents()
EndTime1 = System.Environment.TickCount
If EndTime1 - StartTime > 1000 Then
EndFlag1 = True
End If
Loop
If EndFlag1 = True Then
Trial = Trial + 1
End If
If (&H001 And GetAsyncKeyState(System.Windows.Forms.Keys.Space)) = 1 Then
BlackOut()
End If
End Sub
Private Sub BlackOut()←暗転
Me.BackColor = Color.Black
RespTime = System.Environment.TickCount
Latency(Trial) = RespTime - StartTime
Do Until EndFlag2
Application.DoEvents()
EndTime2 = System.Environment.TickCount
If EndTime2 - RespTime > 10000 Then
EndFlag2 = True
End If
Loop
If EndFlag2 = True Then
Trial = Trial+ 1
StimStream()
End If
End Sub
Private Sub ArrangeStim()←文字のランダム化
Dim r, temp As Integer
For i = 1 To 28
data(i) = i
Next
For i = 1 To 28
r = Int(Rnd() * 28 + 1 - i) + i
temp = data(i)
data(i) = data(r)
data(r) = temp
Next
End Sub
End Class
No.1ベストアンサー
- 回答日時:
その示したプログラムが実際にどんな期待を裏切る動きをするのかくらい示さないと…。
どんな裏切り行為をするのかまで読むのが面倒なので、別のアプローチからのアドバイス。
いきなり全部の動作を行うプログラムから書き始めていないか?
1~5を1ステップずつ作ればデバッグも簡単だ。
今作ってあるモノは破棄して、新しく作り直すことを勧めてみる。
質問文を見る限り、いきなり完璧なモノを作ろうとしているように感じるのだ。
慣れていないならそんな無茶はしてはダメ。
早々のご回答大変ありがとうございました。
プログラミングに関する質問が初めてであり、また非常に焦っていたため、過去の質問等を閲覧するなどして明示すべきことを把握することを怠ってしまいました。大変申し訳ありませんでした。また、読みにくい駄文長文となってしまい、大変失礼致しました。
このプログラムですと、開始ボタンを押すと開始ボタンが消えて文字が出るところまではできるのですが、「文字1」しか表示されず、10秒経っても次の文字に切り替わりません。また、「文字1」の表示中にスペースキーを押すと画面全体が暗転するのですが、10秒経っても暗転状態が終わらず、ずっと暗転したままです。
以前からうまくいかない度に何回も破棄しては1から作り直していたのですが、自分ではステップを踏んだつもりになっていただけで、仰る通りそのひとつひとつがちゃんと作動するかどうかの確かめを怠っていたのだと思います。もう一度、動作をひとつずつ作っていこうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PL/Iについて
-
C言語で常駐ソフトを作成
-
VC++でCtrl+Vを操作させたい
-
OpenCVで音声は扱えるか
-
cygwinでのGUIプログラミングの...
-
c言語 関数 変数 引数 と...
-
三菱製PLC Qシリーズで技術的な...
-
アセンブリ名とは??
-
作業工程 SDとMD
-
Pythonでこのプログラミングを...
-
CSVデータの"(ダブルクォーテ...
-
exeファイルを作ったり改造した...
-
ゲームプログラミングについて
-
VBでアナログ時計を作りたい
-
HSPで3D移動
-
リピート再生が出来ません
-
< この記号プログラミングで使...
-
機械学習のプログラミング(Pyth...
-
C言語、C+、C++、C#の違い
-
プログラムに書かれる"%"記号の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アセンブリ名とは??
-
リピート再生が出来ません
-
procってなんですか?
-
Visual Studio Codeについて
-
PL/Iについて
-
exeファイルを作ったり改造した...
-
VBA フォルダ アクセス権限付与
-
VBAプログラミング
-
CSVデータの"(ダブルクォーテ...
-
push any key で終了する方法?
-
作業工程 SDとMD
-
OpenCVで音声は扱えるか
-
プログラミングを使ったYoutube...
-
PHPやJavaで料金シュミレーショ...
-
Cで本格的なプログラムを作りたい
-
Delphiでxmlファイルを読み込む...
-
図形の中心の取り方を教えてく...
-
エクセルVBAでRS232Cへ
-
C言語を学ぶうえでの古典的な名...
-
IT業界より楽に稼げる業界って...
おすすめ情報