Frage von KleinerFetzen, 42

C++ Schiffe versenken Programm (Verbessert)?

Ich habe mein Programm etwas überarbeitet, jetzt sieds so aus:

include

using namespace std; int main () { int i,n,a,b,c,d,e,f,g; int S[10][10]= {0};

cout << "Setzen das erste Schiff(2 Felder):";
cin >> a >>b;
S[a][b] = 1;
cout << "Setzen das zweite Schiff(2Felder):"<< endl;
cin >> c>>d;
S[c][d] = 1 ;//Schiff 2
cout<< "Setzen das dritte Schiff(2 Felder):"<< endl;
cin >> e >> g;
S[e][g]=1 ;//Schiff 3


  while (S[a][b]!=0||S[c][d]!=0||S[e][g]!=0){
        cout << "Schiessen sie nun auf ein Feld: ";
        cin >> f;
        if(f==a ||f==b||f==c||f==d||f==e||f==g) cout << "TREFFER";
        else cout << "WASSER";
            S[f][f] = 0;
            }

cout << "Spiel Vorbei";

return 0;

}

So ganz tuts aber noch immer nicht

Antwort
von deepthought, 13

Also soweit ich deinen Code verstanden hab, hast du ein 2-Dimensionales Array "S"  auf dem 3 Schiffe gesetzt werden sollen.

Dein Gewässer (Array) ist 10*10 groß. Du möchtest Schiffe die 2 Felder groß sind setzen, und zwar dorthin wo der Benutzer es sagt. Wird ein Schiff gesetzt wird das entsprechende Feld im Array 1 gesetzt.

Später soll ein Spieler auf ein Feld seiner Wahl schießen und bei einem Treffer wird das Feld wieder 0 gesetzt.

Ebenfalls werden "Treffer"(bei einem Treffer) und "Wasser" (bei einem nichttreffer) ausgegeben.

Postest du ein Programm, bitte schreib immer was dieses tuen soll!

1) Als aller erstes möchte ich dir einen Style-Guide ans Herz legen. Du machst dir, und alle die dir helfen wollen nur eine Freude damit. Das hier z.B. ist ziehmlich gut: https://google.github.io/styleguide/cppguide.html

2) Das Array legst du richtig an, nur die Schiffe nicht wirklich. Deine Schiffe sind jeweils nur ein Feld groß. In einem 2-Dimensionalem Feld haben alle Felder zwei Koordinaten-Komponente. Um ein Feld zu addresieren brauchst du also eine Adresse mit zwei Teilen. X und Y Wert.

Sobald du nach der Position vom ersten Schiff fragst, lässt du den Nutzer a und b eingeben. Danach setzt du das eine (und nur eins) Feld (a,b) = 1a ist hier x und b ist hier y.

Das selbe tust du auch für Schiff 2 und 3.

3) Du lässt den Spieler nicht wirklich auf ein Feld schießen. Selbes Problem: Du frägst nach einer eingabe "f". Auf was soll die zeigen? Du musst dich nochmal richtig mit der Logik von Feldern auseinander setzen. Was helfen kann, skiziere dir das Spielfeld und den Programmablauf auf ein Blatt Papier.

4) Deine while-Schleife ist eine Unendlich Schleife. Die Bedingung ist, das die Felder ungleich 0 ist. Aber sie werden bei Treffern nie 0 gesetzt.

5) Bei deinem Else in der while hast du wieder ein grundlegendes Problem mit Arrays.

All in all: Viele grundlegende-logische Fehler. Skizziere dir dein Programm auf Papier. Versuch mal erst ein Pseudo-Code zu schreiben und dann fang wieder von 0 an.

Viel Erfolg und viel Spaß!

Antwort
von EightSix, 23

Du fragst ja beim Schuss wieder nur einen Wert ab. Wie soll denn der zugeordnet werden auf einem 2 dimensionalen Feld? Dadurch ist die ganze If Abfrage danach auch falsch - wozu brauchst du in deinem Code denn ein Array wenn du dies nirgends abfragst?

Antwort
von VBHHerzog, 15

also erstmal muss ich sagen das du den code besser komplett in den blauen bereich hättet setzen können, weil auf das zusammen copy&pasten hab ich kein bock^^


2. würd ich mitm debugger gucken wo was schiefläuft

3. was funktioniert denn nicht wie es soll?


ich verstehe nicht wozu du ein array dekladierst, aber das garnicht benötigst?


Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten