variablenname aus variable
-
hey spacelord!
Also es sind viele gute vorschläge drinn, wobei ich mir einiges anlesen muss. Aber den status der figuren müssen dann die KIs schon selber verwalten... das überlass ich jeder KI selber. Die "engine" die ich auf die Beine stellen will, sollte nur in erster Linie zur kommunikation der Beiden KIs dienen und zusätzlich zur überwachung, das auch alle züge erlaubt sind, und evtl zur visualisierung in form einer ordentlichen zugtabelle, mehr nicht. Und mit dem unsauber magst du recht haben, aber ich hab seit ca einem Jahr nicht mehr "intensiv" C++ gehackt, und da bin ich etwas aus der übung, bzw bin noch auf einem niedigen entwicklungslevel.
aber danke erstmal, ich werd gucken, was und wie ich es umsetze.
-
enum { schwarz, weiß, nfarbe } farbe; enum { bauer, turm, springer, laeufer, dame, koenig, nfigur } figur; position figuren[nfarbe][nfigur][8];
das bisschen overhead für die unbenutzten felder is glaub nich nennenswert
-
Original erstellt von Mr. N:
**```cpp
enum { schwarz, weiß, nfarbe } farbe;
enum { bauer, turm, springer, laeufer, dame, koenig, nfigur } figur;
position figuren[nfarbe][nfigur][8];Hmm, Dein König heißt "koenig" und weiß heißt "weiß"? Nenn es lieber "weisz"!
Ganz verstehe ich den Code auch nicht, Schach hat keine 2*6*8 Spielfiguren, oder? Die würden doch gar nicht auf ein 8*8-Spielbrett passen!
-
Original erstellt von nman:
Ganz verstehe ich den Code auch nicht, Schach hat keine 2*6*8 Spielfiguren, oder? Die würden doch gar nicht auf ein 8*8-Spielbrett passen![/QB]Er hat ja auch gesagt, dass der Overhead für die unbenutzten Felder nicht nennenswert ist, er hat also schon beachtet dass das Feld zu groß ist.
-
Ich finde die Lösung trotzdem ziemlich unlogisch/ hässlich, wenn Prophets Framework auch überprüfen soll dass die Züge korrekt ablaufen wäre IMO eine Figurenklasse von der die einzelnen Figuren abgeleitet werden das klügste, so dass man dann auch so etwas machen könnte (Pseudocode):
try { Figur.ziehe(x, y); } catch(ungueltigerZug) { std::cout << "Der Zug von (" << Figur.getX() << ", " << Figur.getY << ") nach (" x << ", " << y << ") ist nicht erlaubt, moegliche Alternativen:"; Figur.zeigeZuege(); }
edit: Prophet, Deine Lösung ist (bis auf die std::map-Geschichte die ich einfach nicht so ganz verstehe) nicht so schlimm, sie sieht einfach ziemlich stark nach strukturierter Programmierung und nicht nach objektorientierter aus, entscheide Du selbst was Du machen möchtest.
[ Dieser Beitrag wurde am 06.04.2003 um 01:27 Uhr von nman editiert. ]
-
ok, nochmal zu der map...
ich versuchs nochmal deutlich zu machen(stützt sich auf die vorherigen zeilen):
ein zug sollte so ablaufen:farbe_am_zug = "weiss"; cin >> eingabe; //eingabe ist zb b a2 a4 //ohne die map funktion viele fallunterscheidungen: if (farbe_am_zug = "weiss") { swich(1._zeichen_des_eingegebenen_strings) //hier "b" für bauer { case "b" {...}; cace "k" {...}; }; else {...}; // gekürzt währe das(mithilfe der struktur von figuren): farbe_am_zug.1_zeichen_der_eingabe[evtl_noch_arraynummer] = a4;
so hab ich alles in einer zeile ohne lästige fallunterscheidungen.
oder bin ich so umständlich dass ich den einfachen weg nicht sehe?PS sorry, wenn ich frage, aber warum ist oop besser als strukturiertes und wie sieht oop aus?
-
Für ein Schachprogramm sollte man aber eine effiziente Lösung wählen, z.B.
enum Figur {SBauer=-6, STurm=-5, SSpringer=-4, SLaeufer=-3, SDame=-2, SKoenig=-1, Leer=0, WKoenig=1, ...}; typedef Figur[8][8] Schachbrett;
-
hi! also das mit der enum funktion ist ne gute idee, aber ich verstehe nicht ganz warum ein mehrdimensionales array aus den schachfiguren, die nur 32 sind als schachbrett definiert werden, welches natürlich 8*8 felder hat, aber mit den figuren doch erstmal nix zutun-;
-
aber ich verstehe nicht ganz warum ein mehrdimensionales array aus den schachfiguren, die nur 32 sind als schachbrett definiert werden, welches natürlich 8*8 felder hat, aber mit den figuren doch erstmal nix zutun-;
Nein, aber das ist ja wohl das Einzige, wofür du Figuren verwenden wirst: Um sie auf ein Brett zu setzen.
-
Ja, Norondions Lösung sieht schon um einiges besser aus - ähnlich hab ich mir das auch vorgestellt, auch wenn ich es folgendermaßen abkürzen würde:
enum Figur {SBauer=-6, STurm, SSpringer, SLaeufer, SDame, SKoenig, Leer, WKoenig, ...};
Prophet: Wenn auf einem Feld keine Figur steht dann machst Du einfach
aktuellesSchachbrett[x][y]=Leer;