私は心理学を専攻する大学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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでRS232Cへ
-
exeファイルを作ったり改造した...
-
プログラミングが趣味って暗い...
-
プログラミングとプラモ作りて...
-
アセンブリ名とは??
-
VBでアナログ時計を作りたい
-
procってなんですか?
-
push any key で終了する方法?
-
プログラミングでArduinoのc++...
-
C言語を学ぶうえでの古典的な名...
-
SEOでお勧めの本はありますか?
-
Arduinoのシリアル入力について
-
高校生でMacbookを買ってしまっ...
-
曲を作るのにプログラミングっ...
-
プログラミング
-
整数1〜99を入力させ、それを英...
-
COBOLでのNOT = の AND条件
-
プログラム言語について c言語...
-
C++における継続行
-
UNITY Float型の接尾辞fって
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Visual Studio Codeについて
-
アセンブリ名とは??
-
15.3インチは持ち運ぶには億劫...
-
プログラミングを学ぼうと思い...
-
VBA フォルダ アクセス権限付与
-
exeファイルを作ったり改造した...
-
procってなんですか?
-
CSVデータの"(ダブルクォーテ...
-
リピート再生が出来ません
-
VBAプログラミング
-
曲を作るのにプログラミングっ...
-
作業工程 SDとMD
-
プログラミングの課題がわから...
-
プログラミングでArduinoのc++...
-
Arduinoのシリアル入力について
-
名城大学理工学部電気電子工学...
-
push any key で終了する方法?
-
PL/Iについて
-
プログラミング
-
gettimeofday() と localtime_r...
おすすめ情報