/
alim4ik-had
/
SberJavaCourseBeginner
Обзор
Документация
Войти
/
alim4ik-had
/
SberJavaCourseBeginner
Код
Запросы
2
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
hw2/task1/BattleField.java
167 строк
7 KB
alimo
small change weapon and player
26 апр 2025, 10:48
26 апр 2025, 10:48
2745e22
Код
Авторство
О чём код?
package hw2.task1; import java.util.InputMismatchException; import java.util.Random; import java.util.Scanner; import hw2.task1.heirsWeapon.Slingshot; import hw2.task1.heirsWeapon.Pistol; import hw2.task1.heirsWeapon.Machine_Gun; import hw2.task1.heirsWeapon.RPG; import hw2.task1.heirsWeapon.WaterGun; public class BattleField { public static void main(String[] args) { Scanner sc; boolean validValue = false; Player[] players = new Player[0]; while (!validValue) { sc = new Scanner(System.in); System.out.println("Сколько игроков будут играть (от 2 до 5):"); try { int countPlayers = sc.nextInt(); if (countPlayers > 5 || countPlayers < 2) { throw new InputMismatchException(); } players = createPlayers(countPlayers); validValue = true; } catch (InputMismatchException e) { System.out.println("Неправильное значение количества!"); } } setWeapons(players); startGameNotice(); startGameProcess(players); } private static Player[] createPlayers(int countPlayers){ Player[] players = new Player[countPlayers]; for(int i = 0; i < players.length; i++){ players[i] = new Player(100); } return players; } private static void notice(int numberPlayer){ System.out.println("Выберите оружение для " + numberPlayer + " игрока:\n" + "1. Пистолет.\n" + "2. Автомат.\n" + "3. Водный пистолет.\n" + "4. РПГ.\n" + "5. Рогатка"); } private static void setWeapons(Player[] players){ Scanner sc; int numberPlayer = 0; boolean validValue = false; while(!validValue){ sc = new Scanner(System.in); try{ notice(numberPlayer+1); int numberGun = sc.nextInt(); if (numberGun > 5 || numberGun < 1){ throw new InputMismatchException(); } switch (numberGun){ case 1 -> players[numberPlayer].setGun(new Pistol(new Random().nextInt(5, 30), 20)); case 2 -> players[numberPlayer].setGun(new Machine_Gun(new Random().nextInt(5, 30), 30)); case 3 -> players[numberPlayer].setGun(new WaterGun(new Random().nextInt(5, 30), 1)); case 4 -> players[numberPlayer].setGun(new RPG(new Random().nextInt(5, 30), 1000)); default -> players[numberPlayer].setGun(new Slingshot(new Random().nextInt(5, 30), 10)); } numberPlayer++; if(numberPlayer == players.length) validValue = true; }catch (InputMismatchException e){ System.out.println("Такого оружия нет!"); } } } private static void startGameNotice(){ System.out.println("Игра начинается! Каждый игрок по порядку будет стрелять в одного из оставшихся игроков.\n" + "Игра продолжается до тех пор, пока не останется один игрок! " + "При стрельбе есть вероятность промоха (чтоб не было скучно)\n" + "Если у игрока закончатся патроны, то он выбывает (игрокам не известно начальное количество патронов)\n"); } private static void startGameProcess(Player[] players){ int numberPlayer = 0; Scanner sc; while (true){ sc = new Scanner(System.in); try { if (numberPlayer == players.length) numberPlayer = 0; if (players[numberPlayer].getHealth() == 0) { numberPlayer++; continue; } System.out.println(""" Очередь игрока номер %d. Введите номер игрока (количество игроков: %d), в которого он будет стрелять. Так же можно ввести 10, чтобы постмотреть здоровье всех игроков. """.formatted(numberPlayer+1, players.length)); int numberEnemy = sc.nextInt(); if(numberEnemy == numberPlayer+1){ System.out.println("Нельзя стрелять в самого себя!"); continue; } else if(numberEnemy == 10){ getStatusPlayers(players); continue; } else if(numberEnemy > players.length || numberEnemy < 1){ throw new InputMismatchException(); } else if(players[numberEnemy-1].getHealth() == 0){ System.out.println("Этот игрок уже мертв!"); continue; } players[numberPlayer].shoot(players[numberEnemy-1]); if(players[numberPlayer].getGun().getCountBullets() <= 0){ System.out.println("Игрок номер "+ (numberPlayer+1) + " выбывает (считается умершим) из-за отсутствия патронов"); players[numberPlayer].bulletOver(); } if(players[numberEnemy-1].getHealth() == 0){ System.out.println("Игрок номер " + numberEnemy + " убит!"); } numberPlayer++; int indexAlive = surviveOnlyOne(players); if(indexAlive != -1 && indexAlive != -2){ System.out.println("Игра окончена! Игрок номер "+ (indexAlive+1) + " победил!"); return; } else if(indexAlive == -2){ System.out.println("Игра окончена! Все игроки мерты (или выбыли из-за отсутсвия патронов)!"); return; } }catch (InputMismatchException e){ System.out.println("Введен неверный номер!"); } } } private static int surviveOnlyOne(Player[] players){ int lastAliveIndex = 0; int countAlive = 0; for(int i = 0; i < players.length; i++){ if(players[i].getHealth() > 0){ countAlive++; lastAliveIndex = i; } } if(countAlive > 1) return -1; else if(countAlive == 0){ return -2; } return lastAliveIndex; } private static void getStatusPlayers(Player[] players){ for(int i = 0; i < players.length; i++){ System.out.println("Здоровье игрока номер " + (i+1) + ": " + players[i].getHealth()); } } }