У меня как-то так получилось. Немного доработал условие, чтобы интереснее было.
Смысл программы:
Монстры находятся в списке, список каждую итерацию сортируется(по убыванию жизней). У охотника имеется какое-то количество патрон и он имеет урон наносимый за один выстрел(сколько за один выстрел отнимаем жизней у монстра). Охотник делает выстрел и от жизни самого "жирного" монстра(который всегда будет находиться на 0 позиции списка) отнимается урон охотника. После чего делается проверка на количество жизней монстра, если их меньше 0, то удаляем монстра из списка и выводим сообщение о том, что он побежден.
Если у охотника остаются патроны и все монстры побеждены(список монстров пуст), то охотник победил, иначе победили монстры(патронов у охотника нет, а список не пуст).
Код конечно некрасивый и скорее все неэффективный(из-за постоянной сортировки списка монстров), так как сам ещё учусь, но может Вам поможет. С радостью приму советы по коду.
Файл Monster.java
class Monster implements Comparable<Monster>{
private String nameMonster;
//количество жизней монстра
private int health;
public Monster(int health){
nameMonster = "unknown";
this.health = health;
}
public Monster(String name, int health){
nameMonster = name;
this.health = health;
}
public void setHealth(int health){
this.health = health;
}
public String getName(){
return nameMonster;
}
public int getHealth(){
return health;
}
public int compareTo(Monster m){
return m.getHealth() - this.health;
}
@Override
public String toString(){
return "Имя: " + nameMonster + ", жизни: " + health;
}
}
Файл Hunter.java
class Hunter{
private String nameHunter;
// количество патрон
private int numOfBullets;
// урон наносимый за один выстрел
private int damage;
public Hunter(int numOfBullets){
this.numOfBullets = numOfBullets;
}
public Hunter(String nameHunter, int numOfBullets){
this.nameHunter = nameHunter;
this.numOfBullets = numOfBullets;
}
public Hunter(String nameHunter, int numOfBullets, int damage){
this.nameHunter = nameHunter;
this.numOfBullets = numOfBullets;
this.damage = damage;
}
public int shot(){
numOfBullets--;
System.out.println("патрон осталось: " + numOfBullets);
return damage;
}
public int getNumOfBullets(){
return numOfBullets;
}
@Override
public String toString(){
return "Охотник:" + nameHunter + "\nКоличество патрон:" + numOfBullets + "\n";
}
}
Файл MainClass.java
import java.util.ArrayList;
import java.util.Collections;
public class MainClass{
public static void main(String[] args){
//объект класса охотник
Hunter hunter = new Hunter("Sebastian", 5, 5);
//список монстров
ArrayList<Monster> listMonster = new ArrayList<>();
listMonster.add(new Monster("Скелет", (int)(((Math.random() * (10 - 1)) + 1))));
listMonster.add(new Monster("Призрак", (int)(((Math.random() * (10 - 1)) + 1))));
listMonster.add(new Monster("Зомби", (int)(((Math.random() * (10 - 1)) + 1))));
System.out.println(hunter);
while(hunter.getNumOfBullets() > 0){
Collections.sort(listMonster);
System.out.println(listMonster);
//всегда будем стрелять в самого жирного монстра
Monster monster = listMonster.get(0);
System.out.print("Охотник выстрелил в " + monster.getName() + ", ");
monster.setHealth(monster.getHealth() - hunter.shot());
// если у монстра не осталось жизней, то удаляем его из списка
if(monster.getHealth() <= 0){
System.out.println("Монстр " + monster.getName() + " убит");
listMonster.remove(monster);
}
// если список пуст, то все монстры убиты
if(listMonster.isEmpty()){
System.out.println("Все монстры убиты");
return;
}
}
//если все патроны потрачены, то охотник проиграл
System.out.println("Монстры победили, охотнику не хватило патрон");
}
}