Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 759892c388 | |||
| 1516215382 | |||
| 3c92334ba0 | |||
| 1af0e6d055 |
128
README.md
128
README.md
@ -49,6 +49,134 @@ graph TD;
|
||||
|
||||
За историю отвечает класс *StoryTeller*. Он меняет состояние персонажей и отображает их состояние.
|
||||
|
||||
## UML диаграмма
|
||||
```mermaid
|
||||
classDiagram
|
||||
direction BT
|
||||
class Character {
|
||||
# Feels feel
|
||||
# Item itemInHand
|
||||
- Gender gender
|
||||
- Entity position
|
||||
- String currentState
|
||||
+ setFeel(Feels) void
|
||||
+ getGender() String
|
||||
+ moveTo(Entity) void
|
||||
+ getState() String
|
||||
+ getPosition() Entity
|
||||
+ getItemInHand() Item
|
||||
+ grab(Item) void
|
||||
# setState(String) void
|
||||
# setPosition(Entity) void
|
||||
- validateFields() void
|
||||
- getValueForField(Object, Field) String?
|
||||
- setValueForField(Object, Field, String) void
|
||||
}
|
||||
class Container {
|
||||
- Item innerItem
|
||||
+ getInnerItem() Item
|
||||
}
|
||||
class Door {
|
||||
- boolean isOpen
|
||||
+ closeDoor() void
|
||||
+ openDoor() void
|
||||
}
|
||||
class Entity {
|
||||
# String name
|
||||
+ getName() String
|
||||
}
|
||||
class ExitFuelException
|
||||
class Feels {
|
||||
<<enumeration>>
|
||||
+ SAD
|
||||
+ SCARY
|
||||
+ RAGE
|
||||
+ DEAD_INSIDE
|
||||
+ ANGRY
|
||||
+ NORMAL
|
||||
- String feel
|
||||
+ valueOf(String) Feels
|
||||
+ toString() String
|
||||
+ values() Feels[]
|
||||
}
|
||||
class FrenBok {
|
||||
- IGrabbable characterInHand
|
||||
+ pushCharacterBehindItem(Item) void
|
||||
+ moveTo(Entity) void
|
||||
+ grab(Item) void
|
||||
+ grabCharacter(IGrabbable) void
|
||||
}
|
||||
class ICanTake {
|
||||
<<Interface>>
|
||||
+ grab(Item) void
|
||||
}
|
||||
class IFeelable {
|
||||
<<Interface>>
|
||||
+ setFeel(Feels) void
|
||||
}
|
||||
class IFlyable {
|
||||
<<Interface>>
|
||||
+ flyTo(Entity) void
|
||||
}
|
||||
class IGrabbable {
|
||||
<<Interface>>
|
||||
+ getGrabbablePart() String
|
||||
}
|
||||
class IMovable {
|
||||
<<Interface>>
|
||||
+ moveTo(Entity) void
|
||||
}
|
||||
class Item {
|
||||
- Character owner
|
||||
+ setOwner(Character) void
|
||||
+ equals(Object) boolean
|
||||
+ getOwner() Character
|
||||
}
|
||||
class Karlson {
|
||||
- Engine engine
|
||||
+ grab(Item) void
|
||||
+ flyTo(Entity) void
|
||||
+ moveTo(Entity) void
|
||||
+ grabFrom(Container) void
|
||||
+ stomp() void
|
||||
+ getGrabbablePart() String
|
||||
}
|
||||
class Main {
|
||||
+ main(String[]) void
|
||||
}
|
||||
class Malysh {
|
||||
- Mouth mouth
|
||||
+ moveTo(Entity) void
|
||||
+ speak(String) void
|
||||
+ grab(Item) void
|
||||
}
|
||||
class OwnershipException
|
||||
class StoryTeller {
|
||||
- FrenBok frenBok
|
||||
- Door door
|
||||
- Karlson karlson
|
||||
- Item meatball
|
||||
- Container fryingPan
|
||||
- Item kitchenHob
|
||||
- Malysh malysh
|
||||
+ play() void
|
||||
}
|
||||
|
||||
Character --> Entity
|
||||
Character ..> ICanTake
|
||||
Character ..> IFeelable
|
||||
Character ..> IMovable
|
||||
Container --> Item
|
||||
Door --> Item
|
||||
FrenBok --> Character
|
||||
IGrabbable --> IMovable
|
||||
Item --> Entity
|
||||
Karlson --> Character
|
||||
Karlson ..> IFlyable
|
||||
Karlson ..> IGrabbable
|
||||
Malysh --> Character
|
||||
```
|
||||
|
||||
## Особенности 4 лабы
|
||||
Есть два исключения: `OwnershipException` и `ExitFuelException`. `OwnershipException` - исключение при взятии чужой вещи.
|
||||
`ExitFuelException` возникает, когда у Карлсона кончается топливо.
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
package Annotations;
|
||||
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
@Target(ElementType.FIELD)
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
public @interface ValidLength {
|
||||
}
|
||||
@ -1,6 +1,5 @@
|
||||
package Characters;
|
||||
|
||||
import Annotations.ValidLength;
|
||||
import Entity.Entity;
|
||||
import Items.Item;
|
||||
|
||||
@ -26,8 +25,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
|
||||
private final Gender gender;
|
||||
private Entity position;
|
||||
|
||||
@ValidLength
|
||||
private String currentState = "";
|
||||
protected Feels feel;
|
||||
protected Item itemInHand;
|
||||
@ -65,7 +62,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
|
||||
protected final void setPosition(Entity obj) {
|
||||
this.position = obj;
|
||||
this.validateFields();
|
||||
}
|
||||
|
||||
public final String getState() {
|
||||
@ -74,7 +70,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
|
||||
protected final void setState(String state) {
|
||||
this.currentState = state;
|
||||
this.validateFields();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -94,34 +89,4 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
||||
public int hashCode() {
|
||||
return Objects.hash(this.name, this.gender);
|
||||
}
|
||||
|
||||
private void validateFields() {
|
||||
for (java.lang.reflect.Field field : Character.class.getDeclaredFields()) {
|
||||
if (field.isAnnotationPresent(ValidLength.class)) {
|
||||
String value = getValueForField(this, field);
|
||||
if (value.length() < 3 || value.length() > 20) {
|
||||
setValueForField(this, field, "unknown");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String getValueForField(Object obj, java.lang.reflect.Field field) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
return (String) field.get(obj);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void setValueForField(Object obj, java.lang.reflect.Field field, String value) {
|
||||
try {
|
||||
field.setAccessible(true);
|
||||
field.set(obj, value);
|
||||
} catch (IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user