const strings zusammen fassen?



  • Hallo Forum, 🙂

    ich habe ein kleines (unwichtiges aber nerviges) Problem 😕

    erstmal mein Code:

    for (int i = y + 1; i <= b + y; i++)
                        if (piece[x][i] == wPawn || piece[x][i] == wRook || piece[x][i] == wKnight || piece[x][i] == wBishop || piece[x][i] == wQueen || piece[x][i] == wKing)return false;
    

    wie man lesen kann, prüfe ich ob eine stelle, von eine von all diesen const strings besetzt ist. Ich muss das leider öfters ausschreiben, für verschiedene Fälle 😕

    //piece[][] ist ein string array, und wPawn etc. sind const strings

    ich hatte mir sowas überlegt:

    struct white{
    wPawn
    wRook
    wKnight
    etc
    }
    if(piece[][] == white)return false;
    

    aber hatte nicht funktioniert 😕

    danke für alle Antworten 🙂


  • Mod

    Schreib dir eine Funktion, die das prüft, damit du das bloß einmal schreiben musst. Oder besser: Überdenke das Design deiner Datenstrukturen. Wie du bemerkt hast, gibt es da eine große Schwäche, da du eine Information benötigst (Hat der Spielstein Farbe X?), die in deinen momentanen Strukturen nicht einfach zu bekommen ist.

    neuling7 schrieb:

    ich hatte mir sowas überlegt:

    struct white{
    wPawn
    wRook
    wKnight
    etc
    }
    if(piece[][] == white)return false;
    

    aber hatte nicht funktioniert 😕

    Es bietet sich auch an, ein gutes(!) Buch über C++ zu lesen, siehe meine Signatur. Einfach nur raten, was wohl funktionieren könnte, hat mit Programmieren nichts zu tun. Programmieren ist Logik pur, du musst von jedem Zeichen in deinem Programm genau wissen, was es tut und wieso du es gesetzt hast. "Es könnte vielleicht funktionieren" ist kein guter Grund, um ein Zeichen zu setzen.



  • Pack Deine strings in ein Array:

    string pieceArray[] = {"wPawn", "wBishop", "wRook" /*usw*/};
    

    Dann kannst Du in einer inneren Schleife prüfen:

    for (int i = y + 1; i <= b + y; i++)
        for(int ind = 0; ind < anzahlImPieceArray; ++ind)
            if (piece[x][i] == pieceArray(ind))
               return false;
    

Anmelden zum Antworten