Uploaded by vikvav04

Otchet po Laboratornoy rabote 2 po programmirovaniyu

advertisement
Санкт-Петербургский Национальный Исследовательский Университет
Информационных Технологий, Механики и Оптики
ПИиКТ
Лабораторная работа №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
Download