Chaos Chess [Working Title]

Kommentare anzeigen Worklog abonnieren

Worklogs Chaos Chess [Working Title]

6.Renovierung

Sonntag, 2. August 2009 von ComNik
Moin moin mal wieder nach langer Zeit

Viel tat sich seit dem letzten "Eintrag" allerdings nicht im Bezug auf ChaosChess
Die im letzten Eintrag erwähnte GUI gedeiht prächtig und sollte auch demnächst fertig sein. Hinzu kamen noch ein zwei andere Projekte die mich irgendwie mehr reizten als Schach Embarassed Dafür sind die auch bald fertig.

So zu ChaosChess:
Ich wagte heute wieder mal einen Blick in den Code vom Mai dieses Jahres. - und konnte mich grade noch zusammenreissen nicht aus dem Fenster zu springen...
Selten habe ich so einen unstukturierten, unmodularen, vermüllten sowie absolut unoptimierten Code sehen müssen -.-
Nach einer kurzen Pause der Selbstfassung, machte ich mich dran, den Code aufzuräumen. Lange Rede, kurzer Sinn:

Arrow Modularer OOP orientierter Aufbau
Arrow Schöner eleganter Code
Arrow ca 40kb coderedzuzierung. Ich wusste nicht wie wenig man mit viel Code machen kann...
Arrow viele Optimierungen

Da der Code nun meinem "neuen Codestandard" entsprach, konnte ich mich schnell wieder einarbeiten
Der Zuggenerator funktioniert schon wieder so wie er soll, und das noch ein bisschen schneller als vorher.

Soweit so gut, ab dem nächsten Eintrag geht es nur noch um den Schach-Algorithmus, den ich hier auch ein bisschen (oder auch mehr, je nach Nachfrage) erklären werde. - sollte ihn Jemand noch nicht so genau kennen.

Das wars für heute.
lg
ComNik

5.Was stellt sich einem doch so alles in den Weg...

Freitag, 3. Juli 2009 von ComNik
Guten Abend liebe Worklogleser/innen,
lange liegt der letzte Eintrag zurück. Rolling Eyes
Sollt ihn jemand gelesen haben so sprach ich dort von einer simplen GUI die ich noch "kurz" zuende bringen müsste.

Nun inzwischen ist diese GUI weder simpel noch ist sie "kurz" zuende zu bringen. Einige Ideen haben mich dann doch länger daran festgehalten. Ich hoffe sie in den nächsten wochen fertigstellen zu können. Mehr zu der GUI gibts dann wahrscheinlich bald in einem Worklog. Wink

Zu Chaos Chess:
Fürs erste ist das Projekt pausiert. In den anstehenden Sommerferien werde ich mich aber wieder dransetzen und die anfänge der ki etwas weiter nach vorn bringen. Seit dem letzten Eintrag habe ich nur ein bisschen an der Bewertungsfunktion geschraubt. Und muss sagen es klappt besser als erwartet. Mehr dazu in den Ferien.

Danke für die erneute Aufmerksamkeit.
lg
ComNik

4. Die Ki <.<

Mittwoch, 3. Juni 2009 von ComNik
Guten Morgen allerseits! Very Happy

Nachdem ich nun schon kriD mit abgehobenen KI Theorien vollgequatscht hab, sind nun die werten Leser dieses Worklogs an der Reihe:

Ich möchte mich heute mal gedanklich sowie codlich(?) mit der Bewertungsfunktion befassen.
Die Bewertungsfunktion dient dazu, einer Situation im Spiel einen Wert zu verpassen. (oder 2 je nach suchalgo;))
Bei Tic Tac Toe mag sowas ja einfach sein, bei Shcah jedoch gibt es SEHR viele Faktoren die die Bewertung beeinflussen. Die Grundliegensten wären:
Arrow Materialwert <-- die werte aller figuren einer farbe addiert
Arrow Bedrohte, wichtige Figuren <-- ala König, Dame
Arrow Schachmatt Situationen^^ <-- König kann isch nicht mehr bewegen, keine Züge mehr in seiner "Zug Liste"

Damit liesse sich schon mal etwas (nichts gutes) anfangen. Wie könnte man diese Funktion also erweitern?
Meine Ideen wären folgende:
Arrow Zum Materialwert einer Figur noch die werte der Figuren hinzuzählen, die sie bedroht
Arrow jeder Figur einen Bonus geben, je nachdem wie sie gedeckt ist
Arrow bewegungsfreiheit!
Arrow Zugmöglichkeiten, anzahl aller möglichen züge
Arrow Position! ein Bauer am Rand kann getrost vergessen werden, sollte er nicht gerade eine dame bedrohen Wink

Und noch viele andere. Man fragt sich warum man nicht einfach ALLES einbauen sollte, und somit eine (fast) perfekte Bewertung hätte? Nun je mehr Zeit (also For Next schleifen^^) eine Bewertungsfunktion braucht, desto weniger Züge können in angenehmer Zeit vorraus berechnet werden. Und das ist noch wichtiger. Je mehr Züge die Maschiene im Vorraus berechnen kann, desto besser ist sie.

Man darf also keines von Beiden vernachlässigen.
Ich werde mal probieren im Laufe des Tages eine einfache Bewertungsfunktion (Materialwerte, bedrohte Damen/Könige) einzubauen.

Sollte sich damit spielen lassen, wird sie immer weiter ausgebaut. Ich habe ein paar Ideen ausgearbeitet, um die Laufzeit der Bewertungsfunktion zu verringern. Der eigentliche Suchalgorithmus ist nicht allzu schwer.

Ich entschuldige mich für soviel Theorie, aber es lässt sich nicht vermeiden Embarassed

Bis demnächst,
ComNik

[EDIT:]
Ich wollte keinen neuen Eintrag für diese Neuerung schreiben:
Der Zuggenerator arbeitet nun für ALLE Figuren. Endlich...
Nochmal ein großes dank an ToeB der mir hier entscheidend auf die Sprünge geholfen hat! Wink

[EDIT ENDE]

3. Feinschliff

Dienstag, 2. Juni 2009 von ComNik
Moin,
ausgeschlafen habe ich mich heute wieder an ChaosChess gesetzt. Bin allerdings aufgrind von Zeitmangel nicht üüüübermäßig weit gekommen. Figuren schlagen klappt jetzt endlich, nachdem ein sehr merkwürdiger Bug umgangen wurde und das Zugsystem geht auch. Wie auf dem Screen zusehen ist, "laufen" die Figuren fröhlich durch die Gegend.
Das Menü habe ich heute nicht mehr geschafft, dafür steht die GUI soweit, dass eine Implementierung eigentlich kein Problem mehr ist.

Sobald der Zuggenerator sauber arbeitet, lade ich mal eine Demo hoch (siehe Eintrag 2.^^). Bis dahin erstmal nur der Screen sowie ein Auszug aus der (erweiterten) To Do liste.

ToDo:
Arrow Zuggenerator komplettieren!
Arrow Menü
Arrow Funktion die prüft, ob ein Schachmatt vorliegt
Arrow Bewertungsfunktion (erläutere ich im nächsten Eintrag)

Da die Bewertungsfunktion mit das komplexeste ist, schriebe ich morgen oder so mal ein paar Gedanken dazu auf.

Und hier der Screen:
user posted image

In dieser Situation ist der Springer ausgewählt. Die ausgewählte Figur wird noch nicht hervorgehoben, kommt aber noch^^

Bis demnächst!

2. KAMPF! ...

Montag, 1. Juni 2009 von ComNik
Guten Abend,
Blöderweise habe ich seit 24 Stunden nicht geschlafen (dvd "abend" -.- ... von wegen).
Dadurch gestaltet sich das entwerfen und implementieren einer Schach Ki nicht gerade einfacher als sowieso schon...

Trotzdem möchte ich einige kleine Erfolge vermelden:
Arrow Figuren hauen sich jetzt visuell vom Schlachtfeld...
Arrow Der Zuggenerator arbeitet jetzt für: Bauern, Springer, Türme und Könige

Das "Kampfsystem" (schach - kampfsystem??? -.-') muss noch leicht erweitert werden. Dann müssen noch Züge rein, also erst Spieler1 dann Spieler 2 usw... das ist natürlich nicht so die herausforderung Wink
Dann sollte Mensch vs. Mensch soweit fertig sein und hier zum Download bereitstehen.

To DO ( nur Mensch vs. Mensch)
Arrow Zug System
Arrow "kampfsystem"
Arrow ein kleines Menü
( grafiken bleiben aber erstmal Rolling Eyes )

Dann kommt der Download. ( auch wenns ohne ki nix großes is Wink)
Screen gibts dann vom Menü (welches hoffentlich in meiner halbgaren GUI geschrieben werden kann Rolling Eyes ).


Ich bedanke mich ein weiteres mal für die Aufmerksamkeit

1. Vorstellung

Samstag, 30. Mai 2009 von ComNik
Guten Morgen,
nach meinem ersten nicht so erfolgreichem Projekt/Worklog ( Embarassed ) präsentiere ich hier mal wieder etwas, in einem etwas weiterem Stadium.

Erst einmal vorneweg: Chaos Chess ist nur der Arbeitstitel, sollte unser allseits bekanntes "Chaos Interactive" etwas gegen den Namen haben, so möge es mir eine PN schreiben.

Nun gut:
Chaos Chess wird in BlitzMax geschrieben und ist wie der Name schon sagt ein Schachspiel. Im moment bin ich noch dabei, das (sorgfältig geplante Wink ) Mensch vs. Mensch einzubauen. Also zwei Menschen vor einem Pc. Mein eigentliches Ziel ist es jedoch eine (einfache) Schach KI einzubauen. Ich weiß, dass das sehr überheblich ist und eigentlich viel zu umfangreich, aber ich machs trotzdem...

Chaos Chess soll etwa so werden wie "Don't get Angry" nur eben in Schach und in 2D. Es soll mehrere "Themes" geben, also zum Beispiel Mittelalter, Futuristisch etc... ( deshalb auch Chaos Embarassed )
Da dies allerdings grafischer Schnick Schnack ist, möchte ich mich erst gaaaaanz am Ende darum kümmern, weswegen auf dem Screen auch nur Wikipedia Grafiken zu bewundern sind. Diese werden natürlcih ersetzt, aber es geht mir mehr um das spielerische und (natürlich) die KI.

Der Worklog soll mir auch dazu dienen meine "Gedankengänge" aufzuschreiben. Deswegen verzeihe man mir hier auch viel Theorie.

Zuerst überlegte ich mir (und las mir an) was denn die essentielen Teile enes Schachspiels sind.
Da wäre:
1. Figuren auswählen.
2. Zuggenerator.
3. Zug ausführen.


In einer Mensch vs. Mensch Partie, dient der Zuggenerator natürlich nur dazu, dass keiner einen nicht möglichen Zug ausführt. Zur veranschaulichung mal ein Beispiel Zug:

Spieler1 wählt einen weißen Bauern. Für diesen Bauern werden nun alle möglichen Züge berechnet. Bei einem Bauern also sehr einfach: 1 Feld nach vorne. Wenn auf einem der beiden Felder lins oder rechtsoben von ihm eine gegnerische Figur steht, so ist das auch noch eine Zugmöglichkeit.

Wenn Spieler1 nun auf einem der möglichen Felder die rechte Maustaste drückt, so wird die Figur bewegt. Wenn NICHT: die Figur wird abgewählt und die Züge werden gelöscht.

Für eine Schach KI muss natürlich noch einiges mehr dazu (unter anderem der eigentliche Suchalgorithmus^^).
Aber darüber möchte ich jetzt nicht schreiben.

Folgende Umsetzingsmöglichkeit habe ich mir überlegt:
In einem 2 dimensionalen Array werden die ID's der Figuren gespeichert. Diese gelten gleichzeitig als Framenummer(^^). Somit geht das zeichnen der Figuren schneller, als wenn man in dem Array Objekte speichern würde, die man dann erst auslesen muss.
Das zeichnen der Figuren funktionierte wunderbar, nur brauchte ich noch eine Möglichkeit das Objekt unter der Maus an den Zuggenerator zu übergeben.
Dies natürlich mit möglichst wenigen For/Next EachIn Loops. kriD überzeugte mich dann von der Array Methode. Auch zweidimensional, nur eben mit Objekten, anstatt mit ID's.
Danke nochmal kriD!

Nun hatte ich was ich wollte, schnelles zeichnen und nur minimal For/Next!

Genug Theorie, "Feature" list sowie Screen:

Drinne is:
Arrow Figuren ziehen
Arrow Zuggenerator (noch nicht für alle Figuren, kann aber leicht erweitert werden)
Arrow keine unmöhlichen züge möglich (...)

To Do:
Arrow Zuggenerator erweitern
Arrow Figuren schlagen

und in weiter Ferne (Wink) noch die KI sowie gute Grafiken...

Ich verabschiede mich mit Dank für die Aufmerksamkeit und einem Screen:

user posted image

PS: Wie man erkennen kann, ignoriert der Zuggenerator Felder auf denen eine Figur steht egal ob schwarz oder weiß.
Das kommt natürlich noch, mitsamt dem Figuren schlagen. Rolling Eyes