[リストへもどる]
一括表示

投稿時間:2004/03/03(Wed) 19:05
投稿者名:トラッキー
Eメール:
URL :
タイトル:
それぞれの得点を表示するには?
スポーツゲーム記録ソフトを作っているんですが、
試合開始ボタンでタイマー起動後し一定時間が過ぎて
タイマーが0になった時のそれぞれ(各クォーター)の
得点lblQTokutenを別フォームのプレビュー画面に表示
させたいのですが、いろいろと試しましたがどうにも
うまくいきません。どうか教えてください。

投稿時間:2004/03/03(Wed) 19:14
投稿者名:ひな
Eメール:
URL :
タイトル:
Re: それぞれの得点を表示するには?
> スポーツゲーム記録ソフトを作っているんですが、
> 試合開始ボタンでタイマー起動後し一定時間が過ぎて
> タイマーが0になった時のそれぞれ(各クォーター)の
> 得点lblQTokutenを別フォームのプレビュー画面に表示
> させたいのですが、いろいろと試しましたがどうにも
> うまくいきません。どうか教えてください。

「タイマーが0になった時」...普通はタイマーは+して行きますが
初期値からーさせている?
どの様に「うまくいきません」ですか?
「別フォームのプレビュー画面に表示」とは具体的にどう言うコード?

まずは現在の状況を再現出来るコードを提示しなければ
フォローの書きようが無いのでは?
自分の問題点を解決したくて人様の知恵を借りるのならまずは
自分から情報を提供するのが先決で、サンプルを求めるのはダメ。

投稿時間:2004/03/03(Wed) 19:43
投稿者名:トラッキー
Eメール:
URL :
タイトル:
Re^2: それぞれの得点を表示するには?
ひなさん、ありがとうございます。

> 「タイマーが0になった時」...普通はタイマーは+して行きますが
> 初期値からーさせている?

"05:00"などを指定して、00:00へと減らしていっています。

問題のプレビュー画面のコードですが・・・
'Aチームの各クォーターの得点を表示します。'
    If frmGameRecord.cmdGameTimer(2).Value Then
        '第1クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblQTokuten(0).Caption)
    ElseIf frmGameRecord.cmdGameTimer(2).Value Then
        '第2クォーターの得点'
        Call PLocate(59, 3, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
    ElseIf frmGameRecord.cmdGameTimer(2).Value Then
        '第3クォーターの得点'
        Call PLocate(59, 4, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
    ElseIf frmGameRecord.cmdGameTimer(2).Value Then
        '第4クォーターの得点'
        Call PLocate(59, 5, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
    End If
と記述してみました。
lblTokuten1(0)はAチームの総得点です。
ご指導願います。

投稿時間:2004/03/03(Wed) 19:42
投稿者名:LESIA
Eメール:
URL :
タイトル:
Re: それぞれの得点を表示するには?
> スポーツゲーム記録ソフトを作っているんですが、
> 試合開始ボタンでタイマー起動後し一定時間が過ぎて
> タイマーが0になった時のそれぞれ(各クォーター)の
> 得点lblQTokutenを別フォームのプレビュー画面に表示
> させたいのですが、いろいろと試しましたがどうにも
> うまくいきません。どうか教えてください。

タイマーで計る場合は、タイミングによってはちょうど0にならない可能性もあるので
If 残り時間 <= 0 Then
のように0以下になったら処理をするようにしてみてはどうでしょうか?

投稿時間:2004/03/03(Wed) 20:26
投稿者名:トラッキー
Eメール:
URL :
タイトル:
Re^2: それぞれの得点を表示するには?
> タイマーで計る場合は、タイミングによってはちょうど0にならない可能性もあるので
> If 残り時間 <= 0 Then
> のように0以下になったら処理をするようにしてみてはどうでしょうか?

以下のように記述してみましたが、タイマーが0になったらリセットボタンを
クリックすることで再度タイマーを起動しますが、その際lblQTokutenを0に
戻すためプレビュー画面で思ったように表示出来ませんでした。

'Aチームの各クォーターの得点を表示します。'
    If frmGameRecord.tmrGameTime <= 0 Then
        '第1クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblQTokuten(0).Caption)
        Call PLocate(59, 3, "0")
        Call PLocate(59, 4, "0")
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 Then
        '第2クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblQTokuten(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblTokuten1(0).Caption - _
                                frmGameRecord.lblQTokuten(0).Caption)
        Call PLocate(59, 4, "0")
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 Then
        '第3クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblQTokuten(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 4, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 Then
        '第4クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblQTokuten(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 4, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 5, frmGameRecord.lblQTokuten(0).Caption - _
                                frmGameRecord.lblTokuten1(0).Caption)
    End if

投稿時間:2004/03/03(Wed) 22:41
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^3: それぞれの得点を表示するには?
表示設定のところでブレークポイントを設定して、frmGameRecord.lblQTokuten(0).Caption の中身を
調べてみて下さい。
正しい値が入っていたら、表示設定の後で Doevents の一行を追加して見て下さい。

投稿時間:2004/03/04(Thu) 08:01
投稿者名:ひな
Eメール:
URL :
タイトル:
Re^3: それぞれの得点を表示するには?
下記の If 文は実際のコードですか?
Elseif が If の行とまったく同じですよ。
これでは一番上の
>     If frmGameRecord.tmrGameTime <= 0 Then
..に続く処理しかされませんよね。

frmGameRecord.tmrGameTime の変数名が変わるとか
<= 0 の値が変わらなければ...。 私の思い違い?

> 'Aチームの各クォーターの得点を表示します。'
>     If frmGameRecord.tmrGameTime <= 0 Then
>     ElseIf frmGameRecord.tmrGameTime <= 0 Then
>     ElseIf frmGameRecord.tmrGameTime <= 0 Then
>     ElseIf frmGameRecord.tmrGameTime <= 0 Then
>     End if

第1クォーターから第4クォーターに変わる時の条件は何なんですか?

投稿時間:2004/03/04(Thu) 09:43
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^3: それぞれの得点を表示するには?
>プレビュー画面で思ったように表示出来ませんでした。

どのように表示されてしまうのでしょうか?

ひなさんのおっしゃるように、コードだけ見ると、
第一クォーターの処理しかされないような...

カウンターを作って、リセットが押されたときにカウンタを+1
で、条件にカウンタを追加してみては?

if frmGameRecord.tmrGameTime <= 0 and cnt = 0 then
  第一クォーター
elseif frmGameRecord.tmrGameTime <= 0 and cnt = 1
  第ニクォーター
     ・
     ・
     ・

投稿時間:2004/03/04(Thu) 15:29
投稿者名:トラッキー
Eメール:
URL :
タイトル:
Re^4: それぞれの得点を表示するには?
> カウンターを作って、リセットが押されたときにカウンタを+1
> で、条件にカウンタを追加してみては?

ひなさん、黒影さん、ありがとうございます。
黒影さんご指摘のリセットボタンのところでカウンタを用意という事を
以下のように記述してみましたが間違っていないでしょうか?
Dim cnt As Integer
cnt = 0

'リセットボタンがクリックされた時'
Case 2
   cnt = cnt + 1

また、プレビュー画面に各クォーターの得点を表示するコードなのですが
前回投稿した際にはlblQTokuten(0)が記述してありましたが問題があった
ためコード等を削除しました。
合計得点lblTokuten1(0)から各クォーターの得点をそれぞれ表示していく
方法を考えてみたんですが思いつきません。
よろしくお願いします。

'Aチームの各クォーターの得点を表示します。'
    If frmGameRecord.tmrGameTime <= 0 And cnt = 0 Then
        '第1クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 3, "0")
        Call PLocate(59, 4, "0")
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 And cnt = 1 Then
        '第2クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 4, "0")
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 And cnt = 2 Then
        '第3クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 4, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 5, "0")
    ElseIf frmGameRecord.tmrGameTime <= 0 And cnt = 3 Then
        '第4クォーターの得点'
        Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 3, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 4, frmGameRecord.lblTokuten1(0).Caption)
        Call PLocate(59, 5, frmGameRecord.lblTokuten1(0).Caption)
  End if

投稿時間:2004/03/04(Thu) 17:01
投稿者名:黒影
Eメール:
URL :
タイトル:
Re^5: それぞれの得点を表示するには?
> 以下のように記述してみましたが間違っていないでしょうか?

コード合ってるかどうか聞く前に、試してみましょう!!
で、その結果がどうなったのか教えて下さい。

コードは大丈夫そうですが...
気になるところがいくつかあります
1)第1クォーターが始まる前にリセットが押されたら?
2)リセットボタンは何回も押せちゃうのか?

リセットボタンが押されたらじゃなくて、
ゲームが開始したら、カウンタUPさせる方が良いかも(^^;)

投稿時間:2004/03/04(Thu) 17:18
投稿者名:ひな
Eメール:
URL :
タイトル:
Re^5: それぞれの得点を表示するには?
あれこれ考えながら書いていたら先に黒影さんがリプライされましたね。

コードを書き直して、結果はどうなったのですか?
まだどこか不具合が有るのですか? あるなら具体的に書きましょう。
最初から読み直して見ましたが、どうにも問題点がはっきりしません。
表示関係のようですが、どの様に表示されて不具合で
期待している表示はどの様なものなのですか?


>         Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
>         Call PLocate(59, 3, frmGameRecord.lblTokuten1(0).Caption)

差し当たり上の2行に付いてでも
frmGameRecord.lblTokuten1(0).Caption が同じなんですが
良いんですか? 他も全て同じですよね?

Call PLocate(59, 2, frmGameRecord.lblTokuten1(0).Caption)
この Call文の処理は下記ですか?
frmGameRecord と言うフォーム上の
コントロール配列の lblTokuten1 と言うラベルの
(0).Caption インデックス番号0に表示されている文字列を
PLocate(59, 2  左から59カラム目、上から2行目に
表示する...でしょうか?  そうなら同じデータが
各クォータにより1から4行に表示される事になりますが。

それとも逆で左から59カラム目、上から2行目の値を
frmGameRecord.lblTokuten1(0).Caption に表示?
だとすれば全て同じ値がfrmGameRecord.lblTokuten1(0).Caption に
表示される事になりませんか?  (解釈ミスしているかも)


合計得点lblTokuten1(0) と書かれていますが
各クォーターの得点を変数にセットして置いて表示する
...とかの方が良いようにも思いますが、ソフトの
処理の全体像が掴めないので何とも言えないですね。


花ちゃんさんも書かれていましたが
実際にデバッグモード(ブレークポイントを設けてステップ実行)で
各値、表示を確認していますか?

コードのみにとらわれず、まずはアルゴリズムをきちんと整理して下さい。 
私も含めて以前はフローチャートを書いたりしたのですが
最近では書かない事が多いのかも知れませんが。