Hi,
der Einstieg von slawaweis ist da genau der richtige: Brainstorming.
Ich kann dir ja mal meine Vorgehensweise wiedergeben, bezogen auf Schiffe versenken:
Zuerstmal musst du dir Gedanken über das Projekt machen, was genau sind die Anforderungen?
-Soll es eine Multiplayer-Anwendung per Netzwerk werden?
-Soll ein CPU-Gegner eingebaut werden?
-Soll es Spielstatistiken geben?
-Wie soll die Oberfläche aussehen (falls es eine gibt)?
Weißt du nun was genau benötigt wird kannst du dir Gedanken über das Datenmodell machen:
-Es gibt: Spieler, das Schiffe-Feld, Schiffe, eine Vorbereitungs und eine Spielphase.
-Vorbereitungsphase: Das Feld wird erstellt
-Spielphase: Es wird auf das Feld geschossen.
Hier haben wir schon den ersten Punkt: Das Feld. Das Feld ist eine x*x tiles-karte die folgende Informationen pro Feld kennen muss:
-Koordinaten des Feldes
-Wasser oder Schiff (falls ja, welches Schiff)
-zusätzlich bietet es sich sicherlich an zu speichern ob schon auf das Feld geschossen wurde.
Das Feld könnte also einen status haben (Wasser_frei, Wasser_beschossen, Schiff_frei, Schiff_beschossen) und gleichzeitig Speichern zu welchem Schiff es gehört.
Somit kommen wir zum Schiff-Objekt.
Ein Schiff besteht aus x Feldern, jedes davon kann zerstört sein. Warum also nicht den Status des Schiffes in ein Array packen? [0]ist das vorderteil [x-1] ist das hinterteil.
Somit haben wir schon unser Schiff-Objekt, ein Name rundet das ganze ab.
Das Spiel selbst muss natürlich auch irgendwie verwaltet werden. Diese Verwaltungsklasse muss folgendes leisten:
Sie muss beide Felder kennen,
sie muss evtl Statistiken speichern oder das Spiel neu starten.
Hat man sich grob Gedanken über die Klassen gemacht geht man die Abläufe durch, schnell wird man merken, das man noch viel vergessen hat:
Bsp: ein Spieler klickt auf eine Zelle im Feld seines Gegners (in dem er die Schiffe nicht sehen darf):
-Die Gui muss den Klick an die Game-Verwaltung senden (Listener/Eventhandling?)
-Das Game muss das Feld des Gegners an der Stelle prüfen.
-Hat der Spieler schon an die Stelle geschossen passiert garnichts
-War die Stelle Wasser gibt es eine Welle

der Gegner ist dran, weitere Klicks des Spielers dürfen nichts auslösen
-War an der Stelle ein Schiff ist der Spieler wieder an der Reihe
Sollte ein Schiff getroffen werden muss man zusätzlich weitere Abfragen erstellen:
-Wurde das Schiff zerstört? Falls ja müssen es beide Spieler sehen
-Dem Gegner muss angezeigt werden wo sein Schiff getroffen wurde, evtl muss in einer Statistik das Schiff durchgestrichen werden.
-Ob das Schiff zerstört wurde kann man an der Klasse Schiff prüfen, die Schiffe speichern in ihrem Array ja ihre Felder (oder wenigstens ihre Beschussinfos).
Irgendwann hat man so alles im Kopf durchgeplant, weiß annähernd welche Klassen man benötigt und fängt an mit den ersten Codezeilen.
Man ist sich sicher, dass alles funktioniert und beim Programmieren wirst du dann auf weitere Probleme stoßen: Vielleicht blockiert deine GUI durch irgend eine Abfrage/Endlosschleife, oder irgendwo fliegt eine OutOfBounds-Exception. Oder der Spieler gewinnt nicht ... etc etc etc.
Dann kommt das ReDesign, Klassen werden geändert und vielleicht verwirft man ja auch alles und fängt mit dem neu gewonnenem Wissen neu an.
Hoffe ich konnte dir helfen

Gruß