Spielfeld Auswerten



  • So ich programmiere kleine Spiel in Konsole noch. Nun will ich das Spielfeld abfragen ob schon jemand Gewonnen hat.

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main ()
    {
        char spielfeld[5][5] =  {
                                { 'X','O','X','O','X' },
                                { 'X','O','X','O','O' },
                                { 'X','X','O','X','X' },
                                { 'O','O','O','O','O' },
                                { 'X','O','X','O','X' }
                                };
        string feldsuche[5];
        string player_1 ("XXXXX");
        string player_2 ("OOOOO");
        int i;
    
        for (int x = 0; x <= 4; x++)
        {
            for (int y = 0; y <= 4; y++)
            {
                feldsuche[x] += spielfeld[x][y];
            }
            i = 0;
            string::size_type i = feldsuche[x].find(player_1);
            if (i <= 4 )
            {
                cout <<"Gefunden! " << i << " -> ";
            }
            else
            {
                cout <<"Nicht Gefunden! " << i << " -> ";
            }
            cout << feldsuche[x];
            cout << endl;
        }
    }
    

    Das habe ich eben mal so Test weise geschrieben. Vertikal und Horizontal geht das ja noch. Aber wie geh ich das besten an für die Diagonale.

    das sollte dann ja so aussehen (nur Beispiel der Zeichenkette).

    X
    XX
    XXX
    XXXX
    XXXXX
    XXXX
    XXX
    XX
    X

    aber wie kann ich das Umsetzen?

    Oder hat wer noch anderen Trick oder Kniff wie ich das lösen kann?

    Thx schon mal für Hilfe.

    Mfg Isi



  • ich weiß zwar nicht, was für ein spiel du meinst, aber die diagonale in einem array (welches am besten quadratisch ist, ist es aber in deinem fall):

    for(int x = 0; x < 5; ++x)
    {
     spielfeld[x][x];
    }
    

    das liefert dier im quadratischen fall die diagonale, ich weiß aber echt nicht, was du genau willst



  • abgesehen davon suchst du nur nach den waagerechten 5ern. die senkrechten fehlen auch noch.



  • Ja weiß. Es soll 4 Gewinnt werden. Ja die senkrechten sind ja nicht mein Problem.

    thx 🙂



  • Das Standard-"Vier Gewinnt" hat aber 7 Spalten mit je 6 Zeilen.

    Außerdem ist dein Vergleichsalogrithmus falsch.
    Du mußt eigentlich nur für den zuletzt gesetzten Chip überprüfen, ob von dort ausgehend in die 4 Richtungen (horizontal, vertikal, 2*diagonal) mind. 4 Chips derselben Farbe (bei dir X oder O) vorkommen.
    Je Richtung mußt du dann erst in die eine Richtung, dann in die gegenüberliegende Richtung gehen und beide Werte aufaddieren.


Anmelden zum Antworten