間違いを指摘してください!!


mmmわからない・・・  2006-09-11 12:01:06  No: 133189

[VBのVER]:visual basis 6.0
  この度、心理学実験でプログラミングをすることになったのですが、初心者の初の段階にも達していない状態で、困っています。以前にも書き込ませて頂いて、色々と調べて考えてみたのですが、完全に行き詰ってしまいました・・・
  どなたか助けて下さい!!!!

大まかに言うと、大体以下のようなレイアウトで考えています。 
「ピクチャーボックス1つ、コマンドボタン2つ(スタート・ストップ)、テキストボックス・タイマー1つ」を配置して、スタートを押すと、
ピクチャーボックスに5色(白・黄・緑・青・赤)のいずれかで、四角形が描かれ、同時にタイマー起動。
ストップでタイマーがストップし、ピクチャーボックスが空になる。

各色四角形は必ず1回ずつで、しかも最後に、テキストボックスに、各回の反応時間呈示」というプログラムにしたいのですが・・・。 
で、画像はなく、できればpicture.line〜で書きたい!
初心者にはキツイ・・・。  プログラム例を教えてください。お願いしますm(_ _)m 

いまの所、こんな感じで書いてます。ただ、これだと、何回スタートを押しても、同じ色の四角が出てしまうんです。。。
できれば、プログラムの間違いを指摘して頂きたいのですが、
全く新しいプログラム例でも構わないので、宜しくお願いします。

Private Declare Function timeGetTime Lib "winmm.dll" () As Long 
Option Explicit 
Dim starttime As Long, stoptime As Long, rt As Long, num As Integer, trial(10) As Integer 

Private Sub RndOrder(n As Integer, order() As Integer) 
Dim i As Integer, x As Integer, dummy As Integer 
For i = 1 To n 
order(i) = i 
Next i 
For i = 1 To n - 1 
x = Int((n + 1 - i) * Rnd) + i 
dummy = order(x) 
order(x) = order(i) 
order(i) = dummy 
Next i 
End Sub 
Private Sub shiko(a As Integer, b As Integer, c As Integer) 
Picture1.Line (1000, 1000)-(2000, 2000), RGB(a, b, c), BF 
End Sub 
Private Sub Command2_Click() 
stoptime = timeGetTime 
rt = stoptime - starttime 
Text1.Text = Str(rt) 
Picture1.Cls 
num = num + 1 
End Sub 
Private Sub command1_click() 

starttime = timeGetTime 

num = 1 

Select Case Int(trial(num) Mod 10) 
Case 0 
shiko 0, 0, 0 
Case 1 
shiko 0, 0, 255 
Case 2 
shiko 255, 255, 255 
Case 3 
shiko 255, 255, 0 
Case 4 
shiko 0, 255, 0 
Case 5 
shiko 255, 0, 0 
Case 6 
shiko 255, 0, 255 
Case 7 
shiko 247, 148, 29 
Case 8 
shiko 161, 29, 33 
Case 9 
shiko 136, 39, 27 
End Select 

End Sub 
Private Sub Form_Load() 
Picture1.Cls 
Randomize 
RndOrder 10, trial() 

End Sub


ヤマ@文系  2006-09-11 14:11:16  No: 133190

Trialって関数自体でてきてないんですが。。。
select case のところあたりでデバッグすべきです。
Trialっていう関数があったとしても、
num=1となっているし。これでは固定されてしまってます。

修正したのを下に書いておくので参考までに。

ウォッチ式などで変数をおいかけたり
デバッグでブレークポイントでとまりながら変数を確認したりしてください。
-------------------------------------------------
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Option Explicit
Dim starttime As Long, stoptime As Long, rt As Long, num As Integer, trial(10) As Integer

'Private Sub RndOrder(n As Integer, order() As Integer)'いらないとお思います。
'Dim i As Integer, x As Integer, dummy As Integer
'For i = 1 To n
'order(i) = i
'Next i
'For i = 1 To n - 1
'x = Int((n + 1 - i) * Rnd) + i
'dummy = order(x)
'order(x) = order(i)
'order(i) = dummy
'Next i
'End Sub
Private Sub shiko(a As Integer, b As Integer, c As Integer)
Picture1.Line (1000, 1000)-(2000, 2000), RGB(a, b, c), BF
End Sub
Private Sub Command2_Click()
stoptime = timeGetTime
rt = stoptime - starttime
Text1.Text = CStr(rt / 1000) & "秒" 'CSTRでないと0.がけずれるので変更してみました。
Picture1.Cls
num = num + 1
End Sub
Private Sub command1_click()

starttime = timeGetTime

'num = 1 '毎回初期化されてるのではずす
Randomize timeGetTime

Select Case CStr(Int(Rnd * 9) + 1)
Case 0
shiko 0, 0, 0
Case 1
shiko 0, 0, 255
Case 2
shiko 255, 255, 255
Case 3
shiko 255, 255, 0
Case 4
shiko 0, 255, 0
Case 5
shiko 255, 0, 0
Case 6
shiko 255, 0, 255
Case 7
shiko 247, 148, 29
Case 8
shiko 161, 29, 33
Case 9
shiko 136, 39, 27
End Select

End Sub

Private Sub Form_Load()
Picture1.Cls
Randomize
'RndOrder 10, trial()
num = 1 'ここれnumの初期値
End Sub


VBレスキュー(花ちゃん)  2006-09-11 17:47:09  No: 133191

プログラムを勉強する前にマナーを勉強しましょう
http://www7.big.or.jp/~pinball/discus/vb/61705.html


※返信する前に利用規約をご確認ください。




  


  このエントリーをはてなブックマークに追加