はじめまして。
今、フラグを使って、ラベルを動かすというプログラムを作っているんですが、最初に壁にぶつかった時だけダブルクリックをしなきゃ方向変換ができないんんです。
これを解決っすることはできませんか??
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
>これを解決っすることはできませんか??
できるよ。
で、何が分からないの?
ダブルクリックからワンクリックで方向変換ができるように命令するプログラムです。
> フラグを使って
> Dim Flag As Integer
そのフラグの意味が分かるような変数名に修正する事をお奨めします。
Vec の方は、移動方向と移動量を表す"Vector"の意味だと類推できますが、
単に Flag だけでは、それが何を意味するのかは本人にしか分かりません。
1 や -1 が、どういった状態を表す値なのかも書かれていませんし。
そもそも、「1」と「-1」の 2 状態しか存在し無いのであれば、
Integer よりも、Boolean や列挙型を使った方が良いかと思います。
> ダブルクリックからワンクリックで方向変換ができるように命令するプログラムです。
何故ダブルクリックが必要になってしまうのか、その理由が分からないので
何が悪いのか説明して欲しい、という意味でしょうか?
それとも、問題点は分かっているけれども、どのように修正すべきか思いつかないので、
ヒントあるいはアドバイスが欲しい、という意味でしょうか?
(分からない点を具体的に質問した方が、回答が付きやすいですよ。)
私は問題点は分かっているけれども、どのように修正すべきか思いつかないので、ヒントあるいはアドバイスが欲しいという方です。
ですから、判っている問題点をもっと具体的に説明してしないと・・・w
Flagが何のどのような状態を表しているのかを理解して、
状態の変化をFlagに反映するコードを追加すればいいのでは?
同じ指摘の繰り返しになりますが。。。
> 私は問題点は分かっているけれども
実行した結果の問題点ではなく、その動きを生み出している
コード上の問題点です。なぜ、ダブルクリックでないと
動かないかを調べてください。
ブレークポイントを使いプログラムを中断し、1行1行
ステップ実行し、その際の Vec Flag Speed がどうなるべきで
実際はどうなっているから方向が変わらないのですか?
既に一部 魔界の仮面弁士 さんからの指摘もありますが、
Vec Flag Speed の用途がかぶってるし、提示されたコードの
半分以上が質問と関係ありません。
問題点の原因となっているコードのみに限定して質問してください。
Speed は 4 で固定(定数)
Flag で方向を決めて、
Vec は削除できます。
コードを整理するだけでも違うと思います。
日本語でコードの意味を説明できるようにしてください。
ラベルの動く速度は一定で良いはずです。
フラグで方向を決めたら、
方向と移動量が決まってるのだから、ベクトルを
別に覚えるとデータが2重になってバグを生みます。
だから削除した方が良いという修正案が出ます。
日本語で考えて、間違った命令を出しているから
結果が期待通りではないのです。
修正版のコードが回答としてつくことはありません。
自分で解決する意思を見せてください。
ツイート | ![]() |