Guest User

Untitled

a guest
Jul 17th, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.22 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. public class Seabatle {
  4. //Len. of gamefield. Ships count. Min-max size range.
  5. static final int SIZE = 20, COUNT_SHIP = 3, MIN_SIZE_SHIP = 1, MAX_SIZE_SHIP = 3;
  6. static final char LIVE = 'X', DEAD = '#', MISS = '*', EMPTY = '.';
  7. static char[] cells = new char[SIZE];
  8.  
  9. public static void main(String[] args) {
  10. doGame();
  11. }
  12.  
  13. private static void doGame() {
  14. initField();
  15. createShips();
  16. mainGameCycle();
  17. }
  18.  
  19. private static void mainGameCycle() {
  20. Scanner scanner = new Scanner(System.in);
  21. do {
  22. showGameField();
  23. int shoot = userMakeShoot(scanner);
  24. switch (cells[shoot]) {
  25. case EMPTY:
  26. System.out.println("Промах");
  27. cells[shoot] = MISS;
  28. break;
  29. case LIVE:
  30. System.out.println("Попадание");
  31. cells[shoot] = DEAD;
  32. break;
  33. case DEAD: // Нет оповещения о потоплении корабля
  34. case MISS:
  35. System.out.println("Повторный выстрел");
  36. break;
  37. }
  38. } while (!isAllShipsSunk());
  39. showGameField();
  40. System.out.println("Игра окончена");
  41. }
  42.  
  43. private static void initField() {
  44. for (int i = 0; i < SIZE; i++) { //Init field
  45. cells[i] = EMPTY;
  46. }
  47. }
  48.  
  49. private static void createShips() {
  50. int part = SIZE / COUNT_SHIP; //Partition field for one ship
  51. for (int i = 0; i < COUNT_SHIP; i++) {
  52. int sizeShipRandom = (int) (Math.random() * (MAX_SIZE_SHIP - 1)) + MIN_SIZE_SHIP;
  53. int positionShipRandom = (int) (Math.random() * (part - sizeShipRandom) + (part * i + i));
  54. for (int j = positionShipRandom; j <= sizeShipRandom + positionShipRandom; j++) {
  55. cells[j] = LIVE;
  56. }
  57. }
  58. }
  59.  
  60. private static void showGameField() {
  61. for (int i = 0; i < SIZE; i++) {
  62. char cell = cells[i] == LIVE ? EMPTY : cells[i];
  63. System.out.print(cell);
  64. }
  65. System.out.print("\n");
  66. }
  67.  
  68. private static int userMakeShoot(Scanner scanner) {
  69. //Не уверен что правильно с передачей параметров но делать scanner и shoot глобальными не хотелось
  70. int shoot = -1;
  71.  
  72. do {
  73. System.out.println("Введите координату для выстрела число от 0 до 19");
  74. if (scanner.hasNextInt()) {
  75. shoot = scanner.nextInt();
  76. scanner.nextLine();
  77. if ((shoot >= 0)&&(shoot < SIZE)) break;
  78. } else {
  79. scanner.nextLine();
  80. }
  81. System.out.println("Ввод неверный");
  82. } while (true);
  83. System.out.println("Вы ввели " + shoot);
  84. return shoot;
  85. }
  86.  
  87. private static boolean isAllShipsSunk() {
  88. boolean allShipsSunk = true;
  89. for (int i = 0; i < SIZE; i++) {
  90. allShipsSunk &= cells[i] != LIVE;
  91. }
  92. return allShipsSunk;
  93. }
  94. }
Add Comment
Please, Sign In to add comment