Entwickler-Ecke

C# - Die Sprache - Button zufällig nach links verschieben


Sam_Fisher007 - Do 27.11.08 21:24
Titel: Button zufällig nach links verschieben
Hi,
ich habe folgendes Problem (bin noch C# Novize), für die Schule sollen wir ein Autorennspiel ähnliches Formular erstellen.
Zur Situation: Man hat 2 Buttons, der erste ist mein Auto, dieses bewegt sich beim klicken um 20 pixel weiter nach Links. Nun soll bei jedem Klick auf den ersten der 2te Button (der Pc-Gegner) sich zufällig nach links bewegen.

Folgendes hab ich bisher:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
if (button1.Left >= 0)
            {
                button1.Left = button1.Left + 20;
            }


            if (button2.Left >=0)
            {
                Random bewegen = new Random();
                int vorwärts;
                for (int i = 0; i <= 20; i++)
               
                
                    button2.Left = button2.Left + vorwärts;
                
                }


Dabei taucht die Meldung auf:Verwendung der nicht zugewiesene Variable "vorwärts".

Könnt ihr mir helfen?
Schöne Grüße
Sam_Fisher007

Moderiert von user profile iconKha: C#-Tags hinzugefügt


jaenicke - Do 27.11.08 21:35
Titel: Re: Button zufällig nach links verschieben
Hallo und :welcome: hier im Forum! ;-)

user profile iconSam_Fisher007 hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
2:
3:
4:
5:
                int vorwärts;
                for (int i = 0; i <= 20; i++)
               
                
                    button2.Left = button2.Left + vorwärts;
Du deklarierst die Variable vorwärts, weist ihr aber keinen Wert zu, initialisierst sie also nicht. Danach addierst du diesen Wert zu button2.Left, aber du hast ja gar keinen zugewiesen. ;-)


miniC# - Do 27.11.08 22:19

Da ich auch momentan fleissig am Lernen bin habe ich mich mal an die Lösung gemacht. Quasi als moralischer Lastenausgleich für meine ewige Quengelei hier :D.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
    
        public static Random r = new Random();

        public void MoveButton(ref Button Auto, int Ziel)
        {
            int schritt = r.Next(020);
            int autoSpitze = Auto.Left + Auto.Width + schritt;
            Auto.Text = schritt.ToString() + " | " + autoSpitze.ToString();

            if (autoSpitze <= Ziel & Auto.Left >= 0) Auto.Left += schritt;
            else if (autoSpitze >= Ziel)
            {
                Auto.Left = Ziel - Auto.Width;
                Auto.Text = "Gewonnen";
            }
            else Auto.Left = 0;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MoveButton(ref button1, Form1.ActiveForm.Size.Width);
            MoveButton(ref button2, Form1.ActiveForm.Size.Width);
        }


Kha - Do 27.11.08 23:07

@miniC#: Das ref kannst du weglassen, schließlich willst du den Feldern button1 und button2 kein neues Objekt zuweisen, sondern nur die Objekte selbst manipulieren. Und da button1_Click eine Instanzenmethode der Form ist, kannst du Form1.ActiveForm.Size.Width zu Size.Width abkürzen.


Sam_Fisher007 - Fr 28.11.08 18:09

"Ungültiger Ausdruck int"


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
 private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Left >= 0)
            {
                button1.Left = button1.Left + 20;
            }


            if (button2.Left >=0)
            {
              r = new Random(); 
              MoveButton(ref button2, int ziel);

                {
            int schritt = r.Next(0, 20); 
                    int autoSpitze = Auto.Left + Auto.Width + schritt;
                    Auto.Text = schritt.ToString() + " | " + autoSpitze.ToString(); 
                    if (autoSpitze <= Ziel & button2.Left >= 0) button2.Left += schritt;
                    else if (autoSpitze >= Ziel) 

                         {
                button1.Left = Ziel - Auto.Width;
                button1.Text = "Gewonnen";
            } 
                     else Auto.Left = 0;
        }

                }


War richtig Button Auto durch Button2 zu ersetzen, oder?


jaenicke - Fr 28.11.08 18:16

Nun ja, du willst ja anscheinend alles in dem Buttonclick machen, warum auch immer, aber wenn du den Inhalt von MoveButton in den Buttonclick packst, dann brauchst du ja weder die Methode noch den Aufruf in Zeile 12, wo der Fehler kommt.

Eigentlich hättest du den Quelltext von user profile iconminiC# nur kopieren müssen statt da was zu ändern, wenn du anscheinend keinerlei Ahnung hast was du da tust. Jedenfalls wäre Zeile 12 ein Aufruf der Methode MoveButton, und als zweiten Parameter musst du angeben wo das Ziel der Autos ist, also wo dann das Ziel erreicht ist, zum Beispiel die rechte Kante des Bildschirms.
Und da versuchst du mit deinem Code ja einen neuen int Wert zu deklarieren, du müsstest aber einen bestehenden angeben bzw. einen konkreten Wert.

Jedenfalls war der dir gepostete Quelltext soweit ja wohl funktionstüchtig, soweit ich das sehe. Deshalb übernimm den doch einfach mal und probiere dann etwas zu ändern, wenn du das willst.