Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Ein Game fuer Euch

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.01.2005, 21:22 Uhr
Kuriosus



Als kleines Dankeschoen fuer Eure Hilfe vor zwei Wochen (bezueglich
des new-operators) moechte ich Euch einen Link zu meinem beinahe
fertiggestellten, aber durchaus schon gut spielbaren Stratego-Game
geben:
www.geocities.com/c_pruell/MecnelsTactics.zip

Eine kurze Spielanleitung habe ich in Kommentarform dem Header
angefuegt (diejenigen, die Stratego kennen, finden sich ziemlich
schnell zurecht).

Der dazu gehoerige Header fuer diejenigen unter Euch, die vielleicht
interessiert, wie so ein Projekt ungefaehr mit Klassen realisiert werden kann,
hab ich auch alles gut kommentiert.

www.geocities.com/c_pruell/MTactics.rtf

Ich freue mich auf konstruktive Kritik und Verbesserungsvorschlaege.

Einen schoenen Abend noch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.01.2005, 13:21 Uhr
~Gast
Gast


Einige Kritikpunkte sind mir schon aufgefallen:
1. Manchmal hängt sich das Programm auf, während es seine Figuren aufstellt. (Ein ärgerlicher Bug den du unbedingt wegkriegen musst.
2. Beim Aufstellen der Figuren ist es unbequem, jede einzelne Figur einzeln aufstellen zu müssen. Vielleicht kannst Du das ja so verbessern, dass ein einziger Klick auf eine Zecke genügt und bis die Schachtel mit Zecken leer ist nur mehr Zecken aufgestellt werden?
3. Der Computer zieht wirklich VIEL zu schnell, bis man es bemerkt, ist man schon wieder selber am Zug.
4. Irgendwie ist auch mit dem KI einiges schief gegangen, das Programm fährt teilweise blindlings mit seinen wertvollsten Figuren auf Zecken. (Als hartgesottener Stratego Spieler erwarte ich nun mal vor allem, dass mich der KI ordentlich fordert).


Nett finde ich die Idee mit den Tieren, auch wenn es etwas dauert, sich von den eingeprägten Stratego Symbolen auf die veränderten Bildchen umzustellen.

Nach Durchsicht des Headers würde mich doch auch noch interessieren, wie du die Funktion, die den Computerzug steuert, implementiert hast (wird üblicherweise als KI bezeichnet). Vielleicht kannst du entweder den Sourcecode posten (mit guten Kommentaren natürlich), oder wenigstens skizzieren, wie das Programm sich einen Zug einfallen lässt.

Ansonsten ist das Game vielversprechend (aber wie gesagt, Du musst noch einige Dinge verbessern, jedenfalls meine Meinung). Bleib jedenfalls dran!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.01.2005, 22:58 Uhr
Kuriosus



So, ich hab an dem Projekt weitergewerkelt, und auch die Zieldatei des Links
aktualisiert. (Ausserdem eine Funktion zum SEHR zügigen Aufstellen der Steine)

Der Fehler mit dem plötzlichen Aufhängen war die Folge eines logischen Fehlers meinerseits, der während der Generierung der Aufstellung der Steine des Computers (sehr selten, aber doch) auftreten konnte. Mittlerweile ausgemerzt. Trotzdem danke für den Hinweis.

Vor allem am 'KI', wie du es nennst, hab ich eine Menge verbessert, so stürmt das Programm nicht mehr wie entfesselt drauf los, sondern umgeht kurzzügige Fallen (ziemlich geschickt, nur auf wirklich gute Fallen fällt es nach wie vor herein).
Ich habe schon früher einmal eine Schachvariante umgesetzt, und habe feststellen müssen, dass Stratego doch total anders ist. Beim Schach kennt das Programm zu jedem Zeitpunkt jeden auf dem Brett befindlichen Stein und die mit verknüpften Zugvektoren, was es theoretisch erlaubt, den Rechner in eine beliebige taktische Rechentiefe vordringen zu lassen, solange man als Programmierer brav auf den zur Verfügung stehenden Hauptspeicher achtet.
Beim Stratego dachte ich ursprünglich, ähnlich an die Lösung herangehen zu können (Für jeden gefundenen regelgerechten Zug generiere ein Duplikat des aktuellen Brettes, führe darauf den Zug aus, bewerte die Stellung, speichere die Bewertung. Mach das mit jedem möglichen Zug und führ dann den Zug aus, der die beste Bewertung erzielt hat).
Mittendrin, zu meiner Schande, bemerkte ich, dass es beim Stratego nicht möglich ist, gegnerische Antworten einzukalkulieren, da zum Teil nicht einmal bekannt ist, welche Zugvektoren mit den betreffenden Steinen verknüpft sind. Nach spätestens einem Halbzug (dem eigenen) Halbzug Rechentiefe muss die Methode, die bei Schach (auch bei Vier gewinnt und ähnlichen Spielen, bei denen jede mögliche Antwort des Gegners vorausgesehen kann) so gut klappt, eben bei Stratego nicht klappt.

Meine Computerzugfunktion speichert zuerst jeden nach den Regeln zulässigen Zug in einem ziemlich grossen Array: Vektor hilfsvektorarray[2][200], wenn der erste Index 0 ist, ist das Startfeld gemeint, wenn er 1 ist, das Zielfeld.

Dann ruft die Funktion eine Filterfunktion auf, die erstmal ganz grobe Schnitzer aus den gefundenen möglichen Zügen entfernt, (sofern immer noch zumindest ein möglicher Zug überbleibt, natürlich!)

Dann kriegt eine andere Funktion das möglicherweise schon geschrumpfte Array mit möglichen Zügen in die Finger und prüft, ob sie unter den möglichen Zügen einen Zug entdeckt, der unbedingt notwendig ist und Priorität vor allen anderen Zügen hat. In diesem Fall entfernt die Funktion alle anderen Züge aus dem Array mit den möglichen Zügen mit Ausnahme des 'unbedingt notwendigen' Zuges (dringende Fluchtzüge und dergleichen)

Wenn nach Aufruf der beiden vorhergehenden Funktionen immer noch jede Menge Züge im Array gespeichert sind, sucht das Programm eine Möglichkeit, möglichst irgendetwas zu schlagen.

Falls es dann immer noch nicht erfolgreich war, bekommen sämtliche Züge, die eine Vorwärtsbewegung ins gegnerische Lager bedeuten, Priorität (darum erscheint das Programm etwas ungestüm).

Falls dann immer noch kein sinnvoller Zug gefunden wurde, macht rand() hoffentlich noch das beste daraus.

Ziemlich genau so operiert die Computerzugfunktion, und mich überrascht selbst, dass das Programm in wenigen Millisekunden Dutzende Schleifen durchläuft und auch noch die Anzeige auf dem Bildschirm updatet.

*** Trotzdem danke für die Motivation, so schnell werf ich nicht das Handtuch!!!***

Dieser Post wurde am 05.01.2005 um 23:00 Uhr von Kuriosus editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: