Герой игры обладает никнеймом, силой, ловкостью и интеллектом, помимо этого у него есть здоровье, мана и опыт и позиция на карте в координатах х, у. Любой герой может переместиться за курсором, атаковать, защищаться, выполнить действие. Герой может принадлежать любому из 3 классов - маг, воин, лучник.
При создании персонажа у пользователя есть выбор класса.
Помимо базовых характеристик героя, у классов есть свои особенности:
Маг имеет больший запас маны при создании и способен атаковать на расстоянии. Маг имеет возможность произносить заклинания из списка. Маг имеет возможность изучать заклинания в случае нахождения свитка соответствующего заклинания.
Воин имеет больший запас здоровья при создании, больший урон с руки, возможность атаковать при помощи предмета.
Лучник - имеет лук при создании и способен атаковать на расстоянии. Лучник имеет возможность избежать урон при атаке и умеет открывать любые замки. Необходимо описать недостающие методы и добавить часть кода для того, чтобы программа заработала.
Механика метода attack - герой всегда наносит удар первым, потом ждет удара от цели и так до гибели кого либо из атакующих. В случае убийства цели (здоровье цели упало до 0 или ниже) - цель удар не наносит. В этом случае герой приобретает опыт цели. Каждые 500 единиц опыта герой получает новый уровень и это влияет на его характеристике в соответствии с описанием ниже. Если цель убивает героя необходимо вывести в консоль "Ваш герой был убит".
class Item {
int price, weight, type;
public Item(int price, int weight, int type){
this.price = price;
this.weight = weight;
this.type = type;
}
}
class Enemy{
int hp, damage;
int exp;
public Enemy(int hp, int damage, int exp){
this.hp = hp;
this.damage = damage;
this.exp = exp;
}
}
abstract class Hero{
protected String nickName;
protected int s, a, i, exp, hp, mana; // сила ловкость интеллект
опыт здоровье мана
protected int x, y; // координаты героя на карте
protected ArrayList<Item> items = new ArrayList<>(); // список поднятых предметов
protected int damage; // урон
public int getMana(){
return mana;
}
public int getDamage(){
return damage;
}
public int getHp(){
return hp;
}
public void goToCursor(int xx, int yy){
x = xx; y = yy;
}
public abstract void attack(Enemy enemy); // этот метод должнен быть определен в классах наследниках
public abstract void defense(Enemy enemy);// этот метод должнен быть определен в классах наследниках
public void openItem(Item item){
// метод должен добавлять предмет в список с вероятностью 50 %
// для осуществления вероятностных процессов можно использовать случайное число от 0 до 100.
}
}
class Warrior{
public Warrior(){
//базовые значение
}
/*
класс должен обладать всеми свойствами героя при создании воин должен
обладать следующими характеристиками:
здоровье - 500, мана - 10, сила - 100, ловкость - 50, интеллект - 1,
опыт 0, урон - 150. При атаке герой наносит цели урон и получает урон в
ответ от цели, действия повторяются пока кто то не победит. В случае
победы герой получает опыт цели, каждые 500 единиц опыта герой получает
новый уровень. Новый уровень дает +10 ко всем характеристикам, +200
здоровья и +20 урона.Если воин имеет предмет 1 типа, к его урону
добавляется 100.
Уже мертвая цель - урона герою не наносит!!!
*/
}
class Archer{
public Archer(){
//базовые значение
}
/*
класс должен обладать всеми свойствами героя при создании лучник должен обладать следующими характеристиками: здоровье - 200, мана - 50, сила - 20, ловкость - 150, интеллект - 30, опыт 0, урон - 200.
атака по аналогии с воином, но в процессе атаки лучник имеет 30% шанс избежать урон
лучник всегда открывает предмет - 100%
Новый уровень дает +10 ко всем характеристикам, +50 здоровья и +50 урона и 30 ловкости.
*/
}
class Magician{
public Magician(){
//базовые значение
}
private ArrayList<Item> casts = new ArrayList<>();
/*
класс должен обладать всеми свойствами героя при создании маг должен обладать следующими характеристиками: здоровье - 100, мана - 5000, сила - 5, ловкость - 30, интеллект - 300, опыт 0, урон - 40.
атака по аналогии с воином
помимо обычной атаки, маг имеет возможность бить заклинанием в процессе атаки
защита мага осуществляется магическим щитом, который полгащает весь урон, но вместо здоровья тратит ману. Новый уровень дает +10 ко всем характеристикам, +30 здоровья, 1000 маны и +10 урона.
В случае возможности убить врага с руки - маг бьет с руки!!! в Первую очередь
*/
public void makeCast(Enemy enemy){
// если в списке есть заклятия можно его произнести потратив 100 маны и нанеся 1000 урона цели.
// после произнесения предмет из списка пропадает
}
public void eduCast(Item item){
/*
если предмет или предметы из списка имеют тип 2, это заклинания
и их нужно добавить в список
заклинаний мага
*/
}
}
Для меня это вообще нереально сложная пока задача, поэтому буду признателен, если поможете разобраться в ней!
Класс Main для тестов логики боя выглядит примерно так:
public class TestClass {
public static void main(String[] args) throws IOException {
Hero myHero = new Warrior();
// Hero myHero = new Archer();
// Hero myHero = new Magician();
ArrayList<Enemy> enemies = new ArrayList<>();
enemies.add(new Enemy(30, 20, 1200)); // 1 - Крестьянин
enemies.add(new Enemy(2018, 1, 350)); // 2 - Стая собак
enemies.add(new Enemy(280, 50, 3050)); // 3 - Вор
enemies.add(new Enemy(100500, 100500, 100500)); // 4 -
Берсерк
//найден клад
for (int i = 0; i < 300; i++) {
Item item = new Item(0, 0, i % 3); // i%3 - будет задавать
предмету тип 0, 1, 2
myHero.openItem(item); // герои получает предмет в руки
}
System.out.println("Всего собрано: " + myHero.items.size());
// бой!
int count = 1;
for (Enemy enemy : enemies) {
System.out.println(count++ + "-й бой:");
System.out.println(" Герои { hp=" + myHero.hp + " mana=" +
myHero.mana + " }");
System.out.println(" Враг { hp=" + enemy.hp + " }");
int counter = 1;
while (myHero.hp > 0 & enemy.hp > 0) {
System.out.println(counter++ + " раунд:");
myHero.attack(enemy);
myHero.defense(enemy);
System.out.println(" Герои { hp=" + myHero.hp + "
mana=" + myHero.mana + " }");
System.out.println(" Враг { hp=" + enemy.hp + " }");
}
System.out.println(myHero.hp > 0 ? "Победа, герой получил
опыт " + enemy.exp : "Поражение");
System.out.printf("Герой { HP=%d, MANNA=%d, damage=%d,
exp=%d }\n", myHero.hp, myHero.mana, myHero.damage, myHero.exp);
}
}
}
Методы переопределяются так:
class Enemy {}
abstract class Hero {
public abstract void attack(Enemy enemy);
}
class Warrior extends Hero {
@Override // можно не писать
public void attack(Enemy enemy) {
}
}
Я так понимаю, что вам нужно что-то вроде этого:
Enemy[] enemies = new Enemy[3];
Scanner scanner = new Scanner(System.in);
boolean battleFinished = false;
while(!battleFinished) {
System.out.println("Выберите действите: 1)Атака , 2)Защита , 3) Суицид");
switch (scanner.nextLine()) {
case "1":
case "Атака":
System.out.printf("Выберите врага. (всего врагов %d)\n", enemies.length);
//код атаки на какого-то врага
case "2":
case "Защита":
//код защиты
case "3":
case "Суицид":
//код суицида
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Написать программу в которой можно из консоли делать текстовые записи в файл (с помощью Scanner) в кодировке "cp1251"
Ребят, подскажите, где в реестре лежат значения Java ? Например, выделенная в данный момент память для Jav'ыили любой другой путь, где лежит конфиг...
Есть большой проект, в него подтягиваются библиотеки с gitlab к которым у меня есть доступМне нужно поменять некоторые методы в этих библиотеках...
В сообщении хочу вывести сгенерированый парольОт меня программа ждёт цифру определяющую количество символов в нём