# Schiffe versenken für Einsteiger?



## Marimi (11. November 2010)

Hallo Leute,

ich bin gerade am grübeln wie ich am besten Schiffe versenken programmieren kann ohne Funktionen zu verwenden  . Laut Lektor sollte das nämlich möglich sein. Wie geh eich denn da am besten vor brauche ich dann zwei dimensionale arrays? Ich bin nicht darauf aus den profis hier den codes für meine hausaufgaben zu entlocken sondern ich brauche hilfe beim Ansatz.

Meine Idee die Schiffe betreffend:
Das Schlachtfeld ist ja 5 felder lang, wenn ich für das teil ein array mache was 5 felder lang is sowas wie int s[5] und den dann mit so nem pointer verbinde könnte das klappen um so ein schiff zu setzen? 

Lieben Gruß und danke im vorraus 
Marimi


----------



## Thomasio (12. November 2010)

Da brauchst du schon 2 dimensionale arrays, denn du brauchst ja nicht nur 2 Achsen im Feld sondern auch noch den Schiffstyp der auf diesem Feld steht, sofern du nicht lauter Mini-Schiffe machen willst also in abstrakt

int [länge][höhe] = schiffstyp;


----------



## Marimi (12. November 2010)

Wenn ich das richtig verstehe wäre dann das Schlachtschiff mit 5Käschten länge 
int [5][1] = Schlachtschiff

und das spielfeld int [10][10] {0,1,2,3,4,5,6,7,8,9} {'A','B',...'J'} konstruierbar oder? ok leuchtet mir ein ) ich bin begeistert.

Wenn ich jetzt meinem Schlachtschiff eine Position geben möchte in der ausführung des programms zb. A3 setzt er mir das jetzt von A3-A8 richtig hin wenn ich das so wie oben definiere?


----------



## Thomasio (12. November 2010)

Nicht wirklich.
Wie sollte "er" denn etwas setzen? Wer ist denn "er"? Das bist doch du, bzw. dein Programm.
Du musst schon sämtliche Daten selber verwalten.
Wenn du z.B. ein Schiff mit 5 Feldern Grösse von A3 nach A8 setzen willst, und Schiffstyp wäre sinnigerweise 5, müsstest du sowas machen:

int Felder [10][10] = {0};

Felder [2][0] = 5;
Felder [3][0] = 5;
Felder [4][0] = 5;
Felder [5][0] = 5;
Felder [6][0] = 5;

Von A3 nach E3 entsprechend

Felder [2][0] = 5;
Felder [2][1] = 5;
Felder [2][2] = 5;
Felder [2][3] = 5;
Felder [2][4] = 5;

Damit fehlen dir aber im Spiel immer noch einige Daten, z.B. hast du so noch keine Angaben, wie viele Schiffe von welchen Typen es überhaupt gibt, ob ein Schiff noch gar nicht getroffen wurde, angeschossen ist, oder komplett versenkt wurde, und ohne diese Info kannst du im Spiel nicht feststellen, wann es beendet ist und wer gewonnen hat.

Je nachdem, wie simpel das Programm gehalten werden soll, kannst du einiges tricksen, z.B. Positionen der Schiffe fest vorgeben und getroffene Felder einfach zu Wasser machen

Felder[1][2] = 0;

Dann kannst du nach jedem Treffer mit einer Schleife einfach alle Felder durchgehen und wenn alles Wasser ist, dann Game over, aber wenn das Spiel auch nur ein kleines bischen Sinn haben soll (ausser "schreibe ein Programm ohne Funktionen") dann musst du noch einiges mehr an statischen oder globalen Daten einbauen und verwalten.


----------



## Marimi (14. November 2010)

Hallöchen,

ich hab den teil des codes für das spielfeld gefunden, der auf meinen ansatz passt. Jetzt muss ich nur noch den Teil machen wo ich die Schiffe setzen kann und beschießen kann. Ich soll die Schiffe dann manuell festlegen können und wenn ich drauf ballere dann soll halt wasser, treffer, usw. kommen. Das Problem mit Funktionen ist: ich versteh sie (noch) nicht. 

Kann mir vielleicht wer helfen den zweiten Teil zu machen, ich verzweifle hier noch dabei. Ich weiß das ich dazu eine Schleife brauche wie etwa diese switch-schleife.

Lieben Gruß 
Marimi

PS: Ich danke der Community vielmals für diese hilfsbereitschaft  man findet selten so nette Leute die einem so nett helfen.


----------

