Advertisement
Guest User

Untitled

a guest
Sep 19th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.95 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Battleship {
  4.  
  5.     private char[][] grid;
  6.     private char[][] printedGrid;
  7.     private char[][] finalGrid;
  8.  
  9.     private int humanShipsHit = 0;
  10.     private int computerShipsHit = 0;
  11.  
  12.     private String winner;
  13.  
  14.     private String storedCoordinates = "";
  15.    
  16.     private String storedHitCoordinates = "";
  17.    
  18.     private String hitPosition;
  19.  
  20.     public Battleship() {
  21.         grid = new char[8][8];
  22.         printedGrid = new char[8][8];
  23.  
  24.         for (int i = 0; i < printedGrid.length; i++) {
  25.             for (int j = 0; j < printedGrid[i].length; j++) {
  26.                 printedGrid[i][j] = '_';
  27.             }
  28.         }
  29.     }
  30.  
  31.     public String getStoredCoordinates() {
  32.         return this.storedCoordinates;
  33.  
  34.     }
  35.  
  36.     private void findXPosition(String givenPosition, Coordinates gridPosition) {
  37.  
  38.         if (givenPosition.charAt(0) == 'A') {
  39.             gridPosition.setX(0);
  40.  
  41.         } else if (givenPosition.charAt(0) == 'B') {
  42.             gridPosition.setX(1);
  43.  
  44.         } else if (givenPosition.charAt(0) == 'C') {
  45.             gridPosition.setX(2);
  46.  
  47.         } else if (givenPosition.charAt(0) == 'D') {
  48.             gridPosition.setX(3);
  49.  
  50.         } else if (givenPosition.charAt(0) == 'E') {
  51.             gridPosition.setX(4);
  52.  
  53.         } else if (givenPosition.charAt(0) == 'F') {
  54.             gridPosition.setX(5);
  55.  
  56.         } else if (givenPosition.charAt(0) == 'G') {
  57.             gridPosition.setX(6);
  58.  
  59.         } else if (givenPosition.charAt(0) == 'H') {
  60.             gridPosition.setX(7);
  61.  
  62.         }
  63.  
  64.     }
  65.  
  66.     public void findYPosition(String givenPosition, Coordinates gridPosition) {
  67.  
  68.         if (givenPosition.charAt(1) == '1') {
  69.             gridPosition.setY(0);
  70.  
  71.         } else if (givenPosition.charAt(1) == '2') {
  72.             gridPosition.setY(1);
  73.  
  74.         } else if (givenPosition.charAt(1) == '3') {
  75.             gridPosition.setY(2);
  76.  
  77.         } else if (givenPosition.charAt(1) == '4') {
  78.             gridPosition.setY(3);
  79.  
  80.         } else if (givenPosition.charAt(1) == '5') {
  81.             gridPosition.setY(4);
  82.  
  83.         } else if (givenPosition.charAt(1) == '6') {
  84.             gridPosition.setY(5);
  85.  
  86.         } else if (givenPosition.charAt(1) == '7') {
  87.             gridPosition.setY(6);
  88.  
  89.         } else if (givenPosition.charAt(1) == '8') {
  90.             gridPosition.setY(7);
  91.  
  92.         }
  93.     }
  94.  
  95.     public void placePlayerItems(Scanner reader, Coordinates ship) {
  96.        
  97.         //This method will need to loop twice
  98.         //It loops once to place the ships and then a second time to place the grenades
  99.         int i = 1;
  100.         while (i <= 2) {
  101.  
  102.             //This variable will be used to determine the number of loops (4 if grenades, 6 if ships)
  103.             int loops;
  104.            
  105.             //This variable will determine the name of the item to be displayed (Either grenade or ship)
  106.             String item;
  107.  
  108.             //This will check to see if the loop is in its first or second iteration
  109.             //It will make it so the loop is 6 in its first iteration (Placement of ships) and make item equal to "ship"
  110.             if (i == 1) {
  111.                 loops = 6;
  112.                 item = "ship";
  113.                
  114.             //If the loop is in its second iteration (placement of grenades) then the loop is set to 4
  115.             //And the value of the String item is set to "grenade"
  116.             } else {
  117.                 loops = 4;
  118.                 item = "grenade";
  119.             }
  120.  
  121.             System.out.println("");
  122.  
  123.             int j = 1;
  124.             while (j <= loops) {
  125.  
  126.                 System.out.print("Enter the coordinates of your " + item + " #" + j + ": ");
  127.                 String coordinate = reader.nextLine();
  128.                 coordinate = coordinate.toUpperCase();
  129.  
  130.                 if (coordinate.charAt(0) > 72 || (coordinate.charAt(1) > 56 || coordinate.charAt(1) <= 48)) {
  131.                     System.out.println("sorry, coordinates outside the grid. try again.");
  132.                     continue;
  133.  
  134.                 } else if (storedCoordinates.contains(coordinate)) {
  135.                     System.out.println("sorry, coordinates already used. try again");
  136.                     continue;
  137.  
  138.                 } else {
  139.                     storedCoordinates = storedCoordinates + coordinate;
  140.  
  141.                     findXPosition(coordinate, ship);
  142.                     findYPosition(coordinate, ship);
  143.  
  144.                     int x = ship.getX();
  145.                     int y = ship.getY();
  146.  
  147.                     if (i == 1) {
  148.                         grid[x][y] = 'S';
  149.                     } else {
  150.                         grid[x][y] = 'G';
  151.                     }
  152.  
  153.                 }
  154.  
  155.                 j++;
  156.             }
  157.             i++;
  158.  
  159.         }
  160.  
  161.     }
  162.  
  163.     public void placeComputersItems() {
  164.  
  165.         for (int i = 0; i < 6; i++) {
  166.             boolean loop = true;
  167.  
  168.             while (loop) {
  169.                 int randomX = (int) (Math.random() * 8);
  170.                 int randomY = (int) (Math.random() * 8);
  171.  
  172.                 if (grid[randomX][randomY] == '\u0000') {
  173.                     grid[randomX][randomY] = 's';
  174.                     loop = false;
  175.                 }
  176.             }
  177.         }
  178.  
  179.         for (int i = 0; i < 4; i++) {
  180.             boolean loop = true;
  181.  
  182.             while (loop) {
  183.                 int randomX = (int) (Math.random() * 8);
  184.                 int randomY = (int) (Math.random() * 8);
  185.  
  186.                 if (grid[randomX][randomY] == '\u0000') {
  187.                     grid[randomX][randomY] = 'g';
  188.                     loop = false;
  189.                 }
  190.             }
  191.         }
  192.  
  193.     }
  194.  
  195.     public void printArray() {
  196.  
  197.         for (int i = 0; i < printedGrid.length; i++) {
  198.             System.out.print("\t");
  199.             for (int j = 0; j < printedGrid[i].length; j++) {
  200.                 System.out.print(printedGrid[i][j] + "  ");
  201.             }
  202.             System.out.println("");
  203.  
  204.         }
  205.     }
  206.  
  207.     public void hit(Scanner reader, Coordinates item) {
  208.  
  209.         String position = reader.nextLine();
  210.        
  211.         position = position.toUpperCase();
  212.        
  213.         hitPosition = position;
  214.        
  215.         if (storedHitCoordinates.contains(position)) {
  216.             System.out.println("position already called");
  217.             return;
  218.         }
  219.  
  220.         findXPosition(position, item);
  221.         findYPosition(position, item);
  222.  
  223.         int x = item.getX();
  224.         int y = item.getY();
  225.  
  226.         if (grid[x][y] == 'S' || grid[x][y] == 's') {
  227.             System.out.println("ship hit.");
  228.  
  229.             if (storedCoordinates.contains(position)) {
  230.                 printedGrid[x][y] = 'S';
  231.             } else {
  232.                 printedGrid[x][y] = 's';
  233.             }
  234.  
  235.         } else if (grid[x][y] == 'G' || grid[x][y] == 'g') {
  236.             System.out.println("boom! grenade");
  237.  
  238.             if (storedCoordinates.contains(position)) {
  239.                 printedGrid[x][y] = 'G';
  240.             } else {
  241.                 printedGrid[x][y] = 'g';
  242.             }
  243.  
  244.         } else {
  245.             System.out.println("nothing.");
  246.             printedGrid[x][y] = '*';
  247.         }
  248.        
  249.     }
  250.  
  251.     public void setHit(char hit, Coordinates item) {
  252.  
  253.         int x = item.getX();
  254.         int y = item.getY();
  255.  
  256.         printedGrid[x][y] = hit;
  257.  
  258.     }
  259.  
  260.     public boolean won(Coordinates item) {
  261.  
  262.        
  263.         if (storedHitCoordinates.contains(hitPosition)) {
  264.             return false;
  265.         }
  266.         int x = item.getX();
  267.         int y = item.getY();
  268.        
  269.         if (printedGrid[x][y] == 'S') {
  270.             humanShipsHit++;
  271.         } else if (printedGrid[x][y] == 's') {
  272.             computerShipsHit++;
  273.         }
  274.        
  275.         storedHitCoordinates += hitPosition;
  276.        
  277.         System.out.println("comp " + computerShipsHit);
  278.         System.out.println("human " + humanShipsHit);
  279.  
  280.         if (humanShipsHit == 6) {
  281.             winner = "computer";
  282.             return true;
  283.         } else if (computerShipsHit == 6) {
  284.             winner = "human";
  285.             return true;
  286.         } else {
  287.             return false;
  288.         }
  289.     }
  290.  
  291.     public String winner() {
  292.         return this.winner;
  293.  
  294.     }
  295.  
  296.     public void printfirstGrid() {
  297.  
  298.         for (int i = 0; i < grid.length; i++) {
  299.             for (int j = 0; j < grid[i].length; j++) {
  300.                 System.out.print(grid[i][j] + " ");
  301.             }
  302.             System.out.println("");
  303.         }
  304.     }
  305.    
  306.     public void printCoordinate(Coordinates item) {
  307.        
  308.         System.out.println("");
  309.         System.out.println("************************");
  310.         System.out.println(printedGrid[item.getX()][item.getY()]);
  311.     }
  312.    
  313.     public void printChar(Scanner reader, Coordinates item) {
  314.        
  315.         String newPosition = reader.nextLine();
  316.  
  317.         newPosition = newPosition.toUpperCase();
  318.        
  319.         findXPosition(newPosition, item);
  320.         findYPosition(newPosition, item);
  321.  
  322.         int x = item.getX();
  323.         int y = item.getY();
  324.        
  325.         System.out.println(grid[x][y]);
  326.        
  327.     }
  328.    
  329.     public void finalGridPrint() {
  330.        
  331.         finalGrid = new char[8][8];
  332.        
  333.         for (int i = 0; i < grid.length; i++) {
  334.             for (int j = 0; j < grid[i].length; j++) {
  335.                 if (grid[i][j] != '\u0000') {
  336.                     printedGrid[i][j] = grid[i][j];
  337.                 } else {
  338.                     printedGrid[i][i] = '_';
  339.                 }
  340.             }
  341.         }
  342.        
  343.         for (int i = 0; i < printedGrid.length; i++) {
  344.             System.out.print("\t");
  345.             for (int j = 0; j < printedGrid[i].length; j++) {
  346.                 System.out.print(printedGrid[i][j] + " ");
  347.             }
  348.             System.out.println("");
  349.         }
  350.     }
  351.    
  352.     public void print() {
  353.        
  354.         for (int i = 0; i < printedGrid.length; i++) {
  355.             System.out.print("\t");
  356.             for (int j = 0; j < printedGrid[i].length; j++) {
  357.                 System.out.print(grid[i][j] + " ");
  358.             }
  359.             System.out.println("");
  360.         }
  361.     }
  362.  
  363. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement