Zufälliger Button

Slater

Erfahrenes Mitglied
Hy,
ich bin an einem Spiel in c# am machen.
Jetzt habe ich das Problem, dass ich 10 Buttons habe, von den ich zufällig 2 ändern will (Anderer Text)

Wie kann ich das machen?
Ich habe bis jetzt folgenden Code, der mir die Zufallszahl liefert. Jedoch wie kann ich das jetzt anstellen, dass es mir z.b mit der Zahl 5 textBox5.Text = "blablabla"; schreibt?

Danke

Code:
for (int i=1; i<3; i++)
{
zahl = new System.Random().Next(1,10);

}
 
Wenn es eh nur 10 Buttons sind dann kannst ja die Zahlen entsprechen auswerten ganz im sinne von "wenn zahl gleich5 dann spreche textbox5 an"...
Und wenn Zahl = X dann textboX usw.
Das ganze eben 10 mal...

>Hättest die Buttons halt in nem Array erstellen sollen, wär dann leichter gewesen...<
 
Ja, das könnte ich machen, aber evtl habe ich zuletzt 100 buttons!
Das mit den Arrays scheint mir eine gute Idee zu sein! Jedoch habe ich keinen blassen Schimmer wie ich beim Laden der Form Buttons erstellen kann...
z.B 10 auf 10 Buttons (Grösse 30/30) aus einer Schleife erstellen lassen und dann zufällig zwei davon mit einem anderen Text versehen....? Wie geht das?


Danke
 
Also ganz grob erklärt musst du nur dafür sorgen das immer 10 in einer Reihe sind und das ganze 10 mal...
Wärend du die Buttons auf die Form platzierst solltest schonmal deine 2 Zahlen bereit halten, wenn dann Button X die gleiche Zahl ist wie deine Generierte Zahl dann musste du bei dem den Text ändern!
Hab grad leider kein passendes beispiel für Button Arrays da...brauchst du eins? Könnt evtl. mal eins auftreiben, bzw. es versuchen ;)
 
Habe ein Codeschnipsel zum Buttonerstellen gefunden.
Das Ganze funktioniert jetzt wunderbar, ausser dass es mir immer die gleichen Zufallszahlen liefert...!? Warum das?

Danke

Code:
		private void Form1_Load(object sender, System.EventArgs e)
		{
			Button[,] Felder = new Button[10,10];
			Button Feld = null;
			for (int c = 0; c<10; c++)
			{
				for(int i = 0; i<10; i++)
				{
					Feld = new Button();
					Feld.Location = new Point(i*32, c*32); // Position
					Feld.Size = new Size(30, 30); // Größe
					Felder[i,c] = Feld;
					panel1.Controls.Add(Feld);
				}
			}
			int zahl1 = new System.Random().Next(0,9);
			int zahl2 = new System.Random().Next(0,9);
			int zahl3 = new System.Random().Next(0,9);
			int zahl4 = new System.Random().Next(0,9);
			int zahl5 = new System.Random().Next(0,9);
			int zahl6 = new System.Random().Next(0,9);
			int zahl7 = new System.Random().Next(0,9);
			int zahl8 = new System.Random().Next(0,9);
				Felder[zahl1,zahl2].BackColor = Color.Blue;
				Felder[zahl3,zahl4].BackColor = Color.Blue;
				Felder[zahl5,zahl6].BackColor = Color.Blue;
				Felder[zahl7,zahl8].BackColor = Color.Blue;

		}
 
Du solltest im Konstruktor der Random-Klasse stets eine beliebige Zahl mitgeben, die als Basis für die Berechnung der Zufallszahl dient. Das liefert zuverlässigere Zufallszahlen. Sehr effektiv ist zum Beispiel ein TimeStamp, da dieser sich ständig ändert jede Millisekunde.

Sowas hier zum Bleistift:
Code:
Random rdm1 = newRandom(unchecked((int)DateTime.Now.Ticks));
Hier werden die Ticks der DateTime-Klasse verwendet, was einem TimeStamp entspricht. Versuchs mal so.
 
ok, jetzt geht das tiptop, tausend Dank!
Kann mir noch jemnad die folgende Frage beantworten:
Ich möchte jetzt wenn ich auf ein Button gecklickt habe dass er rot eingefärbt wird -> ......BackColor = Color.Red;
Wie kann ich jetzt aber DAS machen? Ich habe es schon mehrfach versucht, jedoch nicht geschafft :(

Code:
		private void Form1_Load(object sender, System.EventArgs e)
		{
			int ind=1;
			Button[,] Felder = new Button[10,10];
			Button Feld = null;
			for (int c = 0; c<10; c++)
			{
				for(int i = 0; i<10; i++)
				{
					Feld = new Button();
					Feld.Location = new Point(i*32, c*32); // Position
					Feld.Size = new Size(30, 30); // Größe
					Feld.FlatStyle = FlatStyle.Flat;
					Feld.Name = "button" + (c*i);
					Feld.Click += new EventHandler(Treffbar_Click);
					Felder[i,c] = Feld;
					panel1.Controls.Add(Feld);
					ind++;
				}
			}
			int[] zahl = new int[20];
			Random R =new Random();
			int I;
			int MaxLimit = 9;
			int MinLimit = 0;
			for(I = 0; I < 12; I++)
			{
				zahl[I] = R.Next(MinLimit,MaxLimit);
			}
			for (int i=1; i<=12; i++)
			{
				Felder[zahl[i],zahl[i+1]].Click -= new EventHandler(NichtTreffbar_Click);
				Felder[zahl[i],zahl[i+1]].Click +=new EventHandler(Treffbar_Click);
				i++;
			}
		}
		private void Treffbar_Click(object sender, System.EventArgs e)
		{
		textBox1.Text = "Nicht getroffen";
		}
		private void NichtTreffbar_Click(object sender, System.EventArgs e)
		{
		textBox1.Text = "Getroffen";
		}
 
Code:
private void Treffbar_Click(object sender, System.EventArgs e)
		{
                Button btn = (Button) sender;
		btn.BackColor = Color.Red;
		textBox1.Text = "Nicht getroffen";
		}
private void NichtTreffbar_Click(object sender, System.EventArgs e)
		{
                Button btn = (Button) sender;
		btn.BackColor = Color.Red;
		textBox1.Text = "Getroffen";
		}

Über sender wird das Objekt übergeben, welches das Ereignis ausgelöst hat.
 

Neue Beiträge

Zurück