Schiffe versenken



  • Hallo Leute,
    meine aufgabe ist schiffe versenken und wo ich bei algorithmus nicht gut bin habe ich einpaar verständnisschwierigkeiten.wir sind bei stof Felder, Zeiger, Referenzen, dynamischer Speicher
    da ist meine angabe Schreiben Sie ein Programm, mit dem man "Schiffe versenken" spielen kann. Es soll möglich sein, die Position der Schiffe manuell festzulegen (besonders Eifrige können auch versuchen, die Positionierung automatisch durchzuführen, etwa unter Verwendung von Zufallszahlen; dazu können Sie nach den Funktionen rand und randomize googeln). Anschließend kann durch Angabe der Koordinaten auf ein Feld geschossen werden. Der Computer soll die üblichen Meldungen ("Wasser", "Treffer", "Versenkt") liefern und erkennen, wenn das Spiel beendet (die gesamte Flotte vernichtet) ist.

    ich habe mir gedacht dass ich zuerst spielfeld definiere z.b int spielfeld[10][10]
    int schif[x1][y1] und int schuss[x][y] und dann wurde ich irgendwie spielfeld mit for schleife durchlaufen und wenn die zahlen gleich sind x1=x und y1=y treffer und wenn nicht wasser. ich denke nur dass ich nur ein schiff setze und falls ich das schaffe wurde ich dann erweitern

    ich bin mir sicher dass ihr bessere ideen habt
    danke vielmal



  • Hast du auch eine Frage? Dann solltest du sie stellen.



  • ich wollte fragen, ob der vorgang richtig ist oder kompletter blödsinn und in welche richtung ich denken sollte.
    danke vielmals



  • nata schrieb:

    ich wollte fragen, ob der vorgang richtig ist oder kompletter blödsinn und in welche richtung ich denken sollte.

    Zuerst solltest du Kandidaten für Klassen, deren Attribute und Operationen identifizieren. Das heißt, falls das ein objektorientiertes Programm werden soll.



  • nata schrieb:

    ..wir sind bei Stoff Felder, Zeiger, Referenzen, dynamischer Speicher..

    OOP habe ich hier nicht gelesen, darum scheiden Klassen wahrscheinlich aus. Die braucht man auch erst nicht unbedingt. Tu dir aber einen Gefallen, schreibe nicht spielfeld[10][10]; , sondern erstmal

    const int xdim = 10;
    const int ydim = 10;
    int spielfeld[xdim][ydim];
    

    Der Test, ob eine Koordinate innerhalb des Spielfelds liegt, kann nun gegen die Konstanten getestet werden.

    int main()
    {
      const int xdim = 10;
      const int ydim = 10;
      int spielfeld[xdim][ydim]={0};
      init(spielfeld,xdim,ydim);
      mainloop(spielfeld,xdim,ydim);
    }
    

    So könnte die main aussehen. init(..) führt das Setzen der Schiffe aus, mainloop(..) ist das "Herzstück". Später könnte man noch alloc(..) als erstes ausführen und dynamisch Speicher für das Spielfeld anfordern.
    int schiff[x1][y1] und int schuss[x][y] braucht man nicht mehr. Der Wert spielfeld[x][y] sollte Aufschluss darüber geben, was an dieser Stelle ist:
    1 Spieler 1, 2 Spieler 2, ..., 0 Wasser.
    Dies kann man beliebig verkomplizieren, bspw. den Typ des Schiffes noch mitspeichern.

    Edit: Man braucht natürlich pro Spieler ein eigenes Spielfeld, dies könnte mit einem std::vector gemacht werden, der Auswertungsfunktion wird dann einfach das aktuelle Spielfeld übergeben.


Anmelden zum Antworten