Kleines Spiel programmieren mit Windows Forms - Microsoft Visual C++ 2008
-
Hallo Leute ich habe da eine Frage,
ich programmiere gerade ein kleines Spiel, bei dem es 21 Holzstäbe gibt, die abgezogen werden müssen.
Nun habe ich folgendes in eine Windows Form eingebracht:
- Label für Anzahl der Holzstäbe - Textbox wo dann die Anzahl der Stäbe zu sehen ist - Drei Button um Stäbe zu nehmen - Button 1 zieht einen Stab ab - Button 2 zieht dann zwei Stäbe ab - Button 3 zieht entsprechend drei Stäbe ab - Label für Anzahl an Gewinne (Spiele und Computer) - Textbox für die Anzahl der Gewinne des Spielers gegen den Computer - Textbox für die Anzahl der Gewinne des Computers gegen den Spieler - Radiobutton für die Schwierigkeit des Spiels - Radiobutton 1 für eine leichte Stufe - Radiobutton 2 für eine mittlere Stufe - Radiobutton 3 für eine harte Stufe Soweit zum Gedankengang :). Ich habe in der Form1.h folgendes integriert (programmiert) - Variable: unsigned int staebe = 21; // legt die Anzahl der Stäbe fest - Button: - Button 1: staebe = staebe -1; textBox1->Text = staebe.ToString(); Messagebox, dass gewartet werden soll, bis der Computer zieht. - Button 2: staebe = staebe -2: ... ... - Button 3: ... -3; ... ...
So nun meine Fragen (arbeite ich Mal stück für Stück durch ):
- Die textBox1 zeigt mir die Variable Staebe an, sobald ich einen Button drücke also z.B. 1 Stab nehmen (Button) dann steht die Variable mit "20" in der TextBox1. Wie bekomme ich das hin, dass die textBox1 mir sofort bei Programmstart die Anzahl der Stäbe anzeigt und nicht erst nach dem ich "1 Stab / 2 Stäbe / 3 Stäbe nehmen" anklicke?ok selbst gefunden gerade: bei System::Void Form1_Load textBox1->Text = staebe.ToString();
- Wie kann ich das programmieren, dass einmal der Computer eine Anzahl an Staebe zwischen 1 und 3 nimmt und einmal ich?
Mein Gedankengang: do-while Schleife (Staebe > 0) computer zieht (mit Zufallszahl generieren zwischen 1 und 3 mit timefunktion. und dann wieder der Spieler.
aber ich weiß nicht wie ich das programmiere und ich weiß auch nicht, wo das in die Form1.h reingeschrieben wird - also an welcher Stelle
-
1. Entweder im Konstruktor nach "InitializeComponents" oder in "OnLoad (also Form1_Load-EventHandler)"
2. Zufallszahlengenerator im *Konstruktor* anlegen:
random = new Random();
und dann entsprechend verwenden wenn Du willst (auch im Konstruktor)? via
random.Next(1, 3);
-
Hmm,
soweit habe ich alles durch.Die Anzahl der Stäbe wird beim Start angezeigt.
Ich kann einen Stab ziehen und der Computer zieht ebenfalls einen Random (1 bis 3) Stäbe.Funktioniert soweit also alles. Ich muss zwar noch die Anzahl der Wins eintragen lassen aber ich denke das klappt schon irgendwie
2 Fragen habe ich nun noch.
1. Die Variable anz_staebe ist mit unsigned int eingetragen. Sobald die Anzahl von 21 also runtergeht auf 0 bzw. 1 und ich oder der Computer 2 oder 3 Stäbe ziehen, kommt der Grenzwert der Variable zum Vorschein (40.000 in der Art). Wie kann ich denn das so umprogrammieren, dass auf wenn nur noch 1 Stab vorhanden ist und 2 abgezogen werden, das Ergebnis 0 ist? (Macht keinen Sinn rechnerisch schon klar aber es sind nun einmal dann keine Stäbe mehr da ^^).
2. Ich habe die RadioButton.... mit den Schwierigkeitsstufen. Wie kann ich eine Art KI programmieren? Ich will das so ändern, dass es leicht ist zu gewinnen (Stufe 1), schwer wird (Stufe 2) und unmöglich (Stufe 3).
Danke für die Hilfe schon einmal an dieser Stelle
-
random->Next(1, Math::Min(3, anzStaebe))
2. Ich kenne das Spiel nicht...
-
Ich denke es geht um eine Variante dieses Spiels:
http://de.wikipedia.org/wiki/Nim-Spiel
-
Jap genau darum geht es
hab es auch soweit fertig und auch entsprechend eine Art KI mit eingebracht.
Meine nächste Frage ist folgende. Ich habe ja zwei Symbolicons erstellt. Die werden beim Debuggen auch angezeigt völlig normal.
Wo muss ich denn hinklicken, wenn ich nun dieses Programm als normale EXE Datei für jeden zur Verfügung haben will? Ich würde das gerne Freunden schicken, damit diese sich das angucken können. Aber unter Erstellen-Holzspiel erstellen kommt leider nur unter dem Projekt-Ordner ein Release Ordner mit einer EXE Datei (ohne Symbole) und eine log.html oder so.
Wie kann ich meine EXE denn als volles Programm mit Icons etc bekomme?
-
Wie kann ich meine EXE denn als volles Programm mit Icons etc bekomme?
Projektmappen-Explorer -> Rechtsklick auf dein Projekt (nicht Projektmappe)
-> Eigenschaften -> Symbol
-
hmm komisch... finde da nichts
-
1. Du hast eine sehr schlechte Sprache für Dein Problem und Deine Stufe gewählt; Du hättest C# nehmen sollen
Siehe auch: http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/
2. Du musst neben der .NET Runtime auch noch die vc_redist auf *jedem* Rechner installieren (lasse), welches Dein Programm ausführen will.
Siehe: http://blog.kalmbach-software.de/de/2010/09/23/ccli-programme-auf-einem-anderen-rechner-ausfuhren-vc2010/
3. Du hast ein C++/CLI Projekt, deswegen musst Du das App-Icon als Windows-Resource Deinem Projekt hinzufügen
-
Jochen Kalmbach schrieb:
1. Du hast eine sehr schlechte Sprache für Dein Problem und Deine Stufe gewählt; Du hättest C# nehmen sollen
Siehe auch: http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/--- Ich verstehe nicht, wieso es dann so viele gibt, wenn sie sich doch am Ende ähneln. Ich wollte oder sollte ja nur etwas kleines Programmieren
2. Du musst neben der .NET Runtime auch noch die vc_redist auf *jedem* Rechner installieren (lasse), welches Dein Programm ausführen will.
Siehe: http://blog.kalmbach-software.de/de/2010/09/23/ccli-programme-auf-einem-anderen-rechner-ausfuhren-vc2010/--- Habe das bei meinem Bruder versucht und es ist angesprungen ohne Probleme
3. Du hast ein C++/CLI Projekt, deswegen musst Du das App-Icon als Windows-Resource Deinem Projekt hinzufügen
--- OK super danke dir habe ich zwar drinnen, aber er will das nicht annehmen.
-
PS: Für VS2008 musst Du natürlich das hier installieren:
http://blog.kalmbach-software.de/de/2009/12/17/ccli-programme-auf-einem-anderen-rechner-ausfuhren/