import java.util.*; public class battleShip { private Scanner in; private boardPiece[][] eboard = {{new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}, {new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece(),new boardPiece()}}; private char turn = 'X'; private boolean win = false; private int count = 0; //private int mode = 2; private Random generator = new Random(System.currentTimeMillis()); private ship epatBoat = new ship(1); private ship edestroyer = new ship(2); private ship esubmarine = new ship(3); private ship ebattleship = new ship(4); private ship eairCraftCar = new ship(5); private AIplay AI = new AIplay(); public static void main(String [] args){ String again; battleShip game = new battleShip(); game.in = new Scanner(System.in); game.play(); System.out.println("Would you like to play again?(Y/N): "); again = game.in.nextLine(); while(again.charAt(0) == 'Y'){ game.init(); game.play(); System.out.println("Would you like to play again?(Y/N): "); again = game.in.nextLine(); } game.in.close(); System.out.println("Good Bye!"); } public void play(){ printBoard(); AIplace(); System.out.println("Enter your moves in the form 'C4'"); while(!win) move(); } /** PRINT BOARD */ public void printBoard(){ System.out.println(" ENEMY "); System.out.println(" 1 2 3 4 5 6 7 8 9 10"); for(int x=0; x<10; x++){ System.out.print((char)(65+x) + " "); for(int y=0; y<10; y++){ System.out.print(eboard[x][y].piece); } System.out.print(" "); System.out.println(); } } public void AIplace(){ boolean flag = false; for(int x=1;x<4;x++){ flag = false; while(!flag){ int a = generator.nextInt(2); int b = generator.nextInt(6); int c = generator.nextInt(6); if(a == 0) a = 72; else a = 86; b += 65; c += 49; if(a == 72 && (x + 1) > (7 - (c-48))){ //no good, try again } else if(a == 86 && (x + 1) > (7 - (b-64))){ //no good, try again } else{ //Valid Placement, except for overlap String d = String.valueOf((char)B)/> + String.valueOf((char)c); //System.out.println("AI LOCATION: " + d + " / " + b + " " + c + " / " + a); if(x == 1){ flag = AIplaceBoard((char)a, epatBoat, d); } else if(x == 2){ flag = AIplaceBoard((char)a, edestroyer, d); } else if(x == 3){ flag = AIplaceBoard((char)a, esubmarine, d); } else if(x == 4){ flag = AIplaceBoard((char)a, ebattleship, d); } else{ flag = AIplaceBoard((char)a, eairCraftCar, d); } } } } } public boolean AIplaceBoard(char layout, ship current, String locale){ boolean overlap = false; if(layout == 'H'){ for(int x=((int)locale.charAt(1)-49);x<((int)locale.charAt(1)-49)+(current.type + 1);x++){ if(eboard[((int)locale.charAt(0)-65)][x].type != current.type && eboard[((int)locale.charAt(0)-65)][x].used == true) overlap = true; } } else{ //layout == 'V' for(int x=((int)locale.charAt(0)-65);x<((int)locale.charAt(0)-65)+(current.type + 1);x++){ if(eboard[x][((int)locale.charAt(1)-49)].type != current.type && eboard[x][((int)locale.charAt(1)-49)].used == true) overlap = true; } } if(!overlap){ //If ships don't overlap if(layout == 'H'){ for(int x=((int)locale.charAt(1)-49);x<((int)locale.charAt(1)-49)+(current.type + 1);x++){ //eboard[((int)locale.charAt(0)-65)][x].piece = "_@_|"; eboard[((int)locale.charAt(0)-65)][x].used = true; eboard[((int)locale.charAt(0)-65)][x].type = current.type; } } else{ //layout == 'V' for(int x=((int)locale.charAt(0)-65);x<((int)locale.charAt(0)-65)+(current.type + 1);x++){ //eboard[x][((int)locale.charAt(1)-49)].piece = "_@_|"; eboard[x][((int)locale.charAt(1)-49)].used = true; eboard[x][((int)locale.charAt(1)-49)].type = current.type; } } current.placed = true; current.location = locale; current.orientation = layout; return true; } else return false; } public void move(){ String move = ""; String valid = ""; if(turn == 'X'){ System.out.println("Enter move: "); move = in.nextLine(); } else move = moveAI(); valid = checkMove(move); while(valid != "ok"){ if(turn == 'X'){ System.out.println("ERROR: "+ valid); move = in.nextLine(); } else move = moveAI(); valid = checkMove(move); } processMove(move); if(turn == 'O') printBoard(); if(count >= 17) checkWin(); if(turn == 'X') turn = 'O'; else turn = 'X'; } public String checkMove(String move){ if(((int)move.charAt(0)-100) >= 10) return "Invalid Row. Can only be A-J. Enter another move: "; if(((int)move.charAt(0)-100) >= 10) return "Invalid Column. Can only be 1-10. Enter another move: "; if(turn == 'X'){ if(eboard[((int)move.charAt(0)-65)][((int)move.charAt(1)-49)].selected) return "Already chosen. Enter another move: "; } else{ } return "ok"; } public void processMove(String move){ count++; char himi = ' '; String message = ""; if(eboard[((int)move.charAt(0)-65)][((int)move.charAt(1)-49)].used){ himi = 'X'; message = "Hit!"; } else{ himi = 'o'; message = "Miss!"; } eboard[((int)move.charAt(0)-65)][((int)move.charAt(1)-49)].piece = "_"+himi+"_|"; eboard[((int)move.charAt(0)-65)][((int)move.charAt(1)-49)].selected = true; System.out.println(message); int counter = 0; int stype = eboard[((int)move.charAt(0)-65)][((int)move.charAt(1)-49)].type; if(counter == (stype + 1)){ String xship = ""; if(stype == 1){ xship = "Patrol Boat!"; epatBoat.destroyed = true; } else if(stype == 2){ xship = "Destroyer!"; edestroyer.destroyed = true; } else if(stype == 3){ xship = "Submarine!"; esubmarine.destroyed = true; } else if(stype == 4){ xship = "Battleship!"; ebattleship.destroyed = true; } else{ xship = "Air Craft Carrier!"; eairCraftCar.destroyed = true; } message += " You destroyed the " + xship; } } public void checkWin(){ if(epatBoat.destroyed && edestroyer.destroyed && esubmarine.destroyed && ebattleship.destroyed && eairCraftCar.destroyed){ win = true; System.out.println("Congratulations! You've won!"); } } public void init(){ for(int x=0;x<6;x++){ for(int y=0;y<6;y++){ eboard[x][y] = new boardPiece(); } } turn = 'X'; win = false; count = 0; epatBoat = new ship(1); edestroyer = new ship(2); esubmarine = new ship(3); ebattleship = new ship(4); eairCraftCar = new ship(5); } public String moveAI(){ int x = 0; int y = 0; if(AI.count<1 || (AI.himi == 'M' && AI.himi2 == 'M') || AI.error){ x = generator.nextInt(6); y = generator.nextInt(6); x += 65; y += 49; AI.error = false; } else if(AI.himi == 'H'){ x = AI.lasta; if(AI.lastb<54) y = AI.lastb + 1; else y = AI.lastb - 1; } else if(AI.himi2 == 'H' && AI.himi == 'M'){ if(AI.lasta2<70) x = AI.lasta2 + 1; else x = AI.lasta2 - 1; y = AI.lastb2; } String z = String.valueOf((char)x) + String.valueOf((char)y); AI.lasta2 = AI.lasta; AI.lastb2 = AI.lastb; AI.lasta = x; AI.lastb = y; return z; } class boardPiece{ public String piece; public char player; public boolean used; public boolean selected; public int type; boardPiece(){ piece = "___|"; used = false; selected = false; type = 0; } } class ship{ public int type; public boolean placed; public boolean destroyed; public String location; public char orientation; ship(int x){ type = x; placed = false; destroyed = false; location = ""; orientation = ' '; } } class AIplay{ public int lasta; public int lastb; public int lasta2; public int lastb2; public char himi; public char himi2; public int count; public boolean error; AIplay(){ lasta = 0; lastb = 0; lasta2 = 0; lastb2 = 0; himi = 'M'; himi2 = 'M'; count = 0; error = false; } } }
I am working on a java battleship program. I need to have it randomly place ships on the board, but I also need to have it import ship placements. I really am getting frustrated with this. I am literally getting sick because of how much stress this is putting on me. I really could use some help please.
Sorry I didn't say what I was having trouble with.
At the current moment when you place a coordinate, it sometimes places in 2 spots. And when I try do do anything in the 10th column, it only reads the '1' in '10'.
I have no idea how to even set up an import scanner. I have the format but I really am lost.