Java Reference
In-Depth Information
public class
Main
{
public static void
main(String [] args)
{
Scanner k =
new
Scanner(System. in) ;
Board board =
new
Board() ;
System. out . println (board) ;
while
(! board. isAllMarked() )
{
int
row , column ;
System. out . print (
"Enter guess: "
);
row = k . nextInt () ;
column = k . nextInt () ;
board . visit (row, column) ;
if
(board . isPartOfShip(row, column) )
{
if
(board . isSunkAt(row, column))
{
System. out . println (
"Ship Destroyed!"
);
}
{
System. out . println (
"Ship Damaged!"
);
System. out . println (board) ;
else
}
else
{
System. out . println (
"Empty!"
);
System. out . println (board) ;
}
}
}
}
The method has a continuous loop that asks for user input and then visits the specified cell.
The loop terminates when all the ships are sunk. If the user hits a ship, then the
isSunk
method of the
Ship
class checks to see whether the ship is sunk and an appropriate message
is printed.
Although at first glance simple, the design of the battleship game is not rudimentary
and it involves the interaction of four classes. When creating the design, we observed the
following general design rules.
1. All non-constant variables of a class should be private.
2. All public methods of a class should be used to provide access to the data of the class
to the outside world.
3. All methods should be simple and perform a single task.
4. Inter-class interaction should be minimized.
In order to demonstrate the last point, note that the
Main
class interacts only with the
Board
class. A design where the
Main
class interacts additionally with objects of the
Cell
and
Ship
classes is certainly possible. However, this will increase the number of inter-class
interactions and will make the
Board
class partially obsolete. That is, why have a
Board
class if the
Main
class directly interacts with the cells and the ships of the game?