====== Gewinner ermitteln ====== So weiter gehts mit dem Gewinner. Was müssen wir machen? Wir müssen überprüfen, ob jemand 4 Steine in einer Reihe hat, und müssen dem Programm das mitteilen. Aber halt. Wir müssen nicht das ganze Feld überprüfen, sondern wir können von dem Stein ausgehen, der als letztes gelegt wurde, da die anderen Steine schlecht ne 4er Reihe bilden können. ===== Der Code ===== void MainGame::GewinnerErmitteln(int LetzterSteinReihe, int LetzterSteinSpalte){ int Reihe = 0; int Spalte = 0; int inReihe = 1; //waagerecht for(int i = -3;i < 4;i++){ if( Feld[LetzterSteinSpalte+i][LetzterSteinReihe].Player==PlayersTurn && Feld[LetzterSteinSpalte+i+1][LetzterSteinReihe].Player==PlayersTurn){ inReihe++; } } if(inReihe >= 4){ Gewinner = PlayersTurn; return; } inReihe = 1; //Vertical for(int i = -3;i < 4;i++){ if( Feld[LetzterSteinSpalte][LetzterSteinReihe+i].Player==PlayersTurn && Feld[LetzterSteinSpalte][LetzterSteinReihe+i+1].Player==PlayersTurn){ inReihe++; } } if(inReihe >= 4){ Gewinner = PlayersTurn; return; } inReihe = 1; //lu-ro for(int i = -3;i < 4;i++){ if( Feld[LetzterSteinSpalte+i][LetzterSteinReihe+i].Player==PlayersTurn && Feld[LetzterSteinSpalte+i+1][LetzterSteinReihe+i+1].Player==PlayersTurn){ inReihe++; } } if(inReihe >= 4){ Gewinner = PlayersTurn; return; } inReihe = 1; //lo-ru for(int i = -3;i < 4;i++){ if( Feld[LetzterSteinSpalte+i][LetzterSteinReihe-i].Player==PlayersTurn && Feld[LetzterSteinSpalte+i+1][LetzterSteinReihe-i-1].Player==PlayersTurn){ inReihe++; } } if(inReihe >= 4){ Gewinner = PlayersTurn; return; } //unentschieden inReihe = 0; for(Reihe = 0; Reihe < 6;Reihe++){ for(Spalte = 0;Spalte < 7;Spalte++){ if(Feld[Spalte][Reihe].Belegt == true){ inReihe++; } else{ inReihe--; } } } if(inReihe == 42){ Gewinner = UNENTSCHIEDEN; return; } } Genau das oben gesagte wird hier gemacht. Aber wie? Zuerst wird das ganze in 4 Durchgänge eingeteilt, zuerst überprüfen wir, ob es in der Waagerechten 4 in einer Reihe gibt. Wir gehen dazu von -3 bis +3 um den Stein drum rum. Wenn ein Stein, sowie sein Nachbar die selbe Farbe haben, erhöhen wir den Zähler, Wenn der Zähler auf 4 ist, haben wir ne vollständige Kette. Das selbe Prinzip wiederholt sich für die anderen Richtungen(Vertikal, Links unten nach rechts oben, und links oben nach rechts unten) Natürlich könnte es auch ein Unentschieden geben, das wird ermittelt, in dem Geschaut wird, ob das Feld Voll ist, nachdem kein Sieger festgestellt werden konnte. [[allegro:game:setstone|zurück]] [[allegro:game:showwinner|weiter zu gewinnerAusgeben()]]