zugSetzen()

So, jetzt kommen wir also zur zugSetzen() - Methode. Was muss die machen? Sie muss einen Stein in die Spalte die ihr angegeben wurde fallen lassen, und sicher stellen, dass er an der Richtigen stelle landet

Code

void MainGame::zugSetzen(int Spalte){
    int Reihe = 0;
 
    if(Feld[Spalte][0].Belegt == false){//wenn unterstes Feld Frei
            Feld[Spalte][0].Belegt = true;
            Feld[Spalte][0].Player = PlayersTurn;
            Reihe = 0;
    }else{//wenn nicht,
        if(Feld[Spalte][5].Belegt == true){//und das oberste noch frei ist
            return;
        }
 
        for(int i = 0;i<6;i++){//...freies suchen
            if(Feld[Spalte][i].Belegt == true && Feld[Spalte][i+1].Belegt == false){//wenn eine spalte belegt und die darüber frei
                Feld[Spalte][i+1].Belegt = true;
                Feld[Spalte][i+1].Player = PlayersTurn;
                Reihe = i+1;
                break;
            }
        }
    }
 
    Steine[PlayersTurn]->PositionSetzen((Spalte*80)+10, ((5-Reihe)*80)+10);
    Steine[PlayersTurn]->Anzeigen(true);
 
    GewinnerErmitteln(Reihe, Spalte);
 
    PlayersTurn++;
    PlayersTurn %= 2;
}

Hier wäre es schwer einzelne Codesegmente rauszupicken um diese dann zu erklären. Deshalb erkläre ich die ganzen Schleifen auf einmal. Zuerst wird überprüft, ob das unterste Feld frei ist, wenn es frei ist, dann wird der Stein dort hinein gesetzt. Wenn nicht, dann wird geprüft, ob das oberste frei ist, denn wenn das belegt ist, muss die ganze Spalte belegt sein und dann kann man seinen Zug nicht setzen. Danach werden die Steine angezeigt. Das PlayersTurn sagt an, wer gerade am Zug ist, durch das eins erhöhen und das Modulo 2 wird erreicht, dass immer nur 0 oder 1 drin stehen können. Weil das bedeutet ja PlayersTurn / 2 gib den Rest aus. Und der kann wenn man durch 2 teilt nur 0 oder 1 sein.

zurück weiter zu GewinnerErmitteln