From 20f33961b8c264e4cdcac7e6cdd7a7bfb744cc93 Mon Sep 17 00:00:00 2001 From: LeterZP Date: Fri, 13 Feb 2026 19:59:26 +0300 Subject: [PATCH] ProgLab2/pass --- main/Main.java | 23 +++++++++++++++++++++++ moves/AuraSphere.java | 17 +++++++++++++++++ moves/Confide.java | 18 ++++++++++++++++++ moves/DoubleTeam.java | 18 ++++++++++++++++++ moves/Facade.java | 22 ++++++++++++++++++++++ moves/FocusBlast.java | 20 ++++++++++++++++++++ moves/Growl.java | 17 +++++++++++++++++ moves/Headbutt.java | 20 ++++++++++++++++++++ moves/Rest.java | 18 ++++++++++++++++++ moves/RockSlide.java | 19 +++++++++++++++++++ moves/RockTomb.java | 18 ++++++++++++++++++ moves/Thunder.java | 19 +++++++++++++++++++ moves/Thunderbolt.java | 19 +++++++++++++++++++ pokemons/Cranidos.java | 13 +++++++++++++ pokemons/Dialga.java | 13 +++++++++++++ pokemons/Nidoqueen.java | 11 +++++++++++ pokemons/NidoranF.java | 13 +++++++++++++ pokemons/Nidorina.java | 11 +++++++++++ pokemons/Rampardos.java | 11 +++++++++++ 19 files changed, 320 insertions(+) create mode 100644 main/Main.java create mode 100644 moves/AuraSphere.java create mode 100644 moves/Confide.java create mode 100644 moves/DoubleTeam.java create mode 100644 moves/Facade.java create mode 100644 moves/FocusBlast.java create mode 100644 moves/Growl.java create mode 100644 moves/Headbutt.java create mode 100644 moves/Rest.java create mode 100644 moves/RockSlide.java create mode 100644 moves/RockTomb.java create mode 100644 moves/Thunder.java create mode 100644 moves/Thunderbolt.java create mode 100644 pokemons/Cranidos.java create mode 100644 pokemons/Dialga.java create mode 100644 pokemons/Nidoqueen.java create mode 100644 pokemons/NidoranF.java create mode 100644 pokemons/Nidorina.java create mode 100644 pokemons/Rampardos.java diff --git a/main/Main.java b/main/Main.java new file mode 100644 index 0000000..242c094 --- /dev/null +++ b/main/Main.java @@ -0,0 +1,23 @@ +package main; + +import ru.ifmo.se.pokemon.*; +import pokemons.*; + +public class Main { + public static void main(String[] args){ + Battle b = new Battle(); + Pokemon p1 = new Dialga("Dialga", 1); + Pokemon p2 = new Cranidos("Cranidos", 1); + Pokemon p3 = new Rampardos("Rampardos", 1); + Pokemon p4 = new NidoranF("NidoranF", 1); + Pokemon p5 = new Nidorina("Nidorina", 1); + Pokemon p6 = new Nidoqueen("Nidoqueen", 1); + b.addAlly(p1); + b.addAlly(p2); + b.addAlly(p3); + b.addFoe(p4); + b.addFoe(p5); + b.addFoe(p6); + b.go(); + } +} \ No newline at end of file diff --git a/moves/AuraSphere.java b/moves/AuraSphere.java new file mode 100644 index 0000000..79d6576 --- /dev/null +++ b/moves/AuraSphere.java @@ -0,0 +1,17 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class AuraSphere extends SpecialMove { + public AuraSphere() { + super(Type.FIGHTING, 80, 1); + } + + @Override protected boolean checkAccuracy(Pokemon att, Pokemon def) { + return true; + } + + @Override protected String describe() { + return "выпускает шар ауры"; + } +} \ No newline at end of file diff --git a/moves/Confide.java b/moves/Confide.java new file mode 100644 index 0000000..6331028 --- /dev/null +++ b/moves/Confide.java @@ -0,0 +1,18 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Confide extends StatusMove { + public Confide() { + super(Type.NORMAL, 0, 1); + } + + @Override protected void applyOppEffects(Pokemon p) { + Effect e = new Effect().stat(Stat.SPECIAL_ATTACK, -1); + p.addEffect(e); + } + + @Override protected String describe() { + return "отвлекает противника"; + } +} \ No newline at end of file diff --git a/moves/DoubleTeam.java b/moves/DoubleTeam.java new file mode 100644 index 0000000..8c78724 --- /dev/null +++ b/moves/DoubleTeam.java @@ -0,0 +1,18 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class DoubleTeam extends StatusMove { + public DoubleTeam() { + super(Type.NORMAL, 0, 1); + } + + @Override protected void applySelfEffects(Pokemon p) { + Effect e = new Effect().stat(Stat.EVASION, 1); + p.addEffect(e); + } + + @Override protected String describe() { + return "быстро перемещается"; + } +} \ No newline at end of file diff --git a/moves/Facade.java b/moves/Facade.java new file mode 100644 index 0000000..269e562 --- /dev/null +++ b/moves/Facade.java @@ -0,0 +1,22 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Facade extends PhysicalMove { + public Facade() { + super(Type.NORMAL, 70, 1); + } + + @Override protected void applySelfEffects(Pokemon p) { + if (p.getCondition() == Status.PARALYZE || + p.getCondition() == Status.BURN || + p.getCondition() == Status.POISON) { + Effect e = new Effect().stat(Stat.ATTACK, 1); + p.addEffect(e); + } + } + + @Override protected String describe() { + return "показывает силу"; + } +} diff --git a/moves/FocusBlast.java b/moves/FocusBlast.java new file mode 100644 index 0000000..960c8ba --- /dev/null +++ b/moves/FocusBlast.java @@ -0,0 +1,20 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class FocusBlast extends SpecialMove { + public FocusBlast() { + super(Type.FIGHTING, 120, 0.7); + } + + @Override protected void applyOppEffects(Pokemon p) { + if (Math.random() < 0.1) { + Effect e = new Effect().stat(Stat.SPECIAL_DEFENSE, -1); + p.addEffect(e); + } + } + + @Override protected String describe() { + return "ментально атакует противника"; + } +} diff --git a/moves/Growl.java b/moves/Growl.java new file mode 100644 index 0000000..eb90619 --- /dev/null +++ b/moves/Growl.java @@ -0,0 +1,17 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Growl extends StatusMove { + public Growl() { + super(Type.NORMAL, 0, 1); + } + + @Override protected void applyOppEffects(Pokemon p) { + p.addEffect(new Effect().stat(Stat.ATTACK, -1)); + } + + @Override protected String describe() { + return "рычит на противника"; + } +} diff --git a/moves/Headbutt.java b/moves/Headbutt.java new file mode 100644 index 0000000..48ee9e0 --- /dev/null +++ b/moves/Headbutt.java @@ -0,0 +1,20 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Headbutt extends PhysicalMove { + + public Headbutt() { + super(Type.NORMAL, 70, 1); + } + + @Override protected void applyOppEffects(Pokemon p) { + if (Math.random() < 0.3) { + Effect.flinch(p); + } + } + + @Override protected String describe() { + return "ударяет противника головой"; + } +} diff --git a/moves/Rest.java b/moves/Rest.java new file mode 100644 index 0000000..cfa8f27 --- /dev/null +++ b/moves/Rest.java @@ -0,0 +1,18 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Rest extends StatusMove { + public Rest() { + super(Type.PSYCHIC, 0, 1); + } + + @Override protected void applySelfEffects(Pokemon p) { + p.addEffect(new Effect().stat(Stat.HP, (int) -(12 - p.getHP())).turns(1)); + p.addEffect(new Effect().attack(0).turns(2)); + } + + @Override protected String describe() { + return "решает отдохнуть"; + } +} diff --git a/moves/RockSlide.java b/moves/RockSlide.java new file mode 100644 index 0000000..734df53 --- /dev/null +++ b/moves/RockSlide.java @@ -0,0 +1,19 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class RockSlide extends PhysicalMove { + public RockSlide() { + super(Type.ROCK, 75, 0.9); + } + + @Override protected void applyOppEffects(Pokemon p) { + if (Math.random() < 0.3) { + Effect.flinch(p); + } + } + + @Override protected String describe() { + return "скидывает булыжник"; + } +} diff --git a/moves/RockTomb.java b/moves/RockTomb.java new file mode 100644 index 0000000..350772d --- /dev/null +++ b/moves/RockTomb.java @@ -0,0 +1,18 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class RockTomb extends PhysicalMove { + public RockTomb() { + super(Type.ROCK, 60, 0.95); + } + + @Override protected void applyOppEffects(Pokemon p) { + Effect e = new Effect().stat(Stat.SPEED, -1); + p.addEffect(e); + } + + @Override protected String describe() { + return "запускает камни в противника"; + } +} diff --git a/moves/Thunder.java b/moves/Thunder.java new file mode 100644 index 0000000..b7bd391 --- /dev/null +++ b/moves/Thunder.java @@ -0,0 +1,19 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Thunder extends SpecialMove { + public Thunder() { + super(Type.ELECTRIC, 110, 0.7); + } + + @Override protected void applyOppEffects(Pokemon p) { + if (Math.random() < 0.3) { + Effect.paralyze(p); + } + } + + @Override protected String describe() { + return "вызывает Грозу"; + } +} \ No newline at end of file diff --git a/moves/Thunderbolt.java b/moves/Thunderbolt.java new file mode 100644 index 0000000..e0e93f2 --- /dev/null +++ b/moves/Thunderbolt.java @@ -0,0 +1,19 @@ +package moves; + +import ru.ifmo.se.pokemon.*; + +public final class Thunderbolt extends SpecialMove { + public Thunderbolt() { + super(Type.ELECTRIC, 90, 1); + } + + @Override protected void applyOppEffects(Pokemon p) { + if (Math.random() < 0.1) { + Effect.paralyze(p); + } + } + + @Override protected String describe() { + return "вызывает молнию"; + } +} diff --git a/pokemons/Cranidos.java b/pokemons/Cranidos.java new file mode 100644 index 0000000..5426a93 --- /dev/null +++ b/pokemons/Cranidos.java @@ -0,0 +1,13 @@ +package pokemons; + +import ru.ifmo.se.pokemon.*; +import moves.*; + +public class Cranidos extends Pokemon { + public Cranidos(String name, int level) { + super(name, level); + setStats(12, 8, 6, 6, 6, 6); + setType(Type.ROCK); + setMove(new Facade(), new Headbutt(), new RockTomb()); + } +} \ No newline at end of file diff --git a/pokemons/Dialga.java b/pokemons/Dialga.java new file mode 100644 index 0000000..8ea9083 --- /dev/null +++ b/pokemons/Dialga.java @@ -0,0 +1,13 @@ +package pokemons; + +import ru.ifmo.se.pokemon.*; +import moves.*; + +public final class Dialga extends Pokemon { + public Dialga(String name, int level) { + super(name, level); + setStats(13, 8, 8, 8, 7, 7); + setType(Type.STEEL, Type.DRAGON); + setMove(new Confide(), new Thunder(), new DoubleTeam(), new AuraSphere()); + } +} diff --git a/pokemons/Nidoqueen.java b/pokemons/Nidoqueen.java new file mode 100644 index 0000000..513cb93 --- /dev/null +++ b/pokemons/Nidoqueen.java @@ -0,0 +1,11 @@ +package pokemons; + +import moves.*; + +public final class Nidoqueen extends Nidorina { + public Nidoqueen(String name, int level) { + super(name, level); + setStats(13, 7, 7, 7, 7, 7); + addMove(new RockSlide()); + } +} diff --git a/pokemons/NidoranF.java b/pokemons/NidoranF.java new file mode 100644 index 0000000..cd8460f --- /dev/null +++ b/pokemons/NidoranF.java @@ -0,0 +1,13 @@ +package pokemons; + +import ru.ifmo.se.pokemon.*; +import moves.*; + +public class NidoranF extends Pokemon { + public NidoranF(String name, int level) { + super(name, level); + setStats(12, 6, 6, 6, 6, 6); + setType(Type.POISON); + setMove(new Thunderbolt(), new Rest()); + } +} diff --git a/pokemons/Nidorina.java b/pokemons/Nidorina.java new file mode 100644 index 0000000..6f53070 --- /dev/null +++ b/pokemons/Nidorina.java @@ -0,0 +1,11 @@ +package pokemons; + +import moves.*; + +public class Nidorina extends NidoranF { + public Nidorina(String name, int level) { + super(name, level); + setStats(13, 6, 6, 6, 6, 6); + addMove(new Growl()); + } +} diff --git a/pokemons/Rampardos.java b/pokemons/Rampardos.java new file mode 100644 index 0000000..6869ec7 --- /dev/null +++ b/pokemons/Rampardos.java @@ -0,0 +1,11 @@ +package pokemons; + +import moves.*; + +public final class Rampardos extends Cranidos { + public Rampardos(String name, int level) { + super(name, level); + setStats(13, 8, 6, 6, 6, 6); + addMove(new FocusBlast()); + } +}