Frage zu OOP



  • Guten Tag Seppj,
    Ersteinmal danke für den Aufschlussreichen Beitrag.Ich komm von ner anderen Sprache und dort wird immer von Vererbung gepredigt(wie auch immer).Auch richtig erkannt hast du dass ich Anfänger in C++ bin.

    Welche Attribute braucht dein Schiff überhaupt?

    Gut das wären Größe,Name,Koordinaten,vielleicht auch welche Teile schon zerstört wurden/noch aktiv sind.


  • Mod

    Ryko schrieb:

    Ich komm von ner anderen Sprache und dort wird immer von Vererbung gepredigt(wie auch immer).

    Java, oder? Ja, in Java denkt man anders als in C++. Da muss man das Umdenken lernen, wenn man wechselt. Ist oft schwer, weil das, was in Java gut und üblich ist, geht auch irgendwie in C++ hinzufrickeln, aber es ist im Ergebnis nicht das, was in C++ gut und üblich ist 🙂

    Welche Attribute braucht dein Schiff überhaupt?

    Gut das wären Größe,Name,Koordinaten,vielleicht auch welche Teile schon zerstört wurden/noch aktiv sind.

    Klingt gut.



  • Die Koordinaten im Schiff mit zu speichern hat zwar Vorteile aber auch einen großen Nachteil. Du musst bei jedem Schuss im Grid überprüfen, ob dort ein Schiff liegt und du musst in Deinen Schiffen überprüfen, ob eines der Schiffe auf der beschossenen Koordinate liegt, das kann schnell zu Inkonsistenz führen.

    Eine andere Möglichkeit ist, einen

    std::vector<Ship>
    

    anzulegen und ein Schiff aus dem Array löschen, sobald es zerstört ist und überhaupt kein Grid verwenden. Bei einem Schuss gehst du deinen Vektor durch und überprüfst, ob ein Schiff getroffen wurde.

    Eine andere Möglichkeit wäre, im Grid einen Verweiß auf dein Schiff anzulegen und darüber zu überprüfen.



  • Die Frage ist, ob es Player vs CPU gibt, denn die KI wird dann wahrscheinlich ein Grid (oder eine map o.ä.) benötigen, um die bereits befeuerten Stellen zu speichern.

    Die Klasse Ship kann ja eine Methode isOn anbieten, die prüft, ob es auf einer Koordinate ist.


  • Mod

    Sone schrieb:

    Die Frage ist, ob es Player vs CPU gibt, denn die KI wird dann wahrscheinlich ein Grid (oder eine map o.ä.) benötigen, um die bereits befeuerten Stellen zu speichern.

    Außerdem kommt es auch gut, wenn der Spieler selbst sehen kann, ob ein Feld schon beschossen wurde. Auf das Grid würde ich nicht verzichten. Wenn überhaupt, dann eventuelle auf die Schiffsklasse.

    Die Klasse Ship kann ja eine Methode isOn anbieten, die prüft, ob es auf einer Koordinate ist.

    Das ist doch sehr umständlich. Ein besetztes Feld soll einen Verweis auf das Schiff haben, das auf dem Feld sitzt.



  • SeppJ schrieb:

    Die Klasse Ship kann ja eine Methode isOn anbieten, die prüft, ob es auf einer Koordinate ist.

    Das ist doch sehr umständlich. Ein besetztes Feld soll einen Verweis auf das Schiff haben, das auf dem Feld sitzt.

    Nein, nein! Das war für den Fall, dass es kein Grid gibt.



  • Guten Tag,
    Entschuldigung das ich mich erst so spät wieder melde,habe zur Zeit en bisschen was um die Ohren.

    Ich hab mich jetzt gegen die Ship Klasse entschieden,da diese imo nicht nötig ist.
    Für den Vektor der das Spielfeld darstellen soll,habe ich nun ein enum erstellt.

    enum cell
    {
    	nothing,
    	ship,
    	destroyed
    };
    

    Um mir das mit den Koordinaten zu vereinfachen hab ich ne structure erstellt, die die x und y Koordinate beinhaltet.Diese habe ich ausserhalb der Klasse in der Header Datei definiert.
    In der Klasse habe ich momentan eine Funktion mit folgender Defintion:

    void SetHorizontalShip(int size,coordinates startPos,coordinates endPos);
    

    Im cpp File meldet die IntelliSense von Vs nun folgenden Fehler:

    1 IntelliSense: Die Deklaration ist nicht mit ""void Grid::SetHorizontalShip(int size, <error-type> startPos, <error-type> endPos)" (deklariert in Zeile 10 von "*\Grid.h")" kompatibel.

    Ich versteh nicht wieso die structure nicht als Typ erkannt wird.Könnt ihr mir sagen wo mein Fehler liegt?
    Schönen Tag noch und genießt das schöne Wetter solange es noch da ist 🙂
    Mfg Ryko



  • Hast du "coordinates.h" in "Grid.h" eingebunden? Wenn du auf die Schiffsklasse verzichtest, dann hast du das Problem, dass der Spieler ohne Weiteres nicht wissen kann, ob er das Schiff nur teilweise zerstört oder schon versenkt hat.



  • Richtig vllt wäre die Schiffklasse dann ja doch sinvoll.Ich muss da nochmal genauer drüberdenken. Die Coordinates structure habe ich einfach nur in der Grid.h Deklariert,da sie nur 2 Member hat.



  • Weiß die Funktion denn auch von ccordinates?


Anmelden zum Antworten