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

-
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;