Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- public class Seabatle {
- //Len. of gamefield. Ships count. Min-max size range.
- static final int SIZE = 20, COUNT_SHIP = 3, MIN_SIZE_SHIP = 1, MAX_SIZE_SHIP = 3;
- static final char LIVE = 'X', DEAD = '#', MISS = '*', EMPTY = '.';
- static char[] cells = new char[SIZE];
- public static void main(String[] args) {
- doGame();
- }
- private static void doGame() {
- initField();
- createShips();
- mainGameCycle();
- }
- private static void mainGameCycle() {
- Scanner scanner = new Scanner(System.in);
- do {
- showGameField();
- int shoot = userMakeShoot(scanner);
- switch (cells[shoot]) {
- case EMPTY:
- System.out.println("Промах");
- cells[shoot] = MISS;
- break;
- case LIVE:
- System.out.println("Попадание");
- cells[shoot] = DEAD;
- break;
- case DEAD: // Нет оповещения о потоплении корабля
- case MISS:
- System.out.println("Повторный выстрел");
- break;
- }
- } while (!isAllShipsSunk());
- showGameField();
- System.out.println("Игра окончена");
- }
- private static void initField() {
- for (int i = 0; i < SIZE; i++) { //Init field
- cells[i] = EMPTY;
- }
- }
- private static void createShips() {
- int part = SIZE / COUNT_SHIP; //Partition field for one ship
- for (int i = 0; i < COUNT_SHIP; i++) {
- int sizeShipRandom = (int) (Math.random() * (MAX_SIZE_SHIP - 1)) + MIN_SIZE_SHIP;
- int positionShipRandom = (int) (Math.random() * (part - sizeShipRandom) + (part * i + i));
- for (int j = positionShipRandom; j <= sizeShipRandom + positionShipRandom; j++) {
- cells[j] = LIVE;
- }
- }
- }
- private static void showGameField() {
- for (int i = 0; i < SIZE; i++) {
- char cell = cells[i] == LIVE ? EMPTY : cells[i];
- System.out.print(cell);
- }
- System.out.print("\n");
- }
- private static int userMakeShoot(Scanner scanner) {
- //Не уверен что правильно с передачей параметров но делать scanner и shoot глобальными не хотелось
- int shoot = -1;
- do {
- System.out.println("Введите координату для выстрела число от 0 до 19");
- if (scanner.hasNextInt()) {
- shoot = scanner.nextInt();
- scanner.nextLine();
- if ((shoot >= 0)&&(shoot < SIZE)) break;
- } else {
- scanner.nextLine();
- }
- System.out.println("Ввод неверный");
- } while (true);
- System.out.println("Вы ввели " + shoot);
- return shoot;
- }
- private static boolean isAllShipsSunk() {
- boolean allShipsSunk = true;
- for (int i = 0; i < SIZE; i++) {
- allShipsSunk &= cells[i] != LIVE;
- }
- return allShipsSunk;
- }
- }
Add Comment
Please, Sign In to add comment