Die beiden Spielraster speicherst du am besten in zweidimensionalen assoziativen Arrays (in Pseudosyntax, kann kein Java):
$spieler_a[0...9][0...9] -- also $spieler_a[0][0] über $spieler_a[0][9] bis $spieler_a[9][9]
Um Schiffe auf dem Feld zu platzieren, setzt du einfach den Wert der Rasterfelder die es einnimmt auf eine bestimmte Kennzahl. Eine zufällige Position ist einfach jedes zufällige Zahlenpaar zwischen 0 und 9. Die Nachbarfelder, die du wie Can sagte überprüfen musst, sind einfach einer der beiden Werte jeweils inkrementiert.
Schießt jetzt der Gegner, siehst du im Array nach, ob der Wert dort != 0, und wenn ja schleifst du das Array einmal durch und versenkst das gesamte getroffene Schiff, setzt also alle Felder die den gleichen Wert wie das erste getroffene haben auf 0 und gibst eine entsprechende Nachricht aus/vergibst Punkte/was auch immer.
Wenn das ganze grafisch sein soll, malst du halt nach jedem Zug den Werten im Array entsprechend ein Spielfeld auf.
Ich muss bis nächste Woche ein 3D-Tetris/Rennspiel-Hybridzeugs machen, da fühl ich mich erst überfordert, wünschte Schiffe versenken würde ausreichen