Hallo,
kleine Geschichte vorweg: Ich plane ein Browserspiel in kleinem Rahmen.
Dafür programmiere ich gerade in c# ein Tool, welches mir die Auswertung von vielen Daten dieses Spieles auf einmal erlaubt, um zu sehen, ob es
einigermaßen gebalanced ist. Es geht darum, dass zwei Kämpfer einen Kampf ausfechten.
Mein C# Programm ist mit einer TextBox ausgestattet, in dem der Kampfbericht erscheint. In der ersten Version gab es zudem nach jedem Kampf eine Statistik, wie die Kämpfer abgeschnitten haben. Logischerweise war dies aber recht nervig (da mit MessageBox), wenn man 100+ Kämpfe hintereinander weg simulieren ließ.
Also änderte ich das so, dass diese Statistik nur noch nach dem letzten Kampf angezeigt wird.
Doch jetzt herrscht totale Funkstille in der TextBox, bis nach dem letzten Kampf und dann werden alle Kämpfe auf einmal in die Box gequetscht. Wäre normal nicht weiter schlimm, nur dauert das extrem lang bei dreistelligen Kampfzahlen oder hängt sich bisweilen auch mal auf. In der Clickvariante nach jedem Kampf war das kein Problem.
Ich frage mich jetzt, was ich ändern muss, damit nach jedem Kampf auch eine Anzeige in der Textbox erscheint, um verfolgen zu können, wie weit der Rechner denn schon ist.
Hier mal mein Code dazu:
(Es gibt eine Hauptform, dazu die Klasse Kampf und die Klasse Klon(=Kämpfer))
[highlight=c#]
//durch diesen Button wird die Kampfsimulation gestartet.
//vorher wurden die Kämpfer erstellt, die gegeneinander antreten sollen
private void buttonStartFight_Click(object sender, EventArgs e)
{
//Infofeld leeren
infoFeld.Text = "";
buttonStartFight.Enabled = false;
kampfStart();
}
[/highlight]
[highlight=c#]
//hier wird der eigentliche kampf dann gestartet
private void kampfStart()
{
Kampf kampf = new Kampf(klon[0], klon[1]);
//die Methode battle aus der Klasse kampf ist public und hat string als Rückgabewert
infoFeld.Text += Environment.NewLine + kampf.battle();
infoFeld.Text += Environment.NewLine + (kaempfegemacht + 1) + ". Kampf abgeschlossen ...";
kaempfegemacht++;
if (kaempfegemacht < kampfAnzahl)
{
kampfStart();
}
else
{
kampf.statistikAusgabe();
}
}
[/highlight]
Aus meiner Sicht müsste die Infobox mit dem Text gefüllt werden, der durch die Methode battle erstellt wird. Unabhängig davon, wie oft sich die Methode kampfStart() noch aufruft? Tut sie aber nicht ... wo ist denn da mein Denkfehler?
kleine Geschichte vorweg: Ich plane ein Browserspiel in kleinem Rahmen.
Dafür programmiere ich gerade in c# ein Tool, welches mir die Auswertung von vielen Daten dieses Spieles auf einmal erlaubt, um zu sehen, ob es
einigermaßen gebalanced ist. Es geht darum, dass zwei Kämpfer einen Kampf ausfechten.
Mein C# Programm ist mit einer TextBox ausgestattet, in dem der Kampfbericht erscheint. In der ersten Version gab es zudem nach jedem Kampf eine Statistik, wie die Kämpfer abgeschnitten haben. Logischerweise war dies aber recht nervig (da mit MessageBox), wenn man 100+ Kämpfe hintereinander weg simulieren ließ.
Also änderte ich das so, dass diese Statistik nur noch nach dem letzten Kampf angezeigt wird.
Doch jetzt herrscht totale Funkstille in der TextBox, bis nach dem letzten Kampf und dann werden alle Kämpfe auf einmal in die Box gequetscht. Wäre normal nicht weiter schlimm, nur dauert das extrem lang bei dreistelligen Kampfzahlen oder hängt sich bisweilen auch mal auf. In der Clickvariante nach jedem Kampf war das kein Problem.
Ich frage mich jetzt, was ich ändern muss, damit nach jedem Kampf auch eine Anzeige in der Textbox erscheint, um verfolgen zu können, wie weit der Rechner denn schon ist.
Hier mal mein Code dazu:
(Es gibt eine Hauptform, dazu die Klasse Kampf und die Klasse Klon(=Kämpfer))
[highlight=c#]
//durch diesen Button wird die Kampfsimulation gestartet.
//vorher wurden die Kämpfer erstellt, die gegeneinander antreten sollen
private void buttonStartFight_Click(object sender, EventArgs e)
{
//Infofeld leeren
infoFeld.Text = "";
buttonStartFight.Enabled = false;
kampfStart();
}
[/highlight]
[highlight=c#]
//hier wird der eigentliche kampf dann gestartet
private void kampfStart()
{
Kampf kampf = new Kampf(klon[0], klon[1]);
//die Methode battle aus der Klasse kampf ist public und hat string als Rückgabewert
infoFeld.Text += Environment.NewLine + kampf.battle();
infoFeld.Text += Environment.NewLine + (kaempfegemacht + 1) + ". Kampf abgeschlossen ...";
kaempfegemacht++;
if (kaempfegemacht < kampfAnzahl)
{
kampfStart();
}
else
{
kampf.statistikAusgabe();
}
}
[/highlight]
Aus meiner Sicht müsste die Infobox mit dem Text gefüllt werden, der durch die Methode battle erstellt wird. Unabhängig davon, wie oft sich die Methode kampfStart() noch aufruft? Tut sie aber nicht ... wo ist denn da mein Denkfehler?
Comment