Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

11

13.05.2012, 20:07

ja jetzt verstehe ich die idee schon, nur glaub ich, dass ich jetzt dafür mein komplettes Projekt umwerfen müsste
und ich auch denke, dass das nachher von der PErformance nicht mit im Verhältnis steht bzw. einfach zu lange dauert.

Aber theoretisch wäre das ja genau das, was ich schon vergeschlagen habe.
Da man ja dann nu die 3 kacheln um den Tron herum betrachtet und das ja bei meinem links-rechts-geradeaus-System ähnlich ist.

Bin wirklich gern offen für neues, da ich ja auch danach gefragt hab, erkenne aber noch nicht wirklich den Vorteil.
Könntest du es vll nochmal ein bisschen ausführlicher erklären?
Das wäre volll Cool!
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

12

13.05.2012, 20:50

Was du vorgeschlagen hast, war A*.
Was ich vorschlage, ist sowas wie z.B. der Minimax-Algorithmus, wobei man das Spiel als eine Art "Brettspiel" betrachtet.

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

13

14.05.2012, 20:24

Das mit dem A* war ja auch kein Vorschlag, war nur ein Beispiel für Algorithmus.
Is aber auch egal!

Mit dem Minimax-Algorithmus; hab mir den jetzt man angeguckt,
hab ihn auch so grob verstanden, nur glaub ich, dass der in meinem Fall nicht so gut passt,
da das einfach zu aufwändig ist, denn man muss ja für jeden anderen Spieler, was ja in meinem Fall 3 andere sind,
den folgendenden Zug berechnen!
Außderm ist es, glaub ich, besser, wenn ich das so ähnlich mache, halt nur für das Abbiegen bzw. das Weiterfahren mache.

Was meinst du?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

14

15.05.2012, 15:28

Soweit ich das rauslesen kann wär der glaub ich schon das richtige für dich. Du willst ja wenn ich das jetzt richtig verstehe Punkte für einzelne Aktionen vergeben, von denen dann ausgewählt wird welche Aktion er dann ausführen möchte. Aber du musst dann ja noch herausfinden welche Aktion jetzt die höchsten Punkte hat und das macht der Minimax-Algorithmus dann für dich. Der Algorithmus würde ja erst aufwendig werden wenn du jetzt deutlich mehr Optionen hast zwischen die der Computer auswählen müsste, aber was ich so rauslese hast du ja dann nur 3 Möglichkeiten, geradeaus oder links, rechts abbiegen.


Und um dir vllt etwas überblick über den Zeitaufwand zu geben, ich bastel an einem Rundenstrategiespiel, wobei die Einheiten sich nicht bewegen sie deshalb immer eine feste Positionen haben. Um meiner KI sagen zu können wenn sie angreifen sollen, muss diese durch ca. 3000 Zeilen Code durch, einmal für die Einheiten der Spieler und dann nochmal für die gegnerischen Einheiten. Im Release Modus, braucht das Programm für 500 Runden, mit jeweils 6000 Zeilen Code nichtmal 5 Sekunden. ;) Das könnte also auch flüssig mit 100 Frames laufen. ^^

Dabei denke ich mal das dein Code der KI deutlich kürzer sein wird. ;)


Ich mach das auch mit einer Punktevergabe, zuerst Speichere ich die Daten der 21 Einheiten des Gegners in Vectoren ab sodass ich später einfach darauf zugreifen kann und Ordne sie schon nach Stufen. Dann schaue ich für jede Einheit nach wen sie überhaupt angreifen darf, nach den Regeln die ich aufgestellt habe, was sicherlich die hälfte des Codes darstellt. Um anschließend für die Angriffsmöglichkeiten die Punkte zu ermitteln und anschließend die Einheit anzugreifen die die höchste Punktzahl erreicht hat. Das mach ich momentan noch mit einer for Schleife wo ich einfach jeden Wert überprüfe bis der höchste über geblieben ist. An dem Punkt würde sich für mich im Grunde auch der Minimax-Algorithmus rentieren, kannte den bis jetzt auch nicht, hab einfach so für mich losprogrammiert.

Mit den Minimax-Algorithmus reduzierst du halt die Vergleiche um auf die höchste Punktzahl deiner Auswahlmöglichkeiten zu kommen.


Also wie du schon geschrieben hast, hat gerade ausfahren jetzt z.b. schon Standard mäßig einen höheren Wert. Wenn jetzt z.B. vor dir ein Hindernis festgestellt werden sollte, kannst du nach den Regeln die du dir aufstellt ja dann z.b. mehr Punte für abbiegen rechts erteilen. Wordurch dann diese Aktion ausgewählt wird. Mit der Punktvergabe musst dich halt einfach etwas Spielen, also am besten schon eine Strecke haben wo du das auch immer etwas Testen kannst, wäre doch sehr von Vorteil denke ich. So hab ich das bei mir auch immer gemacht, immer zwischendurch mal geschaut wie wirkt sich das jetzt auf die KI aus, um dann auch gleich sehen zu können wo man evtl. noch nachbessern sollte, weil sie sich noch nicht so verhält wie man es gerne hätte.


Hoffe ich hab nichts falsch verstanden und es hilft dir etwas weiter.

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

15

15.05.2012, 16:10

Ja so hab ich das auch gemeint.
Einfach immer Punkte geben und immer mehr verschiendene Kategorien hinzufügen, sodass die KI immer genauer wird.

Bei dem Minimax is es ja so, dass er schon das Spiel sozusagen weiter spielt und so dann seine Entscheidung trifft.
Meine Kategorien können dann ja z.b. sein:
1. stößt er in den nächsten zeit (z.b. 0.5 sek) gegen eine mauer
2. fährt er so, dass ein anderer gegen seine mauer fährt
und das dann auch dereferenziert, wie weit er dafür fahren muss.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

16

15.05.2012, 16:51

Du wirst ja wahrscheinlich auch die Frames begrenzen, sodurch hast du dann ja auch Zeit um die KI in der Zwischenzeit zwischen den Frames zu berechnen. Ich denke das mein Spiel was ich momentan habe und was im Grunde rundenbasiert ist, auch mit 60 Frames flüssig laufen würde, wenn ich jeden Frame eine neue Runde berechnen würde. Die graphische Darstellung ist bei mir da recht simpel da es 2D ist und braucht deswegen da nicht viel Leistung.

Sollte ich mal testen. *g*


Aber das wirst du ja nicht mal unbedingt brauchen, je nachdem wie schnell deine Fahrzeuge unterwegs sind musst du das pro Sekunde vllt nur 2x oder 4x machen oder auch weniger. Dadurch könntest du die Aufgaben ja auch aufteilen, sodass den einen Frame ein paar Punkte vergeben werden, den nächsten Frame die nächsten Punkte und dann sobald das fertig ist in einem weiteren Frame mit dem Minimax-Algorithmus die höchste Option mit der höchsten Punktzahl bestimmen.

Wenn man weiter geht könnte man da auch noch überprüfen wieviele Zeit bleibt mir jetzt gerade auf diesem PC wo es läuft über und kann das dann dynamisch ja anpassen, wie oft die KI Schritte berechnet werden, jenachdem wieviel Zeit zur Verfügung steht.

Hab das zwar noch nie gemacht, aber sollte nicht so schwer sein. Dazu gibts hier auf der Seite ja auch einen Wiki Artikel, wie man sowas unterbringen kann. Mit Verschiedenen herangehensweisen.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

17

15.05.2012, 18:03

Implementier ruhig mal den Minimax. Das sollte ganz gut laufen. Dann begrenzt du einfach wie weit er in die Zukunft gucken kann. Er muss ja nicht 1000 Schritte im voraus berechnen. Da reicht auch weniger. Wenn dir das ganze dann zu langsam läuft ist das hier eine gute Erweiterung für den Algorithmus. Damit kannst du die Laufzeit dann noch ein bisschen verbessern.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

18

15.05.2012, 18:19

Ja ich würde ihn schon gern mal ausprobieren...
Erlich gesagt, hab ich ihn aber eig doch noch nit verstanden :S

Und auch der Artikel in Wikipedia oder sonst auf der 1.Seite bei Google haben mir nicht so viel geholfen:(
Könnte du ihn mir vll nochmal kongret für meine Anwendung erklären, denn ich kann das Beispiel bei Wiki nicht so
richtig auf meins übertragen...

Ich weiß, das is jetzt vll bisschen viel verlangt, weil er bestimmt etwas schwierger zu erklären ist, aber es würde mir wirklich viel
helfen!

Außerdem, klappt der überhaupt auch mit 4 Spielern?
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

19

16.05.2012, 01:54

Wir haben den mal in der Uni bei einer Gruppenarbeit implementiert. Da haben wir eine KI für ein Kartenspiel benötigt. Das war für 3 bis keine Ahnung wie viele Spieler;) Funktioniert also auch bei 4 Spielern. Habe ihn jetzt auch nicht mehr richtig im Kopf und grad ist es mir zu spät zu gucken. Dafür muss ich zu früh raus;)
Versuch doch vielleicht einfach mal den Algorithmus auf ein einfacheres Spiel anzuwenden. Tic-Tac-Toe ist ein guter Einstieg. Die Logik sollte auch fix implementiert sein. Es reicht ja auch ein einfacher Prototyp und muss kein ausgefeiltes C++ sein. Zu Tic-Tac-Toe findest du vielleicht auch schon fertige Implementationen, wobei es immer so eine Frage ist, ob sich anhand dieser der Algorithmus so super nachvollziehen lässt. Danach musst du einfach davon ausgehen, dass dein Spiel Schrittweise abläuft. Das hat David ja schon ganz gut erklärt. An sich könntest du ja sogar sogen, pro Frame macht jeder nacheinander seinen Zug/seine Entscheidung. Ganz so schnell wird es ja sicherlich nicht laufen, aber du kannst ja einfach davon ausgehen, dass einmal pro Sekunde jeder Fahrer in einer bestimmten Reihenfolge seinen Zug festlegt. Du hast deine 3 möglichen Züge und musst dann entscheiden wie gut die Situation nach diesem Zug wäre. Bei Tic-Tac-Toe machen die Spieler ja auch nacheinander ihren Zug und du kannst den Spielzustand bewerten. Das musst du dann halt versuchen zu übertragen. Das wird sicherlich nicht ganz einfach sein, aber das hat ja auch keiner behauptet;) ´
Wie gesagt, versuch dich mal an einem einfachen Beispiel und wenn konkrete Fragen kommen helfen wir gerne. Wenn ichs schaffe gucke ich mir den Algorithmus morgen noch mal an. Dann kann ich dir vielleicht auch noch mal genauere Hilfestellungen geben.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

ProAmateur

Alter Hase

  • »ProAmateur« ist der Autor dieses Themas

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

20

16.05.2012, 06:24

Ok Danke, ich werd es mal probieren.
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

Werbeanzeige