tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトル「0」ではなく「数字」が表示されるようにはなりましたが、
記事No11700
投稿日: 2008/03/07(Fri) 09:50
投稿者tea
また、質問させてください。
Indexをグローバル変数にすることでPicyureBox内の所定の位置に
「0」ではなくて「数字」が表示されるようにはなりましたが、
7箇所の表示位置に対して、1回目にコマンドボタンをクリックす
ると、仮に表示される数字は「2」だとして、2回目にコマンドボタン
をクリックすると「3」とします。

7箇所の表示は「2」「3」「=」「=」「=」「=」「=」
となるはずですが、以下のコードを実行すると
「3」「3」「=」「=」「=」「=」「=」と表示されてしまいます。

何故このようになるのかわかりません。
教えてください。
よろしくお願いします。

標準モジュール
Option Explicit

Public Index As Integer

Teamクラス
Private Type UTeam
    AnElapsedTime(bbTimeMin To bbTimeMax) As Integer
End Type
Private mp As UTeam

Public Property Get AnElapsedTime(ByVal Index As bbTime) As Integer
    AnElapsedTime = mp.AnElapsedTime(Index)
End Property

Public Property Let AnElapsedTime(ByVal Index As bbTime, _
                    ByVal NewValue As Integer)
    With mp
        .AnElapsedTime(Index) = NewValue
        .IsDirty = True
    End With
End Property

Private Sub clearResultWithoutPlayers()
Dim i As Long

    With mp
        For i = bbTimeMin To bbTimeMax
              .AnElapsedTime(i) = -1
        Next
       .IsDirty = True
    End With
End Sub

PrintEngineクラス
Public Sub TimeOutMinutes(ByVal Col As Single, _
                           ByVal Row As Single, _
                           ByVal Cols As Single, _
                           ByVal Rows As Single, _
                           Optional ByVal Color As Variant = Empty, _
                           Optional ByVal Font As Object = Nothing, _
                           Optional ByVal Index As Integer)

Dim Text As Integer
Dim Alignment As EAlignment33
  
    Text = Index
    
    With makeMatrixRect(Col, Row, Cols, Rows)
        drawText .Left + 0.2, .Top + 0.05, .Right, .Bottom, _
            Text, Alignment, Color, Font
    End With
    
End Sub
'経過時間計測
Public Sub AnElapsedTime()
Dim b As Integer
Dim c As Integer
Dim d As Integer
    
    b = Game.Setting.QuarterMinutes
    c = Left(frmMain.vsGameTime.Value / 60, 1)
    d = b - c
        
    Index = d
    
End Sub

RScoreSheetCommanderクラス
drawTeam
ixRow = ixRow + 1
            
            For i = bbTimeOutMin To bbTimeOutMax
            
                .DrawMatrixBox i, ixRow, 1, 1
                
                If mp.Game.Team(ixTeam).TimeOutted(i) Then
                    If mp.Game.Team(ixTeam).AnElapsedTime(i) = -1 Then
                        Call .AnElapsedTime
                        .TimeOutMinutes i, ixRow, 1, 1, _
               colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), _
            , Index
                    ElseIf mp.Game.Team(ixTeam).AnElapsedTime(i) <> -1 Then
                        Index = mp.Game.Team(ixTeam).AnElapsedTime(i)
                        .TimeOutMinutes i, ixRow, 1, 1, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), ,_
             Index
                    End If
                Else
                    '「=」ダブルラインを表示する。
                    .DrawMatrixCenterDoubleLine i, ixRow, 1, 0.95, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i))
                End If
            
            Next

[ツリー表示へ]
タイトルRe: 「0」ではなく「数字」が表示されるようにはなりましたが、
記事No11702
投稿日: 2008/03/07(Fri) 10:16
投稿者花ちゃん
> また、質問させてください。

質問ではなく、単なるバグ取りの依頼のような気がしますが、F8 キーを押して起動
させて、プログラムを順に追って、変数等の値がどのようになるかとか、
問題がありそうな部分にブレークポイント設定して値等を確認する等して、ご自分で
調べるようにしないと...。
(プログラムを1行づつ何をしているかを理解して、後からでも解るようにコメントを
記入するような事から始めないと)
その辺が理解できるようになったら、こう言った問題は解決できるはずです。

その結果見つかった問題点の修正方法なりを質問するなら、それは、それでいいとは
思うのですが、ご自分で調べるべき事は、ご自分で調べないと宿題の答えを聞いて
いるのと同じ事で何の進歩もないのではないでしょうか。

[ツリー表示へ]
タイトルRe^2: 「0」ではなく「数字」が表示されるようにはなりましたが、
記事No11710
投稿日: 2008/03/07(Fri) 16:57
投稿者tea
改めて質問させていただきます。
Indexはグローバル変数で宣言しています。
コマンドボタンをクリックした場合に1回目の経過時間から7回目の
経過時間を.AnElapsedTime(1)から(7)に値を保存したいと考えて、以
下のようにコードを記述しました。
例としては「1」「2」「3」「4」「=」「5」「6」といった表示にな
ります。
一定期間内にコマンドボタンがクリックされなかった場合に「=(ダ
ブルライン)」を表示するようにしていますが、全7回の内「=」が
入るとその後の経過時間が正しく表示されなくなります。
デバッグもしてみたんですが、わかりません。

どうか教えてください。
よろしくお願いします。

PrintEngineクラス
'チャージドタイムアウト時の残り時間の表示
Public Sub TimeOutMinutes(ByVal Col As Single, _
                           ByVal Row As Single, _
                           ByVal Cols As Single, _
                           ByVal Rows As Single, _
                           Optional ByVal Color As Variant = Empty, _
                           Optional ByVal Font As Object = Nothing, _
                           Optional ByVal Index As Integer)

Dim Text As Integer
Dim Alignment As EAlignment33
  
    Text = Index
    
    With makeMatrixRect(Col, Row, Cols, Rows)
        drawText .Left + 0.2, .Top + 0.05, .Right, .Bottom, _
            Text, Alignment, Color, Font
    End With
    
End Sub
'チャージドタイムアウト取得時の経過時間計測
Public Sub AnElapsedTime()
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Dim g As Integer
Dim h As Integer

    '通常のゲームタイムの経過時間算出
    b = Game.Setting.QuarterMinutes
    c = Left(frmMain.vsGameTime.Value / 60, 1)
    d = b - c
    Index = d
    
    '延長戦のゲームタイムの経過時間算出
    If Game.IsExtraQuarter = True Then
        Select Case Game.Setting.QuarterMinutes
        'クォーター時間が5&6&7分の場合は延長戦は3分
            Case 5, 6, 7
                e = 3
                g = e - c
                Index = g
        'クォーター時間が8&9&10分の場合は延長戦は5分
            Case 8, 9, 10
                f = 5
                h = f - c
                Index = h
            'Case Else
                'Game.Setting.ExtraQuarterMinutes = Game.Setting.QuarterMinutes
        End Select
    End If
End Sub

RScoreSheetCommanderクラス
drawTeam
'チャージドタイムアウト取得時間の表示。
            ixRow = ixRow + 1
            
            For i = bbTimeOutMin To bbTimeOutMax
            
                .DrawMatrixBox i, ixRow, 1, 1
                
                If mp.Game.Team(ixTeam).TimeOutted(i) Then
                    If mp.Game.Team(ixTeam).AnElapsedTime(i) = -1 Then
                        Call .AnElapsedTime
                        '「経過時間」を表示する-----------------
                        .TimeOutMinutes i, ixRow, 1, 1, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), _
            , Index
                        
            '---表示位置に経過時間の値を保存-------
                        Select Case Index
                        Case 1
                            mp.Game.Team(ixTeam).AnElapsedTime(1) = Index
                        Case 2
                            mp.Game.Team(ixTeam).AnElapsedTime(2) = Index
                        Case 3
                            mp.Game.Team(ixTeam).AnElapsedTime(3) = Index
                        Case 4
                            mp.Game.Team(ixTeam).AnElapsedTime(4) = Index
                        Case 5
                            mp.Game.Team(ixTeam).AnElapsedTime(5) = Index
                        Case 6
                            mp.Game.Team(ixTeam).AnElapsedTime(6) = Index
                        Case 7
                            mp.Game.Team(ixTeam).AnElapsedTime(7) = Index
                        End Select
                        
                    ElseIf mp.Game.Team(ixTeam).AnElapsedTime(i) <> -1 Then
                        Index = mp.Game.Team(ixTeam).AnElapsedTime(i)
                        .TimeOutMinutes i, ixRow, 1, 1, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), _
            , Index
                    End If
                Else
                    '「=」ダブルラインを表示する。
                    .DrawMatrixCenterDoubleLine i, ixRow, 1, 0.95, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i))
                End If
            Next

[ツリー表示へ]
タイトルRe^3: 「0」ではなく「数字」が表示されるようにはなりましたが、
記事No11715
投稿日: 2008/03/08(Sat) 10:26
投稿者花ちゃん
> デバッグもしてみたんですが、わかりません。
それは、デバッグしていないからです。

ある計算結果が、5 になるはずだとして、結果が 0 で有った場合、その変数を
使っているところのコードを追っていけば、どこで、計算しているのか、どこで
変数をクリアしているのか、解るはずでは。

どの行のどの値が、どうなっているのかを調べましたか?

[ツリー表示へ]
タイトル解決しました。
記事No11716
投稿日: 2008/03/08(Sat) 13:05
投稿者tea
花ちゃんさん、回答をいただきまして本当にありがとうございます。

ご指摘いただいたとおり私のデバッグの方法に問題がありました。
今後はヘルプなどをよく読み、熟考してから質問させていただきます。

また、今まで質問していた問題が解決しました。

琴さん、花ちゃんさん、ご迷惑をおかけしました。

標準モジュール内
Public Index(1 To 7) As Integer

PrintEngneクラス
Public Sub TimeOutMinutes(ByVal Col As Single, _
                           ByVal Row As Single, _
                           ByVal Cols As Single, _
                           ByVal Rows As Single, _
                           Optional ByVal Color As Variant = Empty, _
                           Optional ByVal Font As Object = Nothing, _
                           Optional ByVal Index As Integer)

Dim Text As Integer
Dim Alignment As EAlignment33
  
    Text = Index
    
    With makeMatrixRect(Col, Row, Cols, Rows)
        drawText .Left + 0.2, .Top + 0.05, .Right, .Bottom, _
            Text, Alignment, Color, Font
    End With
    
End Sub

'経過時間計測
Public Sub AnElapsedTime()
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Dim g As Integer
Dim i As Integer

    For i = 1 To 7
    '---通常のゲームタイムの経過時間算出----
    If Game.IsExtraQuarter = False Then
        b = Game.Setting.QuarterMinutes
        c = Left(frmMain.vsGameTime.Value / 60, 1)
        d = b - c
        Index(i) = d
    
    '---延長戦のゲームタイムの経過時間算出---
    ElseIf Game.IsExtraQuarter = True Then
        e = Game.Setting.ExtraQuarterMinutes
        f = Left(frmMain.vsGameTime.Value / 60, 1)
        g = e - f
        Index(i) = g
    End If
    Next
End Sub

RScoreSheetCommanderクラス
drawTeam
ixRow = ixRow + 1
            
    For i = bbTimeOutMin To bbTimeOutMax
            
            .DrawMatrixBox i, ixRow, 1, 1
                
                If mp.Game.Team(ixTeam).TimeOutted(i) Then
                    If mp.Game.Team(ixTeam).AnElapsedTime(i) = -1 Then
                        Call .AnElapsedTime
                        '「経過時間」を表示する
                        .TimeOutMinutes i, ixRow, 1, 1, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), _
            , Index(i)
                            'Index(i)に経過時間を保存する。
                            mp.Game.Team(ixTeam).AnElapsedTime(i) = Index(i)
                    ElseIf mp.Game.Team(ixTeam).AnElapsedTime(i) <> -1 Then
                        Index(i) = mp.Game.Team(ixTeam).AnElapsedTime(i)
                        .TimeOutMinutes i, ixRow, 1, 1, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i)), _
            , Index(i)
                    End If
                Else
                    '「=」ダブルラインを表示する。
                    .DrawMatrixCenterDoubleLine i, ixRow, 1, 0.95, _
            colorByQuarter(mp.Game.Team(ixTeam).TimeOutted(i))
                End If

[ツリー表示へ]