Random Wort, Random Colorfont und Fontsize verbinden



  • //Als Feld wegen dem Garbage-Collector
    System.Windows.Forms.Timer formsTimer
    
    public Form1()
    {
    	InitializeComponent();
    	englishToolStripMenuItem.Checked = true;
    	label1.Text = "Waiting for Play!";
    	label2.Text = "Playtime: ";
    	formsTimer = new System.Windows.Forms.Timer();
    
    	//formsTimer.Interval = 1000;
    	//hier startest du den timer. das ist wohl so nicht gewollt.
    	//formsTimer.Enabled = true;
    	formsTimer.Tick += new EventHandler(TimerEvent);
    } 
    
    private void button1_Click(object sender, EventArgs e)
    {
    	//evtl (int) cast notwendig. weiß gerade den typ von Interval nicht
        formsTimer.Interval = numericUpDown1.Value
    	formsTimer.Enabled = true
    } 
    
    private void TimerEvent(Object myObject, EventArgs myEventArgs)
    {
        //quizzfrage: was passiert hier?
    
    }
    


  • ja ist vom typ int. ja die quizfrage ist echt gut, ich habe mal sowas von keinen plan..



  • Hahaha....

    Das musst schon du wissen.
    Soll der Wert vom numericupdown runtergezählt werden?



  • ja soll sie. wird wohl über ne schleife laufen oder?



  • Nein keine Schleife. Du hast ja einen Timer der im Sekundentakt runterzählt.

    System.Windows.Forms.Timer formsTimer
    int startSeconds;
    
    public Form1()
    {
    
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
    	//wahrscheinlich wolltest du sowas:
            formsTimer.Interval = 1000;
            startSeconds = (int)numericUpDown1.Value + 1;
    	formsTimer.Enabled = true
    } 
    
    private void TimerEvent(Object myObject, EventArgs myEventArgs)
    {
        numericUpDown1.Value = --startSeconds;
    
        if(startSeconds == 0)
        {
             formsTimer.Enabled = false
            //weitere aktionen nach timer-ende
        }
    
    }
    


  • ich bau mal eben aus was danach passiert und dann teste ich mal. Danke schonmal 🙂



  • Läuft Perfekt! Danke! 🙂



  • Bitte.

    Wenn Du fertig bist kannst Du das Spiel ja mal irgendwo hochladen.



  • ich werde dann das setup dazu hochladen 🙂

    muss nurnoch irgendwie einen zähler machen, der die richtigen antworten zählt und am ende ausgibt, stellt mich wieder vor ein rätsel aber okay 😃



  • RelaxRealistic schrieb:

    ich werde dann das setup dazu hochladen 🙂

    Bitte nur Code sonst führt das hier niemand aus, der noch bei Verstand ist. V.a. weil ein Setup mit Admin-Rechten läuft und nicht durch den NET-Reflector geht.



  • oh okay wusste ich nicht.

    ich glaub der text ist zulange oder ich bin grade zu dumm den hier einzufügen.



  • Nein einfach die Projektfiles irgendwo hosten. Nicht alles hier pasten.

    Wie gesagt, wenn alles fertig ist 😉



  • 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.


Anmelden zum Antworten