Random Wort, Random Colorfont und Fontsize verbinden



  • ja ich weiß grade nicht wie ich es hinkriege, dass er jede richtige antwort (click) zählt, weißt du da evtl was?



  • Bitte genauer beschreiben und ein wenig relevanten Code zeigen.



  • Also man klickt auf Play, dann wird das ausgeführt.

    private void button1_Click(object sender, EventArgs e)
            {
                if (germanToolStripMenuItem.Checked == true)
                {
                    string[] strCollection = { "blau", "braun", "gelb", "lila", "orange", "pink", "rot", "grau", "grün" };
                    System.Random rnd = new Random();
                    FontFamily myFontFamily = new FontFamily("Modern No. 20");
                    Font myFont = new System.Drawing.Font(myFontFamily, 16, FontStyle.Bold, GraphicsUnit.Pixel);
                    label1.Location = new Point(175, 50);
                    label1.Font = myFont;
                    label1.Text = strCollection[rnd.Next(strCollection.Length)];
                    label1.BackColor = farben.RandomColor();
                }
                else
                {
                    string[] strCollection = { "blue", "brown", "yellow", "purple", "orange", "pink", "red", "grew", "green" };
                    System.Random rnd = new Random();
                    FontFamily myFontFamily = new FontFamily("Modern No. 20");
                    Font myFont = new System.Drawing.Font(myFontFamily, 16, FontStyle.Bold, GraphicsUnit.Pixel);
                    label1.Location = new Point(175, 50);
                    label1.Font = myFont;
                    label1.Text = strCollection[rnd.Next(strCollection.Length)];
                    label1.BackColor = farben.RandomColor();
                }
                numericUpDown1.Enabled = false;
                button1.Enabled = false;
                formsTimer.Interval = 1000;
                startSeconds = (int)numericUpDown1.Value + 1;
                formsTimer.Enabled = true;
                bluebox.Enabled = true;
                redbox.Enabled = true;
                lilabox.Enabled = true;
                greenbox.Enabled = true;
                yellowbox.Enabled = true;
                pinkbox.Enabled = true;
                orangebox.Enabled = true;
                grewbox.Enabled = true;
                brownbox.Enabled = true;
            }
    

    Dann läuft der Timer runter und in dieser Zeit, wo der Timer läuft, soll jeder click auf einen button gezählt werden. Und wenn der Timer auf 0 gelaufen ist, soll die Anzahl an Clicks angezeigt werden.

    TimerEvent Code:

    private void TimerEvent(object sender, EventArgs e)
            {
                numericUpDown1.Value = --startSeconds;
    
                if ((startSeconds == 0) && (germanToolStripMenuItem.Checked == true))
                {
                    formsTimer.Enabled = false;
                    label1.Text = "Die Zeit ist abgelaufen!";
                    label1.Location = new Point(140, 50);
                    label1.BackColor = Color.White;
                    label1.ForeColor = Color.Red;
                    FontFamily myFontFamily = new FontFamily("Microsoft Sans Serif");
                    Font myFont = new System.Drawing.Font(myFontFamily, 15, FontStyle.Bold, GraphicsUnit.Pixel);
                    label1.Font = myFont;
                    button1.Enabled = true;
                    button1.Text = "Play Again?";
                    numericUpDown1.Enabled = true;
                    bluebox.Enabled = false;
                    redbox.Enabled = false;
                    lilabox.Enabled = false;
                    greenbox.Enabled = false;
                    yellowbox.Enabled = false;
                    pinkbox.Enabled = false;
                    orangebox.Enabled = false;
                    grewbox.Enabled = false;
                    brownbox.Enabled = false;
                }
                else if ((startSeconds == 0) && (englishToolStripMenuItem.Checked == true))
                {
                    formsTimer.Enabled = false;
                    label1.Text = "The Time is over!";
                    label1.Location = new Point(140, 50);
                    label1.BackColor = Color.White;
                    label1.ForeColor = Color.Red;
                    FontFamily myFontFamily = new FontFamily("Microsoft Sans Serif");
                    Font myFont = new System.Drawing.Font(myFontFamily, 15, FontStyle.Bold, GraphicsUnit.Pixel);
                    label1.Font = myFont;
                    button1.Enabled = true;
                    button1.Text = "Play Again?";
                    numericUpDown1.Enabled = true;
                    bluebox.Enabled = false;
                    redbox.Enabled = false;
                    lilabox.Enabled = false;
                    greenbox.Enabled = false;
                    yellowbox.Enabled = false;
                    pinkbox.Enabled = false;
                    orangebox.Enabled = false;
                    grewbox.Enabled = false;
                    brownbox.Enabled = false;
                }
            }
    


  • Diese neun farbigen Felder sind also Buttons?
    Wann ist eine Antwort richtig? Ich kenne die Spielregeln ja nicht.

    Natürlich sind die Eventhandler der 9 Buttons der Ort in dem die Action stattfinden muss. Die Frage ist nur welche.



  • Ja die 9 Farbigen Felder sind jeweils Buttons. Es wird ein Label angezeigt mit einer Schrift, entweder rot, blau, grün usw. Und man muss dann halt den entsprechenden Button mit der Farbe drücken, dann ist eine Antwort richtig. Klickt man das Falsche kommt eine Meldung und man beginnt von vorne.



  • Und die Farbe (Label) bleibt immer gleich oder ändert sich direkt nach jeder korrekten Antwort?



  • nach einer korrekten antwort, ändert sich das label automatisch in ein anderes wort.



  • Bei buttonPlayClick wird die erste Farbe gewählt:
    label1.Text = strCollection[rnd.Next(strCollection.Length)];

    Diesen Wert merkst Du dir jetzt einfach:

    class Form1
    {
     int currentColor;
    
     private void button1_Click(object sender, EventArgs e)
     {
    
       currentColor = rnd.Next(strCollection.Length);
       label1.Text = strCollection[currentColor]; 
     }
    
     private void brownbox_Click(object sender, EventArgs e)
     {
       if(currentColor == 1)
       {
          //korrekte antwort -> braun
    
          //neue farbe ziehen
          currentColor = rnd.Next(strCollection.Length);
          label1.Text = strCollection[currentColor]; 
       }
     }
    
     private void orangebox_Click(object sender, EventArgs e)
     {
       if(currentColor == 4)
       {
          //korrekte antwort -> orange
    
          //neue farbe ziehen
          currentColor = rnd.Next(strCollection.Length);
          label1.Text = strCollection[currentColor]; 
       }
     }
    }
    

    Das ziehen der neuen Farbe kommt an drei Codestellen vor. Lagere das in eine Methode aus und mach die strCollection klassenweit verfügbar damit du darauf zugreifen kannst.

    Nicht sehr schön ist, dass die Werte für currentColor mit der Position der Farbnamen in der Collection kodiert werden. Das kann man viel sauberer machen. Fällt dir was ein? 🙂

    Und 9 Buttonhandler benötigst Du auch nicht unbedingt. Man kann auch alles in einen packen. Aber ich denke so ist es am einfachsten.



  • ich bin grade etwas überfragt, wir programmieren in der schule ja nur so komische programme die ich mittlerweile in 5 minuten hinzauber. Das überspannt grade etwas meinen bogen 😃 Was hab ich mir bei dem Spiel bloß vorgenommen, die Idee war ganz easy, die Umsetzung birgt hindernisse.

    Wo steht in dem Code, dass er die richtigen Antworten zählt?

    Den Quelltext irgendwie zu vereinfachen und zu verkürzen wäre schon zum vorteil, wenn man wüsste wie 😃



  • An den Stellen
    //korrekte antwort -> braun
    und
    //korrekte antwort -> orange

    baust Du Code zum Zählen der richtigen Antworten ein.
    Erhöhe einfach irgendeine neue Variable:

    class Form1
    {
    int currentColor, correctAnswers=0;
    
    private void brownbox_Click(object sender, EventArgs e)
    {
       if(currentColor == 1)
       {
         //korrekte antwort -> braun
         correctAnswers++;
       }
    


  • RelaxRealistic schrieb:

    Was hab ich mir bei dem Spiel bloß vorgenommen, die Idee war ganz easy, die Umsetzung birgt hindernisse.

    Wenn jede Software so einfach umzusetzen wäre, wie die Ideen im Kopf auftauchen, wären wir alle reich. 😉



  • ja das stimmt wohl 😃

    okay ich werde es mal austesten, schreibe grade eine anleitung für das spiel 🙂



  • Anleitungen schreibt man am Ende. Weiterprogrammieren! 😉

    Btw.: Zeige doch das Label, das die Farbe anzeigt in einer anderen (zufälligen) Farbe an. Das verwirrt total weil da die Hirnhälften in Streit geraten 😉



  • Das ist ja das kniffelige am Spiel! 😃

    Bin ja schon am programmieren :p



  • Habs fertig, Danke! Was soll ich nun alles hier reinstellen? bzw uploaden.



  • Lade doch einfach das ganze Projektverzeichnis irgendwo hoch.

    Aber probieren werde ich es heute wohl nicht mehr. Muss mal bald in die Falle sonst geht der Bugcounter morgen wieder hoch.





  • Passt. Ich schaue es mir morgen mal an.



  • okay 🙂 danke für deine Hilfe! 🙂



  • es wird ein problem mit der Font auftreten, kann man diese irgendwie in die Exe einbinden oder geht das nicht?

    sonst muss ich sie wohl oder übel ändern.


Anmelden zum Antworten