diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ee936c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.iml +out +.idea diff --git a/Main.java b/Main.java index f012ef2..0ab8069 100644 --- a/Main.java +++ b/Main.java @@ -1,9 +1,17 @@ +import Pokemons.Gallade; +import Pokemons.Kirlia; +import Pokemons.Volcanion; import ru.ifmo.se.pokemon.*; // Вариант 6310199 public class Main { - static public void main(String args[]) { - System.out.println("Hello world"); - }; -} \ No newline at end of file + static public void main(String[] args) { + Battle b = new Battle(); + Pokemon p1 = new Gallade("Чужой", 1); + Pokemon p2 = new Volcanion("Хищник", 1); + b.addAlly(p1); + b.addFoe(p2); + b.go(); + } +} diff --git a/Moves/Blizzard.java b/Moves/Blizzard.java new file mode 100644 index 0000000..b01c5fb --- /dev/null +++ b/Moves/Blizzard.java @@ -0,0 +1,24 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.SpecialMove; +import ru.ifmo.se.pokemon.Type; + +public class Blizzard extends SpecialMove { + public Blizzard() { + super(Type.ICE, 110, 70); + } + + @Override + public void applyOppEffects(Pokemon p) { + if (Math.random() < 0.1) { + Effect.freeze(p); + } + } + + @Override + public String describe() { + return "близзует"; + } +} diff --git a/Moves/BodySlam.java b/Moves/BodySlam.java new file mode 100644 index 0000000..b9990e9 --- /dev/null +++ b/Moves/BodySlam.java @@ -0,0 +1,24 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.PhysicalMove; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Type; + +public class BodySlam extends PhysicalMove { + public BodySlam() { + super(Type.NORMAL, 85, 100); + } + + @Override + public void applyOppEffects(Pokemon p) { + if (Math.random() < 0.3) { + Effect.paralyze(p); + } + } + + @Override + public String describe() { + return "слэмит"; + } +} diff --git a/Moves/CalmMind.java b/Moves/CalmMind.java new file mode 100644 index 0000000..9f5faff --- /dev/null +++ b/Moves/CalmMind.java @@ -0,0 +1,18 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Stat; +import ru.ifmo.se.pokemon.StatusMove; + +public class CalmMind extends StatusMove { + @Override + public void applySelfEffects(Pokemon p) { + p.addEffect(new Effect().stat(Stat.SPECIAL_ATTACK, 1).stat(Stat.SPECIAL_DEFENSE, 1)); + } + + @Override + public String describe() { + return "выносит мозг"; + } +} diff --git a/Moves/DazzlingGleam.java b/Moves/DazzlingGleam.java new file mode 100644 index 0000000..4e88b6e --- /dev/null +++ b/Moves/DazzlingGleam.java @@ -0,0 +1,15 @@ +package Moves; + +import ru.ifmo.se.pokemon.SpecialMove; +import ru.ifmo.se.pokemon.Type; + +public class DazzlingGleam extends SpecialMove { + public DazzlingGleam() { + super(Type.FAIRY, 80, 100); + } + + @Override + public String describe() { + return "глемует"; + } +} diff --git a/Moves/DoubleTeam.java b/Moves/DoubleTeam.java new file mode 100644 index 0000000..4f16f42 --- /dev/null +++ b/Moves/DoubleTeam.java @@ -0,0 +1,18 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Stat; +import ru.ifmo.se.pokemon.StatusMove; + +public class DoubleTeam extends StatusMove { + @Override + public void applyOppEffects(Pokemon p) { + p.addEffect(new Effect().stat(Stat.EVASION, 1)); + } + + @Override + public String describe() { + return "кооперируется"; + } +} diff --git a/Moves/DrainingKiss.java b/Moves/DrainingKiss.java new file mode 100644 index 0000000..1089022 --- /dev/null +++ b/Moves/DrainingKiss.java @@ -0,0 +1,19 @@ +package Moves; + +import ru.ifmo.se.pokemon.*; + +public class DrainingKiss extends SpecialMove { + public DrainingKiss() { + super(Type.FAIRY, 50, 100); + } + + @Override + public void applySelfEffects(Pokemon p) { + p.setMod(Stat.HP, -(int)(p.getHP()*0.75)); + } + + @Override + public String describe() { + return "целует"; + } +} diff --git a/Moves/FocusBlast.java b/Moves/FocusBlast.java new file mode 100644 index 0000000..3f4a152 --- /dev/null +++ b/Moves/FocusBlast.java @@ -0,0 +1,19 @@ +package Moves; + +import ru.ifmo.se.pokemon.*; + +public class FocusBlast extends SpecialMove { + public FocusBlast() { + super(Type.FIGHTING, 120, 70); + } + + @Override + public void applyOppEffects(Pokemon p) { + p.addEffect(new Effect().chance(0.1).stat(Stat.SPECIAL_DEFENSE, -1)); + } + + @Override + public String describe() { + return "фокусируется"; + } +} diff --git a/Moves/Growl.java b/Moves/Growl.java new file mode 100644 index 0000000..c9b211d --- /dev/null +++ b/Moves/Growl.java @@ -0,0 +1,18 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Stat; +import ru.ifmo.se.pokemon.StatusMove; + +public class Growl extends StatusMove { + @Override + public void applyOppEffects(Pokemon p) { + p.addEffect(new Effect().stat(Stat.ATTACK, -6).turns(1)); + } + + @Override + public String describe() { + return "орёт"; + } +} diff --git a/Moves/HydroPump.java b/Moves/HydroPump.java new file mode 100644 index 0000000..f1ab720 --- /dev/null +++ b/Moves/HydroPump.java @@ -0,0 +1,15 @@ +package Moves; + +import ru.ifmo.se.pokemon.SpecialMove; +import ru.ifmo.se.pokemon.Type; + +public class HydroPump extends SpecialMove { + public HydroPump() { + super(Type.WATER, 110, 80); + } + + @Override + public String describe() { + return "плюётся"; + } +} diff --git a/Moves/Swagger.java b/Moves/Swagger.java new file mode 100644 index 0000000..2f5f248 --- /dev/null +++ b/Moves/Swagger.java @@ -0,0 +1,19 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Stat; +import ru.ifmo.se.pokemon.StatusMove; + +public class Swagger extends StatusMove { + @Override + public void applyOppEffects(Pokemon p) { + Effect.confuse(p); + p.addEffect(new Effect().stat(Stat.ATTACK, 2)); + } + + @Override + public String describe() { + return "кичлюет"; + } +} diff --git a/Moves/ZenHeadbutt.java b/Moves/ZenHeadbutt.java new file mode 100644 index 0000000..3900ffa --- /dev/null +++ b/Moves/ZenHeadbutt.java @@ -0,0 +1,23 @@ +package Moves; + +import ru.ifmo.se.pokemon.Effect; +import ru.ifmo.se.pokemon.PhysicalMove; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Type; + +public class ZenHeadbutt extends PhysicalMove { + public ZenHeadbutt() { + super(Type.PSYCHIC, 80, 90); + } + @Override + public void applyOppEffects(Pokemon p) { + if (Math.random() < 0.2) { + Effect.flinch(p); + } + } + + @Override + public String describe() { + return "головокрушит"; + } +} diff --git a/Pokemons/Gallade.java b/Pokemons/Gallade.java new file mode 100644 index 0000000..7fe8c54 --- /dev/null +++ b/Pokemons/Gallade.java @@ -0,0 +1,14 @@ +package Pokemons; + +import Moves.Swagger; +import ru.ifmo.se.pokemon.Type; + +public class Gallade extends Kirlia { + + public Gallade(String name, int level) { + super(name, level); + setType(Type.PSYCHIC, Type.FIGHTING); + setStats(68, 125, 65, 65, 115, 80); + addMove(new Swagger()); + } +} diff --git a/Pokemons/Kirlia.java b/Pokemons/Kirlia.java new file mode 100644 index 0000000..c132767 --- /dev/null +++ b/Pokemons/Kirlia.java @@ -0,0 +1,12 @@ +package Pokemons; + +import Moves.DrainingKiss; + +public class Kirlia extends Ralts { + + public Kirlia(String name, int level) { + super(name, level); + setStats(38, 35, 35, 65, 55, 50); + addMove(new DrainingKiss()); + } +} diff --git a/Pokemons/Ralts.java b/Pokemons/Ralts.java new file mode 100644 index 0000000..7bed900 --- /dev/null +++ b/Pokemons/Ralts.java @@ -0,0 +1,15 @@ +package Pokemons; + +import Moves.CalmMind; +import Moves.DazzlingGleam; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Type; + +public class Ralts extends Pokemon { + public Ralts(String name, int level) { + super(name, level); + setType(Type.PSYCHIC, Type.FAIRY); + setStats(28, 25, 25, 45, 35, 40); + setMove(new CalmMind(), new DazzlingGleam()); + } +} diff --git a/Pokemons/Slowking.java b/Pokemons/Slowking.java new file mode 100644 index 0000000..1fd5868 --- /dev/null +++ b/Pokemons/Slowking.java @@ -0,0 +1,11 @@ +package Pokemons; + +import Moves.FocusBlast; + +public class Slowking extends Slowpoke { + public Slowking(String name, int level) { + super(name, level); + setStats(95, 75, 80, 110, 110, 30); + addMove(new FocusBlast()); + } +} diff --git a/Pokemons/Slowpoke.java b/Pokemons/Slowpoke.java new file mode 100644 index 0000000..602a138 --- /dev/null +++ b/Pokemons/Slowpoke.java @@ -0,0 +1,16 @@ +package Pokemons; + +import Moves.Blizzard; +import Moves.Growl; +import Moves.ZenHeadbutt; +import ru.ifmo.se.pokemon.Pokemon; +import ru.ifmo.se.pokemon.Type; + +public class Slowpoke extends Pokemon { + public Slowpoke(String name, int level) { + super(name, level); + setType(Type.WATER, Type.PSYCHIC); + setStats(90, 65, 65, 40, 40, 15); + setMove(new ZenHeadbutt(), new Growl(), new Blizzard()); + } +} diff --git a/Pokemons/Volcanion.java b/Pokemons/Volcanion.java new file mode 100644 index 0000000..bc385ed --- /dev/null +++ b/Pokemons/Volcanion.java @@ -0,0 +1,16 @@ +package Pokemons; + +import Moves.BodySlam; +import Moves.DoubleTeam; +import Moves.HydroPump; +import Moves.Swagger; +import ru.ifmo.se.pokemon.*; + +public class Volcanion extends Pokemon { + public Volcanion(String name, int level) { + super(name, level); + setType(Type.FIRE, Type.WATER); + setStats(80, 110, 120, 130, 90, 70); + setMove(new Swagger(), new HydroPump(), new BodySlam(), new DoubleTeam()); + } +}