Code:
* The name of this program is Battleship */
/* This program is Battleship game */
#include <stdio.h>
/* DEFINE ARRAYS */
int ships_a[11][11];
int guess_b[11][11];
/* DECLARE VARIABLES */
/* these 2 integers are the coodinates a player selects for ship placement, or when taking a shot */
int row;
int column;
int direction;
int ship_type;
int ship_count = 0;
/* these integers are used to determine if this ship_type has already been selected by a player */
int pb = 0;
int sb = 0;
int dd = 0;
int bb = 0;
int ca = 0;
/* maximum number of misses is 83 */
int miss = 00;
int miss_count = 0;
/* maximum nuber of hits is 17 */
int hit = 11;
int hit_count = 0;
/* the player a & player b boards needs to be 10 rows x 10 columns */
/* need to present each player with an empty board at start of the game */
/* need to present each player with a view of just their board after placing ships */
/* Define Functions */
int main(void)
{
printf( "\n\n\n\n" );
printf( "Here is the Player's empty ship board \n\n" );
/* array has 11 rows, but "rows = 1" is used, because we do not want row 0 printed */
/* this for loop starts at row 1 and steps through each row until row 11 is reached */
for(row = 1; row < 11; ++row)
{
/* array has 11 columns, but "column = 1" is used, because we do not want column 0 printed */
/* this for loop starts at column 1 and steps through each row until column 11 is reached */
for(column = 1; column < 11; ++column)
/* prints actual array populated with all zero's */
printf("\t%i", ships_a[row][column]);
printf("\n\n");
}
printf( "It is now time for the player to place his or her's navy \n\n" );
/* prints out rules for ship placement and how many grid locations each ship takes up */
printf( "Pay attention, you only get one of each ship type for a total of 5 ships \n\n" );
printf( "You have to place all 5 of your ships, so use all your fingers to keep tack of the count \n\n" );
printf( "Get this straight, ships cannot be placed diagonally, so don't be a fool \n\n" );
printf( "First player to score a total of 17 hits wins!!!! \n\n" );
printf( "Aircraft Carrier = 5 take up horizontal or vertical grid locations \n" );
printf( "Battleship = 4 take up horizontal or vertical grid locations \n" );
printf( "Destroyer = 3 take up horizontal or vertical grid locations \n" );
printf( "Submarine = 3 take up horizontal or vertical grid locations \n" );
printf( "Patrol Boat = 2 take up horizontal or vertical grid locations \n\n" );
/* prompts player to select the ship type for ship placement */
printf( "CA = %i and Ship Count = %i \n\n", ca, ship_count ); /* FOR TROUBLESHOOTING */
printf( "Select the ship, 1 - Patrol Boat, 2 - Submarine,3 - Destroyer, 4 - Battleship, 5 - Aircraft Carrier: " );
scanf( "%i", &ship_type );
printf( "\n" );
/* error checking to make sure ship type selected by the player is between 1 and 5 */
if (( ship_type < 1 ) || ( ship_type >= 6 ))
{
printf( "Hey dummy, you made an incorrect choice, feasting on moron sandwiches again, pick another number for ship type \n\n" );
}
/* informs player which ship type they selected and how many grid locations the ship takes up */
else if (( ship_type == 1 ) && ( pb == 0 ))
{
printf( "You selected %i, the Patrol Boat which takes up 2 grid locations \n\n", ship_type );
++pb; /* increments pb count from 0 to 1 so patrol boat cannot be selected again */
++ship_count; /* increments the ship count by 1 */
}
else if (( ship_type == 2 ) & ( sb == 0 ))
{
printf( "You selected %i, the Submarine which takes up 3 grid locations \n\n", ship_type );
++sb; /* increments sb count from 0 to 1 so submarine cannot be selected again */
++ship_count; /* increments the ship count by 1 */
}
else if (( ship_type == 3 ) && ( dd == 0 ))
{
printf( "You selected %i, the Destroyer which takes up 3 grid locations \n\n", ship_type );
++dd; /* increments dd count from 0 to 1 so destroyer cannot be selected again */
++ship_count; /* increments the ship count by 1 */
}
else if (( ship_type == 4 ) && ( bb == 0 ))
{
printf( "You selected %i, the Battleship which takes up 4 grid locations \n\n", ship_type );
++bb; /* increments bb count from 0 to 1 so battleship cannot be selected again */
++ship_count; /* increments the ship count by 1 */
}
else if (( ship_type == 5 ) && ( ca ==0 ))
{
printf( "You selected %i, the Aircraft Carrier which takes up 5 grid locations \n\n", ship_type );
++ca; /* increments ca count from 0 to 1 so aircraft carrier cannot be selected again */
++ship_count; /* increments the ship count by 1 */
printf( "CA = %i and Ship Count = %i \n\n", ca, ship_count ); /* FOR TROUBLESHOOTING */
}
else
{
printf( "Not paying attention, you already selected that ship type, pony up to the bar and pick another ship type \n\n" );
}
/* prompts player to select a row coordinate between 1 and 10 */
printf( "Select the horizontal Row coordinate: " );
scanf( "%i", &row );
printf( "\n" );
/* error checking to make sure the player selected a row coordinate between 1 and 10 */
if (( row < 1 ) || ( row >= 11 ))
printf( "Hey dummy, you made an incorrect choice, we see you're in the remedial group, give it another shot \n\n" );
else
/* informs player of the row number they selected */
printf( "You selected Row coordinate %i\n\n", row );
/* prompts player to select a column coordinate between 1 and 10 */
printf( "Select the vertical Column coordinate: " );
scanf( "%i", &column );
printf( "\n" );
/* error checking to make sure player selected a column coordinate between 1 and 10 */
if (( column < 1 ) || ( column >= 11 ))
printf( "Hey dummy, you made an incorrect choice, pay attention, and try again \n\n" );
else
/* informs player of the column number they selected */
printf( "You selected Column coordinate %i\n\n", column );
/* Prompts player to select the direction the ship is point from the selected coordinate */
printf( "Select Ship Orientation-Direction, 1 for UP, 2 for DOWN, 3 for LEFT, or 4 for RIGHT: " );
scanf( "%i", &direction );
printf( "\n" );
/* error checking to make sure player selected a direction number between 1 and 4 */
if (( direction < 1 ) || ( direction >= 5 ))
printf( "Hey dummy, you made an incorrect choice, get it together, and give it another go \n\n" );
/* informs player what direction they selected */
else if ( direction == 1 )
printf( "You selected UP for your orientation-direction \n\n", direction );
else if (direction == 2)
printf( "You selected DOWN for your orientation-direction \n\n", direction );
else if (direction == 3)
printf( "You selected LEFT for your orientation-direction \n\n", direction );
else
printf( "You selected RIGHT for your orientation-direction \n\n\n\n", direction );
/* UP from selected coordinate for aircraft carrier */
if (( ship_type == 5 ) && ( direction == 1 ) && ( ships_a[row][column] == 0 ) && ( row - 5 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row - 4][column] = 1;
ships_a[row - 3][column] = 1;
ships_a[row - 2][column] = 1;
ships_a[row - 1][column] = 1;
}
/* DOWN from selected coordinate for aircraft carrier */
if (( ship_type == 5 ) && ( direction == 2 ) && ( ships_a[row][column] == 0 ) && ( row + 5 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row + 4][column] = 1;
ships_a[row + 3][column] = 1;
ships_a[row + 2][column] = 1;
ships_a[row + 1][column] = 1;
}
/* LEFT from selected coordinate for aircraft carrier */
if (( ship_type == 5 ) && ( direction == 3 ) && ( ships_a[row][column] == 0 ) && ( column - 5 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row][column - 4] = 1;
ships_a[row][column - 3] = 1;
ships_a[row][column - 2] = 1;
ships_a[row][column - 1] = 1;
}
/* RIGHT from selected coordinate for aircraft carrier */
if (( ship_type == 5 ) && ( direction == 4 ) && ( ships_a[row][column] == 0 ) && ( column + 5 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row][column + 4] = 1;
ships_a[row][column + 3] = 1;
ships_a[row][column + 2] = 1;
ships_a[row][column + 1] = 1;
}
/* UP from selected coordinate for battleship */
if (( ship_type == 4 ) && ( direction == 1 ) && ( ships_a[row][column] == 0 ) && ( row - 4 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row - 3][column] = 1;
ships_a[row - 2][column] = 1;
ships_a[row - 1][column] = 1;
}
/* DOWN from selected coordinate for battleship */
if (( ship_type == 4 ) && ( direction == 2 ) && ( ships_a[row][column] == 0 ) && ( row + 4 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row + 3][column] = 1;
ships_a[row + 2][column] = 1;
ships_a[row + 1][column] = 1;
}
/* LEFT from selected coordinate for battleship */
if (( ship_type == 4 ) && ( direction == 3 ) && ( ships_a[row][column] == 0 ) && ( column - 4 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row][column - 3] = 1;
ships_a[row][column - 2] = 1;
ships_a[row][column - 1] = 1;
}
/* RIGHT from selected coordinate for battleship */
if (( ship_type == 4 ) && ( direction == 4 ) && ( ships_a[row][column] == 0 ) && ( column + 4 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row][column + 3] = 1;
ships_a[row][column + 2] = 1;
ships_a[row][column + 1] = 1;
}
/* UP from selected coordinate for destroyer */
if (( ship_type == 3 ) && ( direction == 1 ) && ( ships_a[row][column] == 0 ) && ( row - 3 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row - 2][column] = 1;
ships_a[row - 1][column] = 1;
}
/* DOWN from selected coordinate for destroyer */
if (( ship_type == 3 ) && ( direction == 2 ) && ( ships_a[row][column] == 0 ) && ( row + 3 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row + 2][column] = 1;
ships_a[row + 1][column] = 1;
}
/* LEFT from selected coordinate for destroyer */
if (( ship_type == 3 ) && ( direction == 3 ) && ( ships_a[row][column] == 0 ) && ( column - 3 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row][column - 2] = 1;
ships_a[row][column - 1] = 1;
}
/* RIGHT from selected coordinate for destroyer */
if (( ship_type == 3 ) && ( direction == 4 ) && ( ships_a[row][column] == 0 ) && ( column + 3 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row][column + 2] = 1;
ships_a[row][column + 1] = 1;
}
/* UP from selected coordinate for submarine */
if (( ship_type == 2 ) && ( direction == 1 ) && ( ships_a[row][column] == 0 ) && ( row - 3 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row - 2][column] = 1;
ships_a[row - 1][column] = 1;
}
/* DOWN from selected coordinate for submarine */
if (( ship_type == 2 ) && ( direction == 2 ) && ( ships_a[row][column] == 0 ) && ( row + 3 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row + 2][column] = 1;
ships_a[row + 1][column] = 1;
}
/* LEFT from selected coordinate for submarine */
if (( ship_type == 2 ) && ( direction == 3 ) && ( ships_a[row][column] == 0 ) && ( column - 3 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row][column - 2] = 1;
ships_a[row][column - 1] = 1;
}
/* RIGHT from selected coordinate for submarine */
if (( ship_type == 2 ) && ( direction == 4 ) && ( ships_a[row][column] == 0 ) && ( column + 3 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row][column + 2] = 1;
ships_a[row][column + 1] = 1;
}
/* UP from selected coordinate for patrol boat */
if (( ship_type == 1 ) && ( direction == 1 ) && ( ships_a[row][column] == 0 ) && ( row - 2 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row - 1][column] = 1;
}
/* DOWN from selected coordinate for patrol boat */
if (( ship_type == 1 ) && ( direction == 2 ) && ( ships_a[row][column] == 0 ) && ( row + 2 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row + 1][column] = 1;
}
/* LEFT from selected coordinate for patrol boat */
if (( ship_type == 1 ) && ( direction == 3 ) && ( ships_a[row][column] == 0 ) && ( column - 2 >= 0 ))
{
ships_a[row][column] = 1;
ships_a[row][column - 1] = 1;
}
/* RIGHT from selected coordinate for patrol boat */
if (( ship_type == 1 ) && ( direction == 4 ) && ( ships_a[row][column] == 0 ) && ( column + 2 <= 11 ))
{
ships_a[row][column] = 1;
ships_a[row][column + 2] = 1;
ships_a[row][column + 1] = 1;
}
else
{
printf( "The ship will not fit the grid you selected, get on the ball, select a different grid \n\n" );
}
/* array has 11 rows, but "rows = 1" is used, because we do not want row 0 printed */
/* this for loop starts at row 1 and steps through each row until row 11 is reached */
for(row = 1; row < 11; ++row)
{
/* array has 11 columns, but "column = 1" is used, because we do not want column 0 printed */
/* this for loop starts at column 1 and steps through each row until column 11 is reached */
for(column = 1; column < 11; ++column)
printf("\t%i", ships_a[row][column]);
printf("\n\n");
}
printf( "Print blank board for Player B to shoot at Player A's ships \n\n" );
/* array has 11 rows, but "rows = 1" is used, because we do not want row 0 printed */
/* this for loop starts at row 1 and steps through each row until row 11 is reached */
for(row = 1; row < 11; ++row)
{
/* array has 11 columns, but "column = 1" is used, because we do not want column 0 printed */
/* this for loop starts at column 1 and steps through each row until column 11 is reached */
for(column = 1; column < 11; ++column)
/* prints actual array populated with all zero's */
printf("\t%i", guess_b[row][column]);
printf("\n\n");
}
/* prompts player to select a row coordinate between 1 and 10 */
printf( "Select the horizontal Row coordinate: " );
scanf( "%i", &row );
printf( "\n" );
/* error checking to make sure the player selected a row coordinate between 1 and 10 */
if (( row < 1 ) || ( row >= 11 ))
printf( "Hey dummy, you made an incorrect choice, we see you're in the remedial group, give it another shot \n\n" );
else
/* informs player of the row number they selected */
printf( "You selected Row coordinate %i\n\n", row );
/* prompts player to select a column coordinate between 1 and 10 */
printf( "Select the vertical Column coordinate: " );
scanf( "%i", &column );
printf( "\n" );
/* error checking to make sure player selected a column coordinate between 1 and 10 */
if (( column < 1 ) || ( column >= 11 ))
printf( "Hey dummy, you made an incorrect choice, pay attention, and try again \n\n" );
else
/* informs player of the column number they selected */
printf( "You selected Column coordinate %i\n\n", column );
if ( ships_a[row][column] = 1 )
{
printf( "IT'S A HIT!!! \n\n" );
guess_b[row][column] = hit;
++hit_count;
printf( "Hit count is %i \n\n", hit_count ); /* FOR TROUBLESHOOTING */
}
else
{
printf( "You missed \n\n" );
guess_b[row][column] = miss;
++miss_count;
printf( "Miss count is %i \n\n", miss_count ); /* FOR TROUBLESHOOTING */
}
/* array has 11 rows, but "rows = 1" is used, because we do not want row 0 printed */
/* this for loop starts at row 1 and steps through each row until row 11 is reached */
for(row = 1; row < 11; ++row)
{
/* array has 11 columns, but "column = 1" is used, because we do not want column 0 printed */
/* this for loop starts at column 1 and steps through each row until column 11 is reached */
for(column = 1; column < 11; ++column)
/* prints actual array populated with all zero's */
printf("\t%i", guess_b[row][column]);
printf("\n\n");
}
printf( "\n\n\n\n" );
}