1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

schifferl versenken in c++ programmieren, hilfe! :b

  • LaraLustich
  • 11. November 2010 um 10:52
  • Unerledigt
  • LaraLustich
    3
    LaraLustich
    Mitglied
    Punkte
    60
    Beiträge
    7
    • 11. November 2010 um 10:52
    • #1

    hallo.. ich habe erst dieses semester begonnen programmieren zu lernen und ich arbeite auch mit und kenne die grundlegendenden dinge die man dazu braucht aber ich tu mir schwer mit dem ansatz bzw. umsetzen..
    jetzt haben wir die hü schifferl versenken zu programmieren und ich hab mich schon überall in unseren skripten durchgesucht..hab aber keinen plan wie ich das angehn soll..
    könnte mir jmd helfen bzw tipps o iwas geben?

    liegrü.

  • Schakal
    9
    Schakal
    Mitglied
    Reaktionen
    5
    Punkte
    780
    Beiträge
    152
    • 11. November 2010 um 11:11
    • #2

    Erzähl mal wie das Ganze aufgebaut sein muss Feldgröße, User Interface etc. Dann kann man dir Tipps geben.

    mfg Schakal

  • LaraLustich
    3
    LaraLustich
    Mitglied
    Punkte
    60
    Beiträge
    7
    • 11. November 2010 um 15:46
    • #3

    Aufgabe lautet: 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.

  • mtoman
    13
    mtoman
    Mitglied
    Reaktionen
    47
    Punkte
    1.767
    Beiträge
    331
    • 11. November 2010 um 16:09
    • #4

    Du kannst dir mal überlegen, welche Datenstruktur du haben möchtest.
    Die Frage ist auch, ob es Schiffe in verschiedenen Größen etc. geben soll.

    Zwei relativ simple Vorgehensweisen wären:

    a)
    Leg dir ein 2-dimensionales Array an (zb. char[sizex][sizey]) und setz alles auf 0.
    Dann such dir mit rand zufällige x und y koordination von 0 bis sizex bzw. sizey.
    Dort mach dann array[x][y] = 1 für ein Schiff. Das halt in einer Schleife mit sovielen Schiffen wie du möchtest (musst nur schauen, dass du nicht zweimal die selbe Koordinate bekommst).

    Dann lass dir (wohl auch in einer Schleife) vom Benutzer die Koordinaten inx, iny eingeben.
    Dann sowas wie

    if( array[inx][iny] == 1 ) { <Treffer>; --ships; } else { <daneben> }
    if( ships < 1 ) { <geschafft> }

    Bissl Rundherumwerk und fertig ist die minimalistische Variante :).
    Allerdings ist das natürlich ziemlich.. saumäßig, aber üblicherweise gehts bei Programmierübungen ja nicht darum, ein Wunderwerk des Software Engineerings zu entwerfen ;). Das kannst sogar theoretisch alles direkt ins main klatschen.

    b)
    Wenns objektorientierter sein soll kannst natürlich an eine Klasse für das Spielfeld denken und eine für ein Schiff.
    Dann könntest z.B. das Spielfeld aufbauen aus einer Datenstruktur mit Pointern auf die Schiffobjekte (oder auf NULL oder auf sonst was).
    Du könntest auch nur Schiffobjekte anlegen, in jedem Objekt dessen Koordinaten speichern und dann beim Schießen alle Schiffe durchgehen und die Koordinaten vergleichen.
    Du kannst auch Variante a) in eine Klasse einpacken ala
    class Ocean {
    // array

    public:

    Ocean( int sizex, int sizey );
    void generateShips( int num );
    bool shipAt( int x, int y );
    //- was weiß ich was man sich alles einfallen lassen könnte..
    };

    etc...
    im Prinzip kann man das ja wie immer endlos abstrahieren, verfeinern, verbessern etc.
    Vermutlich reicht aber die simple Array-Variante (ausser es geht darum, ein ausgefeiltes objektorientiertes Design hinzuklatschen)

  • spinball
    11
    spinball
    Mitglied
    Reaktionen
    67
    Punkte
    1.192
    Beiträge
    223
    • 11. November 2010 um 16:16
    • #5

    Ein 2D Spielfeld lässt sich am besten mit einem zweidimensionalen Array darstellen. Einzelne Felder enthalten die Zahlen 0 (Wasser), 1 (Schiff) oder 2 (Schiff und getroffen). Die Anweisungen des Spielers liest du von der Standardeingabe ein. Sinnvollerweise sollte es drei Kommandos geben:

    set x y
    - erstellt ein neues Schiff auf den Koordinaten x y
    - Fehlermeldung, falls dort schon eines ist

    hit x y
    - bam oida
    - Meldung, falls alle Schiffe versenkt wurden (keine 1 mehr im Array)

    exit
    - beendet das Programm
    - Meldung an den Spieler, wie viele Schiffe er verpasst hat

    Viel Erfolg

  • LaraLustich
    3
    LaraLustich
    Mitglied
    Punkte
    60
    Beiträge
    7
    • 11. November 2010 um 18:44
    • #6

    hejj.danke..ich werds mal versuchen..
    und werd ma allergrößte mühe geben..aber erst am we..
    ich frag einfach nochmal falls ich auf was stoß dass mich ausn konzept wirft.. (:

    und danke für die tolle antwort! (:

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung