フラグを使い、ラベルを動かすんですが・・・


  2009-01-21 08:37:56  No: 141346

はじめまして。
今、フラグを使って、ラベルを動かすというプログラムを作っているんですが、最初に壁にぶつかった時だけダブルクリックをしなきゃ方向変換ができないんんです。
これを解決っすることはできませんか??

Visual Basic 2005,Windows XP,.Net Framework 2.0

Public Class Form1

    Dim Vec As Integer
    Dim ColorTarget As Integer
    Dim Flag As Integer
    Dim Speed As Integer

    Private Sub Form1_Load( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load

        Flag = 1
        Speed = -4
        Timer1.Enabled = True

    End Sub

    Private Sub Timer1_Tick( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick

        If Label1.Location.X + Label1.Size.Width >= Me.Width - 8 Then
            Vec = -4
        ElseIf Label1.Location.X <= 0 Then
            Vec = 4
        End If
        Label1.Location = New Point(Label1.Location.X + Vec, Label1.Location.Y)

    End Sub

    Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

        Flag = Flag * (-1)

        If Flag = 1 Then
            Vec = Speed
        Else
            Vec = -Speed
        End If
        Timer1.Enabled = True

    End Sub

    Private Sub Red_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Red.CheckedChanged

        Label1.BackColor = Color.Red

    End Sub

    Private Sub Orange_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Orange.CheckedChanged

        Label1.BackColor = Color.Orange

    End Sub

    Private Sub Yellow_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Yellow.CheckedChanged

        Label1.BackColor = Color.Yellow

    End Sub

    Private Sub Green_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Green.CheckedChanged

        Label1.BackColor = Color.Green

    End Sub

    Private Sub Blue_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Blue.CheckedChanged

        Label1.BackColor = Color.Blue

    End Sub

    Private Sub IndigoBlue_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles IndigoBlue.CheckedChanged

        Label1.BackColor = Color.Navy

    End Sub

    Private Sub Violet_CheckedChanged( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Violet.CheckedChanged

        Label1.BackColor = Color.Violet

    End Sub

    Private Sub Button2_Click( _
        ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click

        Timer1.Enabled = False

    End Sub

    Private Sub Button3_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button3.Click

        Me.Close()

    End Sub

End Class


  2009-01-21 08:59:57  No: 141347

>これを解決っすることはできませんか??
できるよ。
で、何が分からないの?


  2009-01-21 20:43:40  No: 141348

ダブルクリックからワンクリックで方向変換ができるように命令するプログラムです。


魔界の仮面弁士  2009-01-22 00:51:25  No: 141349

> フラグを使って
> Dim Flag As Integer
そのフラグの意味が分かるような変数名に修正する事をお奨めします。
Vec の方は、移動方向と移動量を表す"Vector"の意味だと類推できますが、
単に Flag だけでは、それが何を意味するのかは本人にしか分かりません。
1 や -1 が、どういった状態を表す値なのかも書かれていませんし。

そもそも、「1」と「-1」の 2 状態しか存在し無いのであれば、
Integer よりも、Boolean や列挙型を使った方が良いかと思います。

> ダブルクリックからワンクリックで方向変換ができるように命令するプログラムです。

何故ダブルクリックが必要になってしまうのか、その理由が分からないので
何が悪いのか説明して欲しい、という意味でしょうか?

それとも、問題点は分かっているけれども、どのように修正すべきか思いつかないので、
ヒントあるいはアドバイスが欲しい、という意味でしょうか?

(分からない点を具体的に質問した方が、回答が付きやすいですよ。)


  2009-01-22 07:32:46  No: 141350

私は問題点は分かっているけれども、どのように修正すべきか思いつかないので、ヒントあるいはアドバイスが欲しいという方です。


Renard  2009-01-22 08:27:48  No: 141351

ですから、判っている問題点をもっと具体的に説明してしないと・・・w

Flagが何のどのような状態を表しているのかを理解して、
状態の変化をFlagに反映するコードを追加すればいいのでは?


特攻隊長まるるう  2009-01-22 19:33:16  No: 141352

同じ指摘の繰り返しになりますが。。。

> 私は問題点は分かっているけれども
実行した結果の問題点ではなく、その動きを生み出している
コード上の問題点です。なぜ、ダブルクリックでないと
動かないかを調べてください。

ブレークポイントを使いプログラムを中断し、1行1行
ステップ実行し、その際の Vec Flag Speed がどうなるべきで
実際はどうなっているから方向が変わらないのですか?

既に一部 魔界の仮面弁士 さんからの指摘もありますが、
Vec Flag Speed の用途がかぶってるし、提示されたコードの
半分以上が質問と関係ありません。
問題点の原因となっているコードのみに限定して質問してください。

Speed は 4 で固定(定数)
Flag で方向を決めて、
Vec は削除できます。
コードを整理するだけでも違うと思います。

日本語でコードの意味を説明できるようにしてください。
ラベルの動く速度は一定で良いはずです。
フラグで方向を決めたら、
方向と移動量が決まってるのだから、ベクトルを
別に覚えるとデータが2重になってバグを生みます。
だから削除した方が良いという修正案が出ます。

日本語で考えて、間違った命令を出しているから
結果が期待通りではないのです。

修正版のコードが回答としてつくことはありません。
自分で解決する意思を見せてください。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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