Санкт-Петербургский Национальный Исследовательский Университет Информационных Технологий, Механики и Оптики ПИиКТ Лабораторная работа №2 по дисциплине «Программирование» Вариант - 4010 Выполнил: Студент группы P3114, Любкин Андрей Преподаватель: Письмак Алексей Евгеньевич Санкт-Петербург 2019г. Задание: (4010 вариант) Write your own pokemon classes based on Pokemon class for all given pokemons. Each pokemon kind should hae one or two types and standard base stats: HP, attack, defense, special attack, special defense and speed. Pokemon classes should be inherited according to pokemon evolution chains. Write your own Move classes based on PhysicalMove, SpecialMove and StatusMove classes for all give moves. Each move should have standard type, power and accuracy and implement standard move effects. Assign moves to pokemons according to given task. Pokemon level should be set to minimal one required to learn all given moves. Use the simulation class Battle to create two pokemon teams (each pokemon should have a name) and start the battle. Base classes, battle simulator and utility classes are packed in jar archive. Documentation in javadoc format is in the zip file. All information about pokemon and move stats, evolution chains and so on you can find on http://pokemondb.net, http://veekun.com/dex/pokemon Исходный код: Testung.java: import ru.ifmo.se.pokemon.*; public class Testung { public static void main(String[] args) { Battle b = new Battle(); b.addAlly(new Alomomola("USSR", 1)); b.addAlly(new Binacle("USA", 1)); b.addAlly(new Barbaracle("GB", 1)); b.addFoe(new Venipede("Germany", 1)); b.addFoe(new Whirlipede("Italy", 1)); b.addFoe(new Scolipede("Japany", 1)); b.go(); } } Alomomla.java import ru.ifmo.se.pokemon.*; public class Alomomola extends Pokemon { public Alomomola(String name, int level) { super(name, level); setStats(165, 75, 80, 40, 45, 65); setType(Type.WATER); setMove(new FakeTears(), new Confide(), new Refresh(), new Scald()); } protected String describe(){ return "Атакует, Уменьшает скорость врага"; } } Binacle.java import ru.ifmo.se.pokemon.*; public class Binacle extends Pokemon { public Binacle(String name, int level) { super(name, level); setStats(42, 52, 67, 39, 56, 50); setType(Type.WATER, Type.ROCK); setMove(new SludgeWave(), new Rest(), new DoubleTeam()); } } Barbaracle.java import ru.ifmo.se.pokemon.*; public class Barbaracle extends Binacle { public Barbaracle(String name, int level) { super(name, level); setStats(72, 105, 115, 54, 86, 68); setType(Type.WATER, Type.ROCK); setMove(new SludgeWave(), new Rest(), new DoubleTeam(), new EnergyBall()); } } Venipede.java import ru.ifmo.se.pokemon.*; public class Venipede extends Pokemon { public Venipede(String name, int level) { super(name, level); setStats(30, 45, 59, 30, 39, 57); setType(Type.BUG, Type.POISON); setMove(new Confide(), new Swagger()); } } Whirlipede.java import ru.ifmo.se.pokemon.*; public class Whirlipede extends Venipede { public Whirlipede(String name, int level) { super(name, level); setStats(40, 55, 99, 40, 79, 47); setType(Type.BUG, Type.POISON); setMove(new Confide(), new Swagger(), new Growth()); } } Scolipede.java import ru.ifmo.se.pokemon.*; public class Scolipede extends Whirlipede { public Scolipede(String name, int level) { super(name, level); setStats(60, 100, 89, 55, 69, 112); setType(Type.BUG, Type.POISON); setMove(new Confide(), new Swagger(), new Growth(), new Bubble()); } } Bubble.java import ru.ifmo.se.pokemon.*; public class Bubble extends SpecialMove { public Bubble() { super(Type.WATER, 40, 100); } @Override protected void applyOppEffects(Pokemon p) { if (Math.random() <= 0.1) { p.setMod(Stat.SPEED, -1); } } protected String describe(){ return "Атакует, Уменьшает скорость врага"; } } Confide.java import ru.ifmo.se.pokemon.*; public class Confide extends StatusMove { public Confide() { super(Type.NORMAL, 0, 0); } @Override protected void applyOppEffects(Pokemon p) { p.setMod(Stat.SPECIAL_ATTACK, -1); } protected String describe(){ return "Уменьшает Special Attack врага"; } } DoubleTeam.java import ru.ifmo.se.pokemon.*; public class DoubleTeam extends StatusMove { public DoubleTeam() { super(Type.NORMAL, 0, 0); } @Override protected void applySelfEffects(Pokemon p) { p.setMod(Stat.EVASION, 1); } protected String describe(){ return "Увеличивает Evasion"; } } EnergyBall.java import ru.ifmo.se.pokemon.*; public class EnergyBall extends SpecialMove { public EnergyBall() { super(Type.GRASS, 90, 100); } @Override protected void applyOppEffects(Pokemon p) { if (Math.random() <= 0.1) { p.setMod(Stat.SPECIAL_DEFENSE, -1); } } protected String describe(){ return "Атакует, Уменьшает Special Defence врага"; } } FakeTears.java import ru.ifmo.se.pokemon.*; public class FakeTears extends StatusMove { public FakeTears() { super(Type.DARK, 0, 100); } @Override protected void applyOppEffects(Pokemon p) { p.setMod(Stat.SPECIAL_DEFENSE, -2); } protected String describe(){ return "Атакует, Уменьшает Special Defence врага"; } } Growth.java import ru.ifmo.se.pokemon.*; public class Growth extends StatusMove { public Growth() { super(Type.NORMAL, 0, 0); } @Override protected void applySelfEffects(Pokemon p) { p.setMod(Stat.ATTACK, 1); p.setMod(Stat.SPECIAL_ATTACK, 1); } protected String describe(){ return "Увеличивает Attack и Special Attack"; } } Refresh.java import ru.ifmo.se.pokemon.*; public class Refresh extends StatusMove { public Refresh() { super(Type.NORMAL, 0, 0); } @Override protected void applySelfEffects(Pokemon p) { if (p.getCondition() == Status.BURN || p.getCondition() == Status.PARALYZE || p.getCondition() == Status.POISON) { Effect e = new Effect().condition(Status.NORMAL); p.addEffect(e); } } protected String describe(){ return "Снимает эффект"; } } Rest.java import ru.ifmo.se.pokemon.*; public class Rest extends StatusMove { public Rest() { super(Type.PSYCHIC, 0, 0); } @Override protected void applySelfEffects(Pokemon p) { p.restore(); Effect e = new Effect().condition(Status.SLEEP).turns(2); } protected String describe(){ return "Восстанавливается"; } } Scald.java import ru.ifmo.se.pokemon.*; public class Scald extends SpecialMove { public Scald() { super(Type.WATER, 80, 100); } @Override protected void applyOppEffects(Pokemon p) { if (Math.random() <= 0.3) { Effect.burn(p); } } protected String describe(){ return "Накладывает Burn"; } } SludgeWave.java import ru.ifmo.se.pokemon.*; public class SludgeWave extends SpecialMove { public SludgeWave() { super(Type.POISON, 95, 100); } @Override protected void applyOppEffects(Pokemon p) { if (Math.random() <= 0.1) { Effect.poison(p); } } protected String describe(){ return "Атакует, Накладывает Poison"; } } Swagger.java import ru.ifmo.se.pokemon.*; public class Swagger extends StatusMove { public Swagger() { super(Type.NORMAL, 0, 85); } @Override protected void applyOppEffects(Pokemon p) { Effect.confuse(p); p.setMod(Stat.ATTACK, 2); } protected String describe(){ return "Накладывает Confuse"; } } Результат работы: Alomomola USSR из команды полосатых вступает в бой! Venipede Germany из команды желтых вступает в бой! Alomomola USSR промахивается Venipede Germany промахивается Alomomola USSR Атакует, Уменьшает Special Defence врага. Venipede Germany уменьшает специальную защиту. Venipede Germany Накладывает Confuse. Alomomola USSR увеличивает атаку. Alomomola USSR промахивается Venipede Germany Накладывает Confuse. Alomomola USSR увеличивает атаку. Alomomola USSR Накладывает Burn. Venipede Germany теряет 4 здоровья. Venipede Germany Накладывает Confuse. Alomomola USSR увеличивает атаку. Alomomola USSR Накладывает Burn. Venipede Germany теряет 4 здоровья. Venipede Germany промахивается Alomomola USSR Накладывает Burn. Критический удар! Venipede Germany теряет 8 здоровья. Venipede Germany воспламеняется Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 103 здоровья. Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 90 здоровья. Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR промахивается Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR Накладывает Burn. Venipede Germany теряет 4 здоровья. Venipede Germany Накладывает Confuse. Alomomola USSR увеличивает атаку. Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 63 здоровья. Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 59 здоровья. Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 63 здоровья. Venipede Germany промахивается Venipede Germany теряет 11 здоровья. Alomomola USSR растерянно попадает по себе. Alomomola USSR теряет 101 здоровья. Alomomola USSR теряет сознание. Binacle USA из команды полосатых вступает в бой! Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA Атакует, Накладывает Poison. Venipede Germany теряет 2 здоровья. Venipede Germany теряет 11 здоровья. Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA Атакует, Накладывает Poison. Venipede Germany теряет 2 здоровья. Venipede Germany теряет 11 здоровья. Venipede Germany промахивается Binacle USA Атакует, Накладывает Poison. Venipede Germany теряет 2 здоровья. Venipede Germany теряет 11 здоровья. Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA растерянно попадает по себе. Binacle USA теряет 59 здоровья. Venipede Germany теряет 11 здоровья. Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA промахивается Venipede Germany теряет 11 здоровья. Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA растерянно попадает по себе. Binacle USA теряет 49 здоровья. Venipede Germany теряет 11 здоровья. Venipede Germany Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA растерянно попадает по себе. Binacle USA теряет 48 здоровья. Venipede Germany теряет 11 здоровья. Whirlipede Italy из команды желтых вступает в бой! Binacle USA Атакует, Накладывает Poison. Критический удар! Whirlipede Italy теряет 33 здоровья. Whirlipede Italy промахивается Binacle USA растерянно попадает по себе. Binacle USA теряет 45 здоровья. Whirlipede Italy Накладывает Confuse. Binacle USA увеличивает атаку. Binacle USA растерянно попадает по себе. Binacle USA теряет 29 здоровья. Binacle USA теряет сознание. Barbaracle GB из команды полосатых вступает в бой! Barbaracle GB промахивается Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB растерянно попадает по себе. Barbaracle GB теряет 34 здоровья. Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB Атакует, Накладывает Poison. Критический удар! Whirlipede Italy теряет 32 здоровья. Whirlipede Italy промахивается Barbaracle GB Атакует, Накладывает Poison. Whirlipede Italy теряет 15 здоровья. Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB Атакует, Накладывает Poison. Whirlipede Italy теряет 13 здоровья. Whirlipede Italy промахивается Barbaracle GB Атакует, Накладывает Poison. Критический удар! Whirlipede Italy теряет 33 здоровья. Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB Атакует, Накладывает Poison. Whirlipede Italy теряет 13 здоровья. Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB Атакует, Накладывает Poison. Whirlipede Italy теряет 18 здоровья. Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB Атакует, Уменьшает Special Defence врага. Whirlipede Italy теряет 7 здоровья. Whirlipede Italy промахивается Barbaracle GB Атакует, Уменьшает Special Defence врага. Whirlipede Italy теряет 10 здоровья. Whirlipede Italy Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB Атакует, Уменьшает Special Defence врага. Критический удар! Whirlipede Italy теряет 12 здоровья. Whirlipede Italy промахивается Barbaracle GB Атакует, Накладывает Poison. Whirlipede Italy теряет 14 здоровья. Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB промахивается Whirlipede Italy промахивается Barbaracle GB растерянно попадает по себе. Barbaracle GB теряет 91 здоровья. Whirlipede Italy промахивается Barbaracle GB растерянно попадает по себе. Barbaracle GB теряет 91 здоровья. Whirlipede Italy промахивается Barbaracle GB Атакует, Уменьшает Special Defence врага. Whirlipede Italy теряет 9 здоровья. Whirlipede Italy теряет сознание. Scolipede Japan из команды желтых вступает в бой! Scolipede Japan промахивается Barbaracle GB Атакует, Накладывает Poison. Критический удар! Scolipede Japan теряет 45 здоровья. Scolipede Japan промахивается Barbaracle GB Атакует, Накладывает Poison. Scolipede Japan теряет 19 здоровья. Scolipede Japan Атакует, Уменьшает скорость врага. Критический удар! Barbaracle GB теряет 22 здоровья. Barbaracle GB промахивается Scolipede Japan промахивается Barbaracle GB промахивается Scolipede Japan Накладывает Confuse. Barbaracle GB увеличивает атаку. Barbaracle GB промахивается Scolipede Japan Атакует, Уменьшает скорость врага. Критический удар! Barbaracle GB теряет 34 здоровья. Barbaracle GB теряет сознание. В команде полосатых не осталось покемонов. Команда желтых побеждает в этом бою! Process finished with exit code 0