feature: complete story
This commit is contained in:
parent
d8ff6d9f5b
commit
6e6393d738
21
README.md
21
README.md
@ -3,7 +3,7 @@
|
||||
|
||||
**ИСУ:** 408657
|
||||
|
||||
**Вариант:** 528475.3
|
||||
**Вариант:** ~528475.3
|
||||
|
||||
_Так как на se.ifmo сбросились варианты я взял текст напрямую из сказки._
|
||||
|
||||
@ -15,6 +15,23 @@ _Так как на se.ifmo сбросились варианты я взял т
|
||||
> распахнулась и ворвался Карлсон, тоже злой как чёрт. Он подлетел к Фрекен Бок и топнул ногой об пол.
|
||||
|
||||
## Вывод программы
|
||||
|
||||
```
|
||||
Кралсон дрогнул губой
|
||||
Кралсон надулся
|
||||
Он сделал шаг к плита
|
||||
Предмет тефтелька принадлежит Фрекен Бок, а не Кралсон
|
||||
Вот этого ему не следовало делать
|
||||
Фрекен Бок взревела от бешенства
|
||||
Она кинулась к Кралсон
|
||||
Она схватила Кралсон за шиворот
|
||||
Она вытолкнула Кралсон за Дверь
|
||||
Малыш был просто в отчаянии
|
||||
Он ничего не сказал
|
||||
Дверь распахнулась
|
||||
Он сделал шаг к Дверь
|
||||
Кралсон злой как чёрт
|
||||
Он подлетел к Фрекен Бок
|
||||
Кралсон топнул ногой
|
||||
```
|
||||
|
||||
## Структура проекта
|
||||
|
||||
@ -6,6 +6,23 @@ import Items.Item;
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class Character extends Entity implements IMovable, IFeelable, ICanTake {
|
||||
|
||||
public enum Gender {
|
||||
MAN("Он"),
|
||||
WOMAN("Она");
|
||||
|
||||
private final String gender;
|
||||
|
||||
Gender(String gender) {
|
||||
this.gender = gender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return gender;
|
||||
}
|
||||
}
|
||||
|
||||
private final Gender gender;
|
||||
private Entity position;
|
||||
private String currentState = "";
|
||||
@ -26,29 +43,32 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
return this.gender.toString();
|
||||
}
|
||||
|
||||
public abstract void setFeel(Feels feel);
|
||||
public final void setFeel(Feels feel) {
|
||||
this.feel = feel;
|
||||
this.setState(String.format("%s %s", this.getName(), feel));
|
||||
}
|
||||
|
||||
public abstract void moveTo(Entity obj);
|
||||
|
||||
public abstract void grab(Item obj) throws OwnershipException;
|
||||
|
||||
public Item getItemInHand() {
|
||||
public final Item getItemInHand() {
|
||||
return this.itemInHand;
|
||||
}
|
||||
|
||||
public Entity getPosition() {
|
||||
public final Entity getPosition() {
|
||||
return this.position;
|
||||
}
|
||||
|
||||
protected void setPosition(Entity obj) {
|
||||
protected final void setPosition(Entity obj) {
|
||||
this.position = obj;
|
||||
}
|
||||
|
||||
public String getState() {
|
||||
public final String getState() {
|
||||
return this.currentState;
|
||||
}
|
||||
|
||||
protected void setState(String state) {
|
||||
protected final void setState(String state) {
|
||||
this.currentState = state;
|
||||
}
|
||||
|
||||
@ -57,7 +77,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
return this.getName();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
|
||||
@ -1,11 +1,12 @@
|
||||
package Characters;
|
||||
|
||||
public enum Feels {
|
||||
ANGRY("злиться"),
|
||||
ANGRY("злой как чёрт"),
|
||||
SCARY("дрогнул губой"),
|
||||
SAD("надулся"),
|
||||
RAGE("взревела от бешенства"),
|
||||
NORMAL("нормально");
|
||||
NORMAL("нормально"),
|
||||
DEAD_INSIDE("был просто в отчаянии");
|
||||
|
||||
private final String feel;
|
||||
|
||||
|
||||
@ -10,12 +10,6 @@ public class FrenBok extends Character {
|
||||
super("Фрекен Бок", Gender.WOMAN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFeel(Feels feel) {
|
||||
this.feel = feel;
|
||||
this.setState(String.format("%s %s", this.getName(), feel));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(Entity obj) {
|
||||
this.setPosition(obj);
|
||||
@ -23,9 +17,12 @@ public class FrenBok extends Character {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grab(Item obj) {
|
||||
public void grab(Item obj) throws OwnershipException {
|
||||
this.itemInHand = obj;
|
||||
this.setState(String.format("%s взяла %s", this.getGender(), obj.getName()));
|
||||
this.setState(String.format("%s взяла %s", this.getGender(), obj));
|
||||
if (obj.getOwner() != this && obj.getOwner() != null) {
|
||||
throw new OwnershipException(String.format("Предмет %s принадлежит %s, а не %s", obj.getName(), obj.getOwner().getName(), this.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
public void grabCharacter(IGrabbable character) {
|
||||
|
||||
@ -1,17 +0,0 @@
|
||||
package Characters;
|
||||
|
||||
public enum Gender {
|
||||
MAN("Он"),
|
||||
WOMAN("Она");
|
||||
|
||||
private final String gender;
|
||||
|
||||
Gender(String gender) {
|
||||
this.gender = gender;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return gender;
|
||||
}
|
||||
}
|
||||
7
src/Characters/IFlyable.java
Normal file
7
src/Characters/IFlyable.java
Normal file
@ -0,0 +1,7 @@
|
||||
package Characters;
|
||||
|
||||
import Entity.*;
|
||||
|
||||
public interface IFlyable {
|
||||
void flyTo(Entity obj);
|
||||
}
|
||||
@ -4,7 +4,7 @@ import Entity.Entity;
|
||||
import Items.Container;
|
||||
import Items.Item;
|
||||
|
||||
public class Karlson extends Character implements IGrabbable {
|
||||
public class Karlson extends Character implements IGrabbable, IFlyable {
|
||||
public Karlson() {
|
||||
super("Кралсон", Gender.MAN);
|
||||
}
|
||||
@ -14,18 +14,17 @@ public class Karlson extends Character implements IGrabbable {
|
||||
this.feel = feel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFeel(Feels feel) {
|
||||
this.feel = feel;
|
||||
this.setState(String.format("%s %s", this.getName(), feel));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(Entity obj) {
|
||||
this.setPosition(obj);
|
||||
this.setState(String.format("%s сделал шаг к %s", this.getGender(), obj));
|
||||
}
|
||||
|
||||
public void flyTo(Entity obj) {
|
||||
this.moveTo(obj);
|
||||
this.setState(String.format("%s подлетел к %s", this.getGender(), obj));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grab(Item obj) throws OwnershipException {
|
||||
this.itemInHand = obj;
|
||||
@ -44,4 +43,8 @@ public class Karlson extends Character implements IGrabbable {
|
||||
public String getGrabbablePart() {
|
||||
return "шиворот";
|
||||
}
|
||||
|
||||
public void stomp() {
|
||||
this.setState(String.format("%s топнул ногой", this.getName()));
|
||||
}
|
||||
}
|
||||
|
||||
33
src/Characters/Malysh.java
Normal file
33
src/Characters/Malysh.java
Normal file
@ -0,0 +1,33 @@
|
||||
package Characters;
|
||||
|
||||
import Entity.Entity;
|
||||
import Items.Item;
|
||||
|
||||
public class Malysh extends Character {
|
||||
public Malysh() {
|
||||
super("Малыш", Gender.MAN ,Feels.NORMAL);
|
||||
}
|
||||
|
||||
public void speak(String speech) {
|
||||
if (speech == null) {
|
||||
this.setState(String.format("%s ничего не сказал", this.getGender()));
|
||||
return;
|
||||
}
|
||||
this.setState(String.format("%s сказал: \"%s\"", this.getName(), speech));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void moveTo(Entity obj) {
|
||||
this.setPosition(obj);
|
||||
this.setState(String.format("%s подошёл к %s", this.getGender(), obj));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void grab(Item obj) throws OwnershipException {
|
||||
this.itemInHand = obj;
|
||||
this.setState(String.format("%s присвоил себе %s", this.getGender(), obj));
|
||||
if (obj.getOwner() != this && obj.getOwner() != null) {
|
||||
throw new OwnershipException(String.format("Предмет %s принадлежит %s, а не %s", obj.getName(), obj.getOwner().getName(), this.getName()));
|
||||
}
|
||||
}
|
||||
}
|
||||
18
src/Items/Door.java
Normal file
18
src/Items/Door.java
Normal file
@ -0,0 +1,18 @@
|
||||
package Items;
|
||||
|
||||
public class Door extends Item {
|
||||
private boolean isOpen = false;
|
||||
|
||||
public Door() {
|
||||
super("Дверь");
|
||||
}
|
||||
|
||||
public void openDoor() {
|
||||
this.isOpen = true;
|
||||
System.out.println("Дверь закрылась");
|
||||
}
|
||||
public void closeDoor() {
|
||||
this.isOpen = false;
|
||||
System.out.println("Дверь распахнулась");
|
||||
}
|
||||
}
|
||||
@ -1,22 +1,22 @@
|
||||
package StoryTeller;
|
||||
|
||||
import Characters.Feels;
|
||||
import Characters.FrenBok;
|
||||
import Characters.Karlson;
|
||||
import Characters.OwnershipException;
|
||||
import Characters.*;
|
||||
import Characters.Character;
|
||||
import Items.Container;
|
||||
import Items.Door;
|
||||
import Items.Item;
|
||||
|
||||
public class StoryTeller {
|
||||
// Персонажи
|
||||
private final Karlson karlson = new Karlson();
|
||||
private final FrenBok frenBok = new FrenBok();
|
||||
private final Malysh malysh = new Malysh();
|
||||
|
||||
// Предметы
|
||||
private final Item kitchenHob = new Item("плита");
|
||||
private final Item meatball = new Item("тефтелька");
|
||||
private final Container fryingPan = new Container("сковородка", meatball, frenBok);
|
||||
private final Item door = new Item("дверь");
|
||||
private final Door door = new Door();
|
||||
|
||||
public void play() {
|
||||
karlson.setFeel(Feels.SCARY);
|
||||
@ -41,6 +41,19 @@ public class StoryTeller {
|
||||
System.out.println(frenBok.getState());
|
||||
frenBok.pushCharacterBehindItem(door);
|
||||
System.out.println(frenBok.getState());
|
||||
malysh.setFeel(Feels.DEAD_INSIDE);
|
||||
System.out.println(malysh.getState());
|
||||
malysh.speak(null);
|
||||
System.out.println(malysh.getState());
|
||||
door.closeDoor();
|
||||
karlson.moveTo(door);
|
||||
System.out.println(karlson.getState());
|
||||
karlson.setFeel(Feels.ANGRY);
|
||||
System.out.println(karlson.getState());
|
||||
karlson.flyTo(frenBok);
|
||||
System.out.println(karlson.getState());
|
||||
karlson.stomp();
|
||||
System.out.println(karlson.getState());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user