In the sketch program Processing create a ***simplistic*** version of the the bo
ID: 673865 • Letter: I
Question
In the sketch program Processing create a ***simplistic*** version of the the board game BattleShip (if you are not familiar with this game google it).
The game should have a board with 10 x 10 cells.
In this simplistic version of the game, the computer (your enemy) places randomly submarines in 10 cells in the beginning of the game. You don't see the submarines. They are just boolean variables, one in each cell. You just see the ocean, like a water pattern in each cell.
Now you (the player) need to bomb the submarines by clicking the cells. If you click a cell with a submarine you change its image to an explosion image. If you hit an empty cell you can show an x image of the the water or something that indicates that you missed!
The player should continue clicking until he or she bombs all the hidden submarines!
Explanation / Answer
import java.util.Random;
import java.util.Scanner;
public class battleShip
{
public static void main(String[] args)
{
int[][] board = new int[5][5];
int[][] ships = new int[3][2];
int[] shoot = new int[2];
int attempts=0,
shotHit=0;
initBoard(board);
initShips(ships);
System.out.println();
do
{
showBoard(board);
shoot(shoot);
attempts++;
if(hit(shoot,ships))
{
hint(shoot,ships,attempts);
shotHit++;
}
else
hint(shoot,ships,attempts);
changeboard(shoot,ships,board);
}
while(shotHit!=3);
System.out.println(" Battleship Java game finished! You hit 3 ships in "+attempts+" attempts");
showBoard(board);
}
public static void initBoard(int[][] board)
{
for(int row=0 ; row < 5 ; row++ )
for(int column=0 ; column < 5 ; column++ )
board[row][column]=-1;
}
public static void showBoard(int[][] board)
{
System.out.println(" 1 2 3 4 5");
System.out.println();
for(int row=0 ; row < 5 ; row++ )
{
System.out.print((row+1)+"");
for(int column=0 ; column < 5 ; column++ )
{
if(board[row][column]==-1)
{
System.out.print(" "+"~");
}
else if(board[row][column]==0)
{
System.out.print(" "+"*");
}
else if(board[row][column]==1)
{
System.out.print(" "+"X");
}
}
System.out.println();
}
}
public static void initShips(int[][] ships)
{
Random random = new Random();
for(int ship=0 ; ship < 3 ; ship++)
{
ships[ship][0]=random.nextInt(5);
ships[ship][1]=random.nextInt(5);
for(int last=0 ; last < ship ; last++)
{
if( (ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1]) )
do
{
ships[ship][0]=random.nextInt(5);
ships[ship][1]=random.nextInt(5);
}
while( (ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1]) );
}
}
}
public static void shoot(int[] shoot)
{
Scanner input = new Scanner(System.in);
System.out.print("Row: ");
shoot[0] = input.nextInt();
shoot[0]--;
System.out.print("Column: ");
shoot[1] = input.nextInt();
shoot[1]--;
}
public static boolean hit(int[] shoot, int[][] ships)
{
for(int ship=0 ; ship<ships.length ; ship++)
{
if( shoot[0]==ships[ship][0] && shoot[1]==ships[ship][1])
{
System.out.printf("You hit a ship located in (%d,%d) ",shoot[0]+1,shoot[1]+1);
return true;
}
}
return false;
}
public static void hint(int[] shoot, int[][] ships, int attempt)
{
int row=0,
column=0;
for(int line=0 ; line < ships.length ; line++)
{
if(ships[line][0]==shoot[0])
row++;
if(ships[line][1]==shoot[1])
column++;
}
System.out.printf(" Hint %d: Row %d -> %d ships " +"Column %d -> %d ships ",attempt,shoot[0]+1,row,shoot[1]+1,column);
}
public static void changeboard(int[] shoot, int[][] ships, int[][] board)
{
if(hit(shoot,ships))
board[shoot[0]][shoot[1]]=1;
else
board[shoot[0]][shoot[1]]=0;
}
}