[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2007/07/21(Sat) 08:28
投稿者名:tea
Eメール:
URL :
タイトル:
時間待機中にカウントがあった場合のコードの記述を教えてください。
前回の投稿でGetTickCountを使うことで時間を待機させる方法が理解できた
のですが、新たな問題が出てきました。

ゲームタイムが00:00秒になった場合にGetTickCountで00:00秒を5秒間待
機させて、その5秒間の間にファウルがなかった(回数 0)場合には、その
まま次のゲームタイムを表示させる。
ファウルが1回だけあった場合にはゲームタイムを00:01に戻してゲームタ
イムを再開する。
というように動作させたいのですが、うまくいきません・・・。

下記のコードではFor〜Next文があるために繰り返し処理を行ってしまいファ
ウルが1回カウントされた後も繰り返し処理が行われCase 1を実行した後に
Case 0も実行してしまうために思うような動作とはなりません。
どうか教えてください。

visual Basic 中学校の掲示板にも以下のコードとは若干違う質問をしていま
すが、解決した場合にはそちらにも報告を必ず行いますのでご理解ください。
よろしくお願いします。

'GetTickCount(待機時間)のコード
Private Function Delay(ByVal t As Long)
Dim At_0 As Long, At_1 As Long
  At_0 = GetTickCount
  At_1 = At_0
  While ((At_1 - At_0) < t)
    At_1 = GetTickCount
    DoEvents
  Wend
End Function

'ゲームタイムが0秒になった場合
If vsGameTime.Value = 0 Then
    'ブザー音
    BeepBuzzer2
           'ブザービーターに備えて00:00秒のまま5秒間待機させる。
            Delay 5000
            
      'チームA&B
            For l = 0 To 1
            'プレイヤーは5名
            For k = 1 To 5
                '5秒間の待機中にファウルがカウントされなかったら抜ける。
        'ファウルが1回カウントされた場合には時間を1秒戻して、
        '再度00:01からタイマーを再開する。
                Select Case Game.Team(l).Player(k).FoulCount
                
                Case 0
                    Exit For
                    Exit For
                    
                Case 1
                    'タイマー
          vsGameTime.Enabled = True
                    '1秒加える。
          vsGameTime.Value = 1
          ゲームスタートボタンを非表示にする。
                    cmdGameStart.Enabled = False
          '再開ボタンを表示する。
                    cmdGamePause.Enabled = True
                    
                    
                End Select
                      
            Next
            Next
            
      'タイマーを停止。
            tmrCountDown.Enabled = False
      '次のクォーター表示へ進む。
            readyNextQuarter
End if

投稿時間:2007/07/21(Sat) 10:55
投稿者名:(報告)
Eメール:
URL :
タイトル:
Re: 時間待機中にカウントがあった場合のコードの記述を教えてください。
掲示板利用の際には、その掲示板のルールを守るようにお願いいたします。
マルチポストについて
http://hanatyan.sakura.ne.jp/hazimeni.htm#keijiban

http://hpcgi1.nifty.com/rucio/mb1/mb1.cgi

> 前回の投稿でGetTickCountを使うことで時間を待機させる方法が理解できた
> のですが、
http://hanatyan.sakura.ne.jp/vb60bbs/wforum.cgi?mode=allread&no=9628&page=0
これでは解決報告として不十分です。

投稿時間:2007/07/21(Sat) 11:29
投稿者名:tea
Eメール:
URL :
タイトル:
Re^2: 時間待機中にカウントがあった場合のコードの記述を教えてください。
> 掲示板利用の際には、その掲示板のルールを守るようにお願いいたします。
> これでは解決報告として不十分です。

ここの掲示板を何度も利用しているのに本当に申し訳なくまた大変失礼しました。
解決の詳細は投稿しました。
今後は十分に留意します。

改めて時間待機中にカウントがあった場合のコードの記述を教えてください。
よろしくお願いします。

投稿時間:2007/07/21(Sat) 13:16
投稿者名:ひまびと
Eメール:
URL :
タイトル:
Re^3: 時間待機中にカウントがあった場合のコードの記述を教えてください。
こんにちは

取り敢えず、投稿されたコードのフローチャートを
書いてみては如何ですか?

どこに破綻があるのか見えてくると思いますよ。

投稿時間:2007/07/21(Sat) 14:35
投稿者名:tea
Eメール:
URL :
タイトル:
Re^4: 時間待機中にカウントがあった場合のコードの記述を教えてください。
> 取り敢えず、投稿されたコードのフローチャートを
> 書いてみては如何ですか?
> どこに破綻があるのか見えてくると思いますよ。

ひまびとさん、回答していただき本当にありがとうございます。
2日悩んで最初の投稿コードしか出来ませんでした。
さっそくフローチャートをはじめて描いてみましたが、どうにもわかりません。
問題はFor文な気はするんですが具体的にはちょっと・・・。
すいませんが、教えてください。
よろしくお願いします。

投稿時間:2007/07/21(Sat) 15:06
投稿者名:ひまびと
Eメール:
URL :
タイトル:
Re^5: 時間待機中にカウントがあった場合のコードの記述を教えてください。
> さっそくフローチャートをはじめて描いてみましたが、どうにもわかりません。

フローチャートってのは処理の流れを視覚化するツールですよね。
書いてみたフローチャートの流れをよく見てください。
For文がおかしいと解っているのであれば、そこを変更して
フローチャートを書き直してください。

もし、フローチャートを書けないというのであれば、
希望する処理を順番に箇条書きにして投稿してみてください。

投稿時間:2007/07/21(Sat) 16:08
投稿者名:tea
Eメール:
URL :
タイトル:
Re^6: 時間待機中にカウントがあった場合のコードの記述を教えてください。
> For文がおかしいと解っているのであれば、そこを変更して
> フローチャートを書き直してください。
> もし、フローチャートを書けないというのであれば、
> 希望する処理を順番に箇条書きにして投稿してみてください。

ひまびとさん、回答本当にありがとうございます。

最初に投稿したコードの順番を箇条書きで書きます。
1.もし、ゲームタイムが00:00秒なら
2.ブザー音
3.5秒待機
4.繰り返し処理(For チーム0&1)
5.繰り返し処理(For プレイヤー1から5名)
6.ファウルカウントの処理(select)
7.チーム0のプレイヤー1のファウルカウントが0ならばプレイヤーのFor文を抜ける
8.チーム0のプレイヤー1のファウルカウントが0ならばチームののFor文を抜ける
9.チーム0のプレイヤー1のファウルカウントが1ならばゲームタイム表示
10.チーム0のプレイヤー1のファウルカウントが1ならばゲームタイムに1秒加えて00:01とする。
10.チーム0のプレイヤー1のファウルカウントが1ならばゲームスタートボタンを非表示にする。
11.チーム0のプレイヤー1のファウルカウントが1ならばゲーム再開ボタンを表示する。
12.select文の終了。
13.繰り返し処理。
14.繰り返し処理。

とここまで書いて以下のようにしたらいいのではないかと思い、実行してみました。
If vsGameTime.Value = 0 Then
            BeepBuzzer2
           '---ブザービーターに備えて5秒間遅らせる。----
            Delay 5000
            
            For l = 0 To 1
            For k = 1 To 5
            
                Select Case Game.Team(l).Player(k).FoulCount
                
                Case 0
                    Exit For
                    Exit For
                    
                Case 1
                    vsGameTime.Enabled = True
                    vsGameTime.Value = 1
                    cmdGameStart.Enabled = False
                    cmdGamePause.Enabled = True
                    Exit For←ここを追加。
                    Exit For←ここを追加。
                End Select
            
            Next
            Next
            
            '---------------------------------------------
            tmrCountDown.Enabled = False
            readyNextQuarter
End if

結果は失敗でした。というか何も変わりませんでした・・・。
プレイヤーは各チームに5名で、どのプレイヤーになるかはわからないですが
その中の1名がファウルカウントを取ったらの処理です。
前回の投稿でFor文を見直せとの事でしたが、他の選択肢が思い浮かびません。
教えてください。
よろしくお願いします。

投稿時間:2007/07/21(Sat) 20:32
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^7: 時間待機中にカウントがあった場合のコードの記述を教えてください。
 何をやりたいのかいまいちよくわからないのですが、少なくとも

>                     Exit For
>                     Exit For

 上の「Exit for」で、内側のForループのNextの次に行きますので、
下の「Exit for」は意味がありません。ステップ実行をしてプログラムの
動きを確認すればおかしいところがわかるのではないでしょうか?

投稿時間:2007/07/21(Sat) 23:19
投稿者名:tea
Eメール:
URL :
タイトル:
Re^8: 時間待機中にカウントがあった場合のコードの記述を教えてください。
>  上の「Exit for」で、内側のForループのNextの次に行きますので、
> 下の「Exit for」は意味がありません。ステップ実行をしてプログラムの
> 動きを確認すればおかしいところがわかるのではないでしょうか?

Starfishさん、回答ありがとうございます。
確かに下のExit forは不要でした・・・。

ひまびとさんは、For文に問題があるように指摘されていますので、ヘルプや
ネット、過去ログでFor文に変わる条件分岐を探しましたがどれが該当するの
かもわからなくなってきましたし、Exit for文の位置に問題がある気もしま
すが、どこが適当かもわかりません・・・。
どうか教えてください。
よろしくお願いします。

投稿時間:2007/07/22(Sun) 00:32
投稿者名:あきら。
Eメール:
URL :
タイトル:
Re^9: ループを終わらせたいだけなら
横レス失礼します。
本題の回答にあらずです。

この場合ならkとlに終了条件の値をセットすればいいですね。^^

投稿時間:2007/07/22(Sun) 00:49
投稿者名:tea
Eメール:
URL :
タイトル:
一応解決しました。
> この場合ならkとlに終了条件の値をセットすればいいですね。^^

あきらさん、回答ありがとうございます。
その後いろいろ考えて改めてコードを書き直しましたところ一応ですが
動作しました。
以下がそのコードです。

If vsGameTime.Value = 0 Then
            BeepBuzzer2
           '---ブザービーターに備えて5秒間遅らせる。----
            Delay 5000
            
            For l = 0 To 1
                For k = 1 To 5
                    If Game.Team(l).GameMember(k).FoulCount = 0 Then
                        Delay 0
                    ElseIf Game.Team(l).GameMember(k).FoulCount = 1 Then
                        vsGameTime.Enabled = True
                        vsGameTime.Value = 1
                        cmdGameStart.Enabled = False
                        cmdGamePause.Enabled = True
                        pauseGame
                        Exit For
                    End If
                Next k
            Next l
'---------------------------------------------
            If vsGameTime.Value = 0 Then
                tmrCountDown.Enabled = False
                readyNextQuarter
            End If          
'----------------------------------------------
点線で囲んだ箇所は完全に動作はしていませんが、今後取り組みます。
わからないことがあれば、また質問させていただきます。
的外れな質問になるかもしれませんが、なにとぞよろしくお願いします。

ひまびとさん、Starfishさん、あきらさん本当にありがとうございました。