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

1

24.08.2009, 16:20

Computergegner für simples Konsolenspiel

mittag,
ich bin gerade am Überlegen, wie ich für ein simples Konsolenspiel einen Computergegner programmieren kann (C++, Win).
Also ungefähr eine kleine KI, wenn man das so bezeichnen kann, als Gegner bereit steht.
Dazu habe ich TicTacToe gewählt und es zum testen für 2 Spieler gegeneinander programmiert.
Nun soll ein Spieler durch den Pc ersetzt werden.

Ich könnte viele If abfragen programmieren (Beispiel: Wenn an Stelle 1 und 2 ein X ist, setze an Stelle 3 ein O. Jedoch nur in 95% der Fälle damit der Pc auch Fehler macht).
Oder gibt es da noch einen anderen Weg, weil das eine beachtliche Menge an If abfragen bedeuten würde ?

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

2

24.08.2009, 16:47

Such mal hier im Forum, irgendwer hat dafür glaube ich mal eine KI entwickelt, nach welchem Verfahren weiß ich nicht mehr genau. Aber alles hardcoden finde ich etwas übertrieben... du hast 3^9 verschiedene Spielfelder. willst du so viele verschiedene Möglichkeiten mit Ifs realisieren? Wird lange dauern...
Ein weiteres Problem ist (hatte die andere KI aus dem Forum aber auch), dass man, wenn man einmal gewonnen hat, mit dem gleichen Zug auch immer wieder gewinnen kann. Da das Feld aber ein Quadrat ist, könntest du das vorher immer drehen, das kriegt der Spieler nicht mit, aber intern hast du so andere Situationen und die KI würde wahrscheinlich anders reagieren. So könntest du die "dumme" vorprogrammierte KI etwas verschleiern.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

24.08.2009, 17:01

dafür ist ein so genannter game tree ganz neckisch ;) ansonsten halt einfache strategie, wie:

schaue, ob der gegner irgendwo einen dreier machen kann:
wenn ja, dann verhindere das
absonsten setze selber clever (anfangs vllt noch zufall, ansonsten besten platz ausrechnen^^)

4

24.08.2009, 18:45

Wie TrommlBomml bereits gesagt hat, musst du dir eine "Mathematische Abfolge" entwickeln, danach einfach mit If / Else Abfragen einbauen.

Schwierig wird eine KI erst bei Bewegung von Dingen (Raumschiffe, Shooter, RTS)
Dieser Post wurde aus artgerecht gehaltenen, 100% chlorfrei gebleichten, handelsüblichen Elektronen aus Freihaltung erzeugt.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

5

24.08.2009, 20:24

<<--- frisch gebackener Contest-Gewinner mit meiner Raumschiff-KI :D
Soooo schwierig war das garnicht ;)

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

6

25.08.2009, 10:35

Zitat von »"Arrows"«

Schwierig wird eine KI erst bei Bewegung von Dingen (Raumschiffe, Shooter, RTS)

Ich würde eher sagen eine KI wird dann richtig schwierig zu implementieren wenn sie Strategie und Taktik anwenden muss um zu gewinnen und die Zahl der Spielsituationen so groß ist, dass man sie nicht vorberechnen kann (Schach als bestes Beispiel, aber auch Reversi, Dame, Mühle, etc).

Bei TicTacToe gibt es eigentlich eine sehr einfache Möglichkeit, da die Zahl der Spielsituationen sehr klein ist (19 683, wenn ich mich nicht verrechnet habe). Du kannst in einer Datei für jede Spielsituation den perfekten Zug speichern. Den perfekten Zug kannst du z.B. mit dem Minimax Algorithmus bestimmen.

Alternativ kannst du Minimax natürlich auch direkt im Spiel benutzen.

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

7

25.08.2009, 12:03

Ja, Spielsituationen gibt es nur 19k, aber Wege bis zum Ende gibt es knapp 27k, wenn man äquivalente situationen schon rausnimmt. Ist aber für heutige Verhältnisse immer noch klein genug ^^

8

25.08.2009, 12:34

jop das hatte ich über google auch schon gefunden.


Habe jetzt aber nochmal eine andere Methode mir ausgedacht.
Es gibt genau 8 Möglichkeiten zu gewinnen.
Für jedes Feld gibt es zwei Wertungen, eine für O und eine für X. Wenn nun in der ersten Reihe (Feld 1, 2, 3) zweimal die X-Wertung vorkommt, wird die reihe aktiviert und der Pc setzt auf ein freies Feld in der Reihe. Bei zweimal O in der Reihe das selbe.
Wenn nirgendwo doppelt besetzt ist, setzt er in die Mitte, wenn die besetzt ist, setzt er durch Zufall auf die Eckpunkte.

So wird zwar nichts voraus berechnet, aber es funktioniert und ist einfach umzusetzen für Anfänger :D

Wenn das irgendwer mal als Quellcode sehen will, kann ich das mal posten, aber das wird wohl nicht der Fall sein.


Danke für die Antworten ;)

goldfisch007

Alter Hase

Beiträge: 446

Wohnort: Süden von Berlin

  • Private Nachricht senden

9

31.08.2009, 12:21

es gibt auch nen tutorial
im entsprechenden Forum indem in 3 teilen nen TicTacToe
peprogt wird da is bestimmt auch sowas mit drin....
Wir bauen auf und reißen nieder, so ham wir Arbeit ima wieder...
--------------------
http://www.piratenpartei.de/tmp/images/Slogans_5_0.png
--------------------
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender, geklaut von Helmut xD)

10

31.08.2009, 13:41

ja das hatte ich auch gesehn, aber glaube das war nur für 1 vs 1

Werbeanzeige