minimax bei 4-gewinnt



  • hi leute!!
    ich hab n kleines problaem:
    ich will ne KI fuer mein 4 gewinnt game schreiben. ich hab auch schon nen minimax algorythmus dafuer geschrieben(ansatzweise) doch er will nicht funzeln. die anregung fuer den minimax hab ich mir aus wikipedia geholt...
    mir ist im grunde auch klar wass der minimax macht aber wie gesagt funzeln tut er nicht 😞 . koenntet ihr bitte mal drüberlesen un mir vielleicht etwas haelfen...
    mein code:

    char battleField[6][7];
    int next;    
    int wert;
    char notC;   
    
    void gamerVcomp(){
       int run = 0;
       int eing = 0;
       while(1){
          system("clear");
          if(run % 2 == 0){
             printf("Spieler 1(X) ist an der Reihe...\n");
          }else{
             printf("Spieler 2(O) ist an der Reihe...\n");
          }//end if
          print();
    
          if(run % 2 == 0){
             printf("Bitte geben Sie ihre Zahl ein\n>");
             do{scanf("%d",&eing);}while(getchar() != '\n');
             set(eing, spieler1);
          }else{
             maxWert();
             set(next, spieler2);
          }//end if
          run++;
       }//end whiile
    }//end void
    
    int minWert(){
       int ermittelt=1000;
       int zugWert;
       int wert;
       int fetzS = 0;
       int fetzW = 0;
       while(fetzS < 6){
          while(fetzW < 7){         
                //Suche mögliche Züge
             if(battleField[fetzS][fetzW] == def){
                    //Simuliere den Zug
                battleField[fetzS][fetzW] = spieler1;
                    //Wenn keine Züge mehr möglich
             if(spielstand(spieler2) == 3 ||spielstand(spieler1)==1)               
                zugWert=bewertungsFunktion(spieler1);                   
             else               
                zugWert=maxWert();
                    //Zugsimulation zurücksetzen
             battleField[fetzS][fetzW]= def;
             if(zugWert<ermittelt)
                ermittelt=zugWert;
             }//end if
             fetzW++;
          }//end while
          fetzW = 0;
          fetzS++;
       }//end while
       return ermittelt;
    }//end minWert
    
    int maxWert(){
       int ermittelt=-1000;
       int zugWert; 
       int fetzW = 0;
       int fetzS = 0;
       while(fetzS < 6){
          while(fetzW < 7){
             if(battleField[fetzS][fetzW] == def){
                battleField[fetzS][fetzW] = spieler2;
                if(spielstand(spieler2) == 3 ||spielstand(spieler2) == 1)               
                   zugWert=bewertungsFunktion(spieler1);                   
                else               
                   zugWert=minWert();
                battleField[fetzS][fetzW] = def;
                if(zugWert>ermittelt){
                   ermittelt=zugWert;
                   next=fetzW; //für das Hauptprogramm (Position des nächsten Zugs)
                }
             }
             fetzW++;
          }//end while
          fetzW = 0;
          fetzS++;
       }//end while
    }//end maxWert
    
    int bewertungsFunktion(char gamer){
       if(spielstand(spieler2)==1)
          return 1;     
       else if(spielstand(spieler1)==1)
          return -1;
       else
          return 0;
    }//end if
    

    als spielfeld habe ich n 2dim array benutzt der human vs human mode funzelt schon praechtig also die dunktion spielstand(char); (rueckgabe 1 = gewonnen 3 = unentschiden)
    den vollstaendigen code findet ihr unter:
    http://www.webspace-kostenlos.com/projektserver/4win.html
    waere sehr dankbar fuer hilfe
    dann schon mal danke im voRaus
    --linuxuser--



  • hi leute...
    kennt sich keiner mit dem minimax aus????
    nochn versuch:
    ich bin jetzt auf einige fehler draufgekommen, die ich gemacht habe.
    hier mein neuer code:

    char battleField[6][7];
    int next = 0;    
    int wert = 0;
    
    void gamerVcomp(){
       int run = 0;
       int eing = 0;
       while(1){
          system("clear");
          if(run % 2 == 0){
             printf("Spieler 1(X) ist an der Reihe...\n");
          }else{
             printf("Spieler 2(O) ist an der Reihe...\n");
          }//end if
          print();
          if(run % 2 == 0){
             printf("Bitte geben Sie ihre Zahl ein\n>");
             do{scanf("%d",&eing);}while(getchar() != '\n');
             set(eing, spieler1);
          }else{
             maxWert();
             set(next, spieler2);
          }//end if
          run++;
       }//end whiile
    }//end void
    
    int minWert(){
       int zugWert = 0;
       int ermittelt=5;
       int fetz = 0;
       while(fetz < 7){       
                //Suche mögliche Züge
          if(isFrei(fetz) == 1){
             //Simuliere den Zug
             set(fetz, spieler1);
             //Wenn keine Züge mehr möglich
             if(spielstand(spieler2) == 3 ||spielstand(spieler1)==1){               
                zugWert=bewertungsFunktion(spieler1);
             }else{              
                zugWert=maxWert();
             }//end if
             //Zugsimulation zurücksetzen
             setBack(fetz);
             if(zugWert<ermittelt)
                ermittelt=zugWert;
          }//end if
          fetz++;
       }//end while
       return ermittelt;
    }//end minWert
    
    int maxWert(){
       int zugWert = 0;
       int ermittelt=-5;
       int fetz = 0;
       while(fetz < 7){
          if(isFrei(fetz) == 1){
             //Simuliere den Zug
             set(fetz, spieler2);
             //Wenn keine Züge mehr möglich
             if(spielstand(spieler2) == 3 ||spielstand(spieler2) == 1){
                zugWert = bewertungsFunktion(spieler2);                   
             }else{
                zugWert = minWert();
             }//end if
             //Zugsimulation zurücksetzen
             setBack(fetz);
             if(zugWert>ermittelt){
                ermittelt=zugWert;
                next = fetz; //für das Hauptprogramm (Position des nächsten Zugs)
             }//end if
          }//end if
          fetz++;
       }//end while
       return ermittelt;
    }//end maxWert
    

    mann ich hoffe ihr koennt mir helfen. ich habe die neue version wieder auf
    [url]mann der kacke webspace funzelt nicht tus bald rauf[/url]gestellt


Anmelden zum Antworten