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