Autor Beitrag
Sam_Fisher007
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 27.11.08 21:24 
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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 27.11.08 21:35 
Hallo und :welcome: hier im Forum! ;-)

user profile iconSam_Fisher007 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Wiin XP Home
C# VS Express 2008
BeitragVerfasst: 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.

ausblenden 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);
        }

_________________
Zitat MDSN : " ... C# (gesprochen: "si scharp") " :D
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 28.11.08 18:09 
"Ungültiger Ausdruck int"

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.