Klassendesign - Wie elegant Typ einer abgeleiteten Klasse bestimmen



  • Hi zusammen

    Ich programmiere im Moment den "Logikteil" eines Schachspiels für 2 Spieler (ohne KI), mein Aufbau sieht folgendermassen aus:

    Eine Äussere Klasse "Chess", welche das äusere Interface implementiert.
    Darin befindet sich eine Basisklasse "Figure" und davon abgeleitet die verschiedenen Figuren Bauer, König usw. usw.
    Die Board-Representation habe ich über ein 8x8-Array aus structs gelöst. Diese Structs enthalten jeweils einen int um anzuzeigen ob sich eine schwarze, weisse oder keine Figur darauf befindet, sowie einen Figure-Pointer, der entweder NULL ist (keine Figur drauf) oder auf ein Objekt der Klasse Bauer, Läufer... was auch immer, zeigt.

    Nun hat jeder Figurtyp eine Methode bool move(field, x, y) die true zurück gibt, wenn der Zug gemacht werden konnte, d.h. zulässig ist. Wenn sich am Zielort nun aber z.B. der gegnerische König befindet, ist das Resultat naturgemäss ein anderes, als wenn dort ein Bauer steht... 😃

    Die Frage ist jetzt, wie ich rausfinden soll, was dort für eine Figur steht. RTTI ist ja anscheinend nicht gern gesehen. Ich könnte eine Methode whichType()implementieren, die zurückgibt, was für eine Figur es ist, oder ich könnte in der Board-Representation (also in meinem Array) zusätzlich noch den Typ der Figur festhalten....Was ist am besten/elegantesten?

    Oder sollte ich mein gesamtes Design überarbeiten? Wenn ja wie? Für Vorschläge jeder Art wäre ich euch sehr verbunden...



  • implementiere doch für jede figur eine funktion die prüft, ob die figur geschlagen werden kann/sollte.

    Dann rufst du die funktion von der figur des zielfeldes auf

    dafür müssen alle fuguren in einem 2D array aus zeiger gespeichert werden

    bool move(int x, int y)
    {
        // .....
        chessfield[x][y]->check(dies, das, blub);
    }
    


  • double dispatch (google)



  • @dispatch:

    Sieht gut aus, das ist wohl in etwa was ich suche...danke 👍


Anmelden zum Antworten