4 gewinnt KI Spieler gegen Computer

Status
Nicht offen für weitere Antworten.

cr3m4

Mitglied
Hallo zusammen,

4Gewinnt-Beispiele gibts ja schon genug und funktioniert soweit auch bei mir, allerdings soll bei meinem Programm der Computer als Gegenspieler her halten. Dazu muss es ja dann die Methoden geben die Spielzüge des Humanplayers verhindern und prüft ob 3Steine des KI schon nebeneinander liegen.


Habe momentan dazu noch keine richtigen Ansätze, bzw ich verlauf mich da recht schnell in der Logik.

Hier auch mal die Grundsätzlichen Methoden der Abprüfung nach Horizontal, vertikal und Diagonal:

Code:
//Vertikaler Check nach 4 gleichen nebeneinander
public boolean checkVertikal(int x, int y) 
	   {
		   int hasFour=0;
		   boolean win=false;
		   
           for (int i = 0; i < anzX; i++)
           {
        	   if (fButton[i][y].getChar() == fButton[x][y].getChar())
               {
        		   hasFour++;
                       System.out.println("Horizontal: "+hasFour);
               }
               else
            	   hasFour = 0;
        	   
        	   if(hasFour==4)
            	   win=true;
           }
           return win;
	}

//horizontaler Check nach 4 gleichen nebeneinander
	      public boolean checkHorizontal(int x, int y)
	      {
              int hasFour = 0;
              boolean win=false;
              
              for (int i = 0; i < anzY; i++) 
              {
                      if (fButton[x][i].getChar() == fButton[x][y].getChar())
                      {
                    	  hasFour++;
                              System.out.println("Horizontal: "+hasFour);
                      }
                      else
                    	  hasFour = 0;
                      
                      if(hasFour==4)
                    	  win = true;
              }
              return win;
	      }

//Diagonaler Check nach Rechts unten auf 4 gleiche nebeneinander
	      public boolean checkDiagRU(int x, int y)
	      {
              char playerSymbol = fButton[x][y].getChar();
              int i = x;
              int j = y;
              int hasFour = 0;
              boolean win=false;
              while ((i > 0) && (j > 0)) 
              {
                      i--;
                      j--;
              }
              while ((i <= anzX-1) && (j <= anzY-1)) 
              {
                      if (fButton[i][j].getChar() == playerSymbol)
                      {
                    	  hasFour++;
                              System.out.println("DiagonalRU: "+hasFour);

                      }
                      else
                    	  hasFour = 0;
                      
                      i++;
                      j++;

                      if(hasFour==4)
                        	win = true;
              }
              return win;
      }
	      
//Diagonaler Check nach Links unten auf 4 gleiche nebeneinander
	      public boolean checkDiagLU(int x, int y)
	      {
              char playerSymbol = fButton[x][y].getChar();
              int i = x;
              int j = y;
              int hasFour = 0;
              boolean win=false;
              while ((i >0) && (j < anzY-1)) 
              {
                      i--;
                      j++;
              }
              while ((i <= anzX-1) && (j >= 0)) 
              {
                      if (fButton[i][j].getChar() == playerSymbol)
                      {
                    	  hasFour++;
                              System.out.println("DiagonalLU: "+hasFour);
                      }
                      else
                    	  hasFour = 0;
                      i++;
                      j--;
                      
                      if(hasFour==4)
                      	win= true;
              }
              
              return win;
         
      }

//Prüfung ob eine der Prüfungsmethoden Gewonnen zurückliefert.
	      public boolean hasWon(int x, int y) 
	      {
    	          if(  ( checkHorizontal(x, y) || checkVertikal(x, y) || checkDiagRU (x, y) || checkDiagLU (x, y) )) 
	    		  return true;
	    	  else
	    		  return false;
              }

Vielleicht habt ihr ja nen guten Ansatz.

tnx
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Der "gute Ansatz" wurde schon vor ... zug Jahren entwickelt, und nennt sich Alpha-beta pruning - Wikipedia, the free encyclopedia, als Erweiterung/Verbesserung von Minimax - Wikipedia, the free encyclopedia

Bisher klingt es, als wolltest du nur versuchen, die KI so spielen zu lassen, dass sie 3 in einer Reihe erkennt, und dann zu verhindern versucht, dass der Spieler 4 daraus macht. Das wäre aber ziemlich dumm. Um eine gute KI zu schreiben brauchst du bei so einem einfachen Spiel nicht viel mehr als:

  • Eine Methode, um einen Zug "x" zu machen (d.h. einen Stein in die x-te Spalte zu werfend)
  • Eine Methode, um einen Zug "x" rückgängig zu machen
  • Eine Methode, die das Spielbrett bewertet.
Die Bewertung könnte dabei recht einfach sein. Als erster Ansatz reicht schon:
- Die Bewertung ist -1 wenn Weiß 4 in einer Reihe hat
- Die Bewertung ist +1 wenn Schwarz 4 in einer Reihe hat

Damit kannst du oben verlinkte Algorithmen implementieren. Fang' ggf. mit dem Minimax an, der ist viel, viel einfacher, und dürfte schon eine "ganz gute" KI liefern.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Fünf Gewinnt Spiele- und Multimedia-Programmierung 9
I Vier gewinnt programmieren, Klick-Reihenfolge Spiele- und Multimedia-Programmierung 2
M Hilfe bei vier gewinnt Spiele- und Multimedia-Programmierung 4
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
C Vier Gewinnt Problem mit Ordnerstruktur Spiele- und Multimedia-Programmierung 2
S 4 Gewinnt Spiele- und Multimedia-Programmierung 1
F 4 Gewinnt - Code wird ignoriert Spiele- und Multimedia-Programmierung 7
S Problem mit 4 gewinnt(MinMax Algorithmus) Spiele- und Multimedia-Programmierung 2
C Vier Gewinnt Spiele- und Multimedia-Programmierung 7
M Eine Art "Vier Gewinnt" Spiele- und Multimedia-Programmierung 5
T Vier gewinnt programmieren Spiele- und Multimedia-Programmierung 9
G 4 gewinnt - Kritik/Verbesserungsvorschläge/etc. Spiele- und Multimedia-Programmierung 3
T vier gewinnt programmieren - aber wie Spiele- und Multimedia-Programmierung 19
H Tic Tac Toe / 3 Gewinnt OHNE Applet Spiele- und Multimedia-Programmierung 9
A Vier-Gewinnt-Problem Spiele- und Multimedia-Programmierung 11
Y Applet für "Vier Gewinnt": Welche Klassen verwende Spiele- und Multimedia-Programmierung 10
D 4 gewinnt Projekt Spiele- und Multimedia-Programmierung 2
B 4 Gewinnt Problem Spiele- und Multimedia-Programmierung 5
N 4 Gewinnt fertig (Kritik, Fragen etc. erwünscht) Spiele- und Multimedia-Programmierung 29
A 4 gewinnt Spiele- und Multimedia-Programmierung 4
S Welche Klassen für ein 4 Gewinnt? Spiele- und Multimedia-Programmierung 6
C Vier gewinnt 3D Spiele- und Multimedia-Programmierung 16
R Vier gewinnt: Bitte testen Spiele- und Multimedia-Programmierung 25
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
G Minecraft PlayerBot (Listener Thread für jeden Spieler?) Spiele- und Multimedia-Programmierung 3
B überprüfen ob das Inventar vom Spieler leer ist Spiele- und Multimedia-Programmierung 3
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
coolian meine funktion um die höhe des terrains an bestimmter position in diesem fall spieler position zu bekommen giebt nur 0 zurück Spiele- und Multimedia-Programmierung 6
J Gegner verfolgt den Spieler Spiele- und Multimedia-Programmierung 7
Sogomn Zugriff auf den Spieler Spiele- und Multimedia-Programmierung 10
M Schleifen um abzufragen, ob der Spieler "tot" ist Spiele- und Multimedia-Programmierung 6
Androbin Verschwindender Spieler in 2D-Game Spiele- und Multimedia-Programmierung 7
Kenan89 Ansatzfrage: Kartenspiel für 2 Spieler Online Spiele- und Multimedia-Programmierung 3
D Spieler mission erfüllt Spiele- und Multimedia-Programmierung 2
Redfrettchen Tastatur für zwei Spieler teilen? Spiele- und Multimedia-Programmierung 8
L 2 Spieler Steuerung Spiele- und Multimedia-Programmierung 4
R TicTacToe: Spieler kann nicht gewinnen Spiele- und Multimedia-Programmierung 15

Ähnliche Java Themen

Neue Themen


Oben