Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Di 02.02.10 23:53 
Hallo,
ich habe ein 4 Gerwinnt Spiel geschrieben, leider finde ich es nicht so gut ohne einen richtigen Gegner zu spielen.

Wie kann ich ohne grosse aufwand einen richtigen Gegner Programmieren?

1. Prüfe ob Computer gewinnen kann.
2. Prüfe ob Spieler gewinnen kann, wenn ja, dann dementsprechend blockieren.
3. Wenn keins von beiden zutrifft, dann den Stein für den Computer an einer gewissen stelle plazieren und die beste möglichkeit für den Computer finden um zu gewinnen.

Wie ich den Spieler blockieren kann, ist nicht so schwer.
Mir geht es nur dadrum um die Steine der Computer richtig zu plazieren und die beste möglichkeit zu finden, damit der Computer gewinnen kann.

Gibt es vielleicht schon fertige units oder kann mir jemand einen beispiel Posten?

Ich bedanke mich schonmal für die Hilfe.

MfG
Dude566
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1592
Erhaltene Danke: 79

W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
BeitragVerfasst: Di 02.02.10 23:57 
Bin mir nicht sicher, aber ich habe mal gehört das für die Berechnungen einer KI der MinMax Algorithmus wohl ganz gut wäre.

Edit: Hier stehts ---> de.wikipedia.org/wiki/Minimax-Algorithmus

_________________
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Mi 03.02.10 00:06 
Ich danke Dir.

Da war ich schon bereits, leider verstehe ich das nicht so gut, also wie ich MinMax in Delphi verwenden kann und bei 4 Gewinnt diese Felder zu prüfen.

Kann mir Vielleicht jemand erklären wie ich das ambesten mit MinMax in Delphi hinbekomme?

MfG
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Mi 03.02.10 12:11 
Eine KI für Vier gewinnt ist eigentlich relativ einfach, du hast ja nur 7 Zugmöglichkeiten, da kannst du deine KI ja jeden Zug "in Gedanken" ausprobieren lassen und dann jeweils überprüfen was passiert. Auf die einzelnen Spalten kannst du dann Prioritäten aufsummieren, in dem du überprüfst was jeweils passiert. Kleines Beispiel:

Wirfst du einen Stein in Spalte ein entsteht ein "Dreier" für die KI das gibt dann zB +5 Prioritätspunkte für die Spalte. Wirfst du den Stein in Spalte 2, verhinderst du einen "Vierer" vom Gegner (zB +20 Punkte) und es entstehen zwei Zweier für die KI (zB + 2*2 Punkte), wirfst du in Spalte drei entsteht ein Vierer für die KI (zB +1000 Punkte) usw. SPalte drei hat höchste Priorität, also wird da ein Stein reingeworfen.

Die einzelnen Punktwerte für die Situtationen musst du dir aber zurechtbasteln, weiß da nicht was optimal wäre. Und natürlich musst du auch checken, was passiert wenn der Gegner einen Stein auf deinen setzt.
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Mi 03.02.10 12:24 
Generell gibt es für KI verschiedene Ansätze:

BackTracking mit MinMax) wie Jann1k und Dude556 es beschrieben hat. D.h. man versucht jede Möglichkeit aus und bewertet danach die neue Spielsituation und macht dann den Zug der unter Berücksichtigung dass der Gegner auch den besten Zug mach (min für dich) für dich in x Schritten am besten ist. Wobei x bis zum Ende bzw. bis zu einer Suchtiefe (Schwierigkeitsgrad geht).

Backtracking ist ein generischer Ansatz und kann für alle Spiele angewendet werden.

Dagegen wäre ein Logik) Du definierst eine Logik nach der deine KI Fährt (speziell für 4 Gewinnt). Sprich du sagst wenn er bei 1 rein wirft, werfe ich bei 2 rein. oder so etwas. Je nachdem wie intelligent die Logik ist, ist es dann schwieriger sie zu Knacken. Im Schach wäre das dann das Implementieren von "Weisheiten/Sprichwörtern" wie "Pferd am Rand ist eine Schand" ....


Das einfachste ist wohl Backtracking mit MinMax: Dafür musst du eine Situationsbewertung implementieren, wie es Janni1k erklärt hat. Und dann ein Algorithmus der einmal das Max und beim nächsten mal (gegnerischer Zug) das Min nimmt.

Gruß Daniel
Fiete
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 617
Erhaltene Danke: 364

W7
Delphi 6 pro
BeitragVerfasst: Mi 03.02.10 13:03 
Moin jackie05,
hier ein Link aus dem Forum
www.delphi-forum.de/...;highlight=strategie

Gruß
Fiete

_________________
Fietes Gesetz: use your brain (THINK)