Entwickler-Ecke
Sonstiges (Delphi) - Wer hat Erfahrungen mit Hexfeld Spielen?
MartinPb - Do 08.07.04 13:15
Titel: Wer hat Erfahrungen mit Hexfeld Spielen?
Vor ein paar Jahren hatte ich die Idee für ein Spiel. Dieses Spiel hab ich sogar umgesetzt, allerdings nur als Brettspiel. Dieses Spiel hat sogar einige Fans in meinem Bekanntenkreis. Nun wurde ich gefragt, weil ich nun programmieren kann, wieso ich das Spiel nicht für den Computer umsätze.
Das Spielfeld besteht aus eine bestimmten Anzahl Hexfelder. Hier das Brett
Bild [
http://www.martinpb.de/temp/hg.gif]
Ich könnte mir vorstellen, daß die Brettgröße bei der Computerversion variabel sein könnte.
Wie man sieht ist die Anzahl der wagerechten Felder nicht gleich. Oben und unten sind es wenige, zu mitte hin sind es mehr. Jetzt überlege ich wie ich die Felder ansprechen kann. Es geht hier um die KI. Wenn ich eine Computervariante des Spiels mache, dann wird man auch gegen den Computer spielen wollen. Wenn ich als in irgendeinem Feld bin, so muß ich wissen was um mich herum los ist. Bei einem Schachbrett habe ich mein zweidimensionales Aray mit Feldern von 1 bis 8 und A bis H. Nun überlege ich wie ich es bei meinem Spiel machen soll. Wie schon gesagt ist die Anzahl der Felder pro Reihe nicht gleich, so daß ich sie nicht zweidimensional zuordnen kann. Nur wie kann man ein Brettspiel in Hexfeldform umsätzen.
Das einzige was mir bisher einfällt ist ein einfaches eindimensionales Array Record. Jedes Feld hat seine Nummer und sechs weitere Variablen, in denen die Nummern der Nachbarfelder gespeichert ist. Das Feld 24 weiß z.B., daß sein Nachbar oben (Nord) das Feld 15 ist. Sonst weiß daß Feld nicht wo es sich innerhalb des Brettes befindet. Die KI würde also nicht die Position der Steine auf dem Brett analysieren, da es nicht wüßte in welcher Anordnung zueinander die Steine liegen, sondern würde die Steine in alle sechs Richtungen ziehen lassen (das ganze mal alle Steine) und würde den besten Zug nehmen.
Das ist das einzige was mir bisher eingefallen ist. Kein zweidimensionales Array, wo ich die Position der Steine zueinander analysieren kann, sondern ein eindimensionales Array, wo ich Probezüge mache.
Bevor ich aber loslege, will ich mich noch über andere Möglichkeiten informieren. Wer kennt sich mit der Art der Spiele aus und weiß wie sonst die bei dieser Art der Spiele verfahren wird?
Hinweis:
Diese Frage, vorausgesetzt ich kriege keine Antworten, will ich nach und nach auch in anderen Foren stellen.
jaenicke - Do 08.07.04 16:57
Zitat: |
Wie schon gesagt ist die Anzahl der Felder pro Reihe nicht gleich, so daß ich sie nicht zweidimensional zuordnen kann. |
Warum nicht? Schließlich könntest du die nicht vorhandenen Felder aussparen, die könnten ja in einer Liste stehen. Und die Zeilen könnten doch so sein, dass beispielsweise die untereinander stehenden Felder in zwei Zeilen stehen, zwischen denen eine Zeile Platz ist, und das seitlich "dahineinversetzte" Feld könnte in dieser Leerzeile stehen.
Bild:
http://www.css-berlin.com/Dateien/hg.gif
Dann wärs auch einfach die benachbarten Felder zu finden...
Zitat: |
Hinweis: Diese Frage, vorausgesetzt ich kriege keine Antworten, will ich nach und nach auch in anderen Foren stellen.
|
Das ist klar, du bist nur der einzige, der das bisher erwähnt hat :mrgreen:
(soweit ich weiß...)
sourcehunter - Do 08.07.04 20:28
Wenn jedes Feld weiß, was seine Nachbarn sind, dann ist doch alles in Ordnung, du lässt den Computer bis zu einer bestimmten Tiefe (Entfernung) suchen und dann nimmst du das beste Ergebnis. So wird das überall gemacht, das beste Beispiel ist Schach. Du musst die Suchtiefe sinnvoll festlegen, so, dass der Computer sich nicht totrechnet und so, dass er keinen taktischen nachteil hat.
MartinPb - Fr 09.07.04 00:26
jaenicke hat folgendes geschrieben: |
Warum nicht? Schließlich könntest du die nicht vorhandenen Felder aussparen, die könnten ja in einer Liste stehen. Und die Zeilen könnten doch so sein, dass beispielsweise die untereinander stehenden Felder in zwei Zeilen stehen, zwischen denen eine Zeile Platz ist, und das seitlich "dahineinversetzte" Feld könnte in dieser Leerzeile stehen. |
Mir ist schon klar, daß ich irgendwie ein zweidimensionales Feld erstellen könnte, aber eben nur irgendwie. Und irgendwie will ich das nicht machen. Die Felder sind nun mal sechseckig und die Reihen haben unterschiedliche Anzahl Felder. Ohne eine Umrechnung mit Sonderregeln wird das nicht klappen. Ich hab mir da schon meine Gedanken gemacht. Ich glaube auch nicht, daß andere Hexfeldspiele zweidimensional arbeiten.
Allerdings wollte ich weniger einen Vorschlag. Vielmehr war die Frage ob einer bereits Erfahrungen besitzt, d.h. wenn schon Vorschläge, dann solche die schon in der Praxis angewendet werden.
thebe - Fr 09.07.04 02:39
Ich würd ma stark tippen das man pro Feld ne eigene Klasse erstellt. In der Klasse is dann nen Array[1..6] of ^TFeldKlasse. In der Klasse wird dann auch abgespeichert wo der erste Eckpunkt des Sechseckes ist und dann von dort aus gezeichnet wird bzw. dort dann eine Grafik auf den Canvas hinkopiert wird. Weiter kannst Du in dieser Klasse dann auch abspeicher was da an Figuren draufstehen und falls diese Figuren sich dann auch noch bewegen sollen, kannst Du mit dieser Variante sogar recht einfach den A*-Pathfinging Algorithmus anwenden.
Bei dieser Variante musst Du dann nur aufpassen das beim Erstellen des Spielfeldes die Felder die Nachbarn zugewiesen kriegen und auch die richtigen X/Y Werte.
jaenicke - Mo 12.07.04 11:59
Zitat: |
Vielmehr war die Frage ob einer bereits Erfahrungen besitzt, d.h. wenn schon Vorschläge, dann solche die schon in der Praxis angewendet werden.
|
Das hab ich nur nicht erwähnt :roll: , aber ich hab diese Methode bei einem polygonalen MineSweeper angewendet... :wink:
Und obwohl das mit weiteren Berechnungen verbunden war, war das einfacher und schneller, weil man dann die Nachbarn direkt ansprechen kann, anstatt diese irgendwie zu speichern...
Zumal in deinem Fall die Ausnahmen relativ einfach zu definieren sind.
sourcehunter - So 18.07.04 21:04
@jaenicke
Hast du dein Minesweeper irgendwo zum download?
thebe - Mo 19.07.04 13:04
Hab mich mal bisserl hingesetzt.
Mein Ansatz:
Vorteile:
- Zugriff über 2D Array der Felder
- X/Y Koordinaten der Felder sind durch Algorithmus berechenbar anhand der Indizes
- Nachbarn sind auch durch Algorithmus berechenbar anhand der Indizes
- Beide Berechnungen sind dynamisch, sprich es ist egal wie viele Reihen / Spalten Du an Feldern hast, die Formeln bleiben immer die gleichen
Nachteile:
- Du musst abspeichern welche Felder inaktiv sind (grau unterlegt) und welche nicht und je nachdem die Felder zeichnen, was aber denke ich kein soooo großes Problem darstellen sollte.
MfG
- Thebe
PS: Poste doch einfach mal die Brettspiel Idee hier rein, die interessiert mich doch schon.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!