Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 759892c388 | |||
| 1516215382 | |||
| 3c92334ba0 | |||
| 1af0e6d055 |
128
README.md
128
README.md
@ -49,6 +49,134 @@ graph TD;
|
|||||||
|
|
||||||
За историю отвечает класс *StoryTeller*. Он меняет состояние персонажей и отображает их состояние.
|
За историю отвечает класс *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 лабы
|
## Особенности 4 лабы
|
||||||
Есть два исключения: `OwnershipException` и `ExitFuelException`. `OwnershipException` - исключение при взятии чужой вещи.
|
Есть два исключения: `OwnershipException` и `ExitFuelException`. `OwnershipException` - исключение при взятии чужой вещи.
|
||||||
`ExitFuelException` возникает, когда у Карлсона кончается топливо.
|
`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;
|
package Characters;
|
||||||
|
|
||||||
import Annotations.ValidLength;
|
|
||||||
import Entity.Entity;
|
import Entity.Entity;
|
||||||
import Items.Item;
|
import Items.Item;
|
||||||
|
|
||||||
@ -26,8 +25,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
|||||||
|
|
||||||
private final Gender gender;
|
private final Gender gender;
|
||||||
private Entity position;
|
private Entity position;
|
||||||
|
|
||||||
@ValidLength
|
|
||||||
private String currentState = "";
|
private String currentState = "";
|
||||||
protected Feels feel;
|
protected Feels feel;
|
||||||
protected Item itemInHand;
|
protected Item itemInHand;
|
||||||
@ -65,7 +62,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
|||||||
|
|
||||||
protected final void setPosition(Entity obj) {
|
protected final void setPosition(Entity obj) {
|
||||||
this.position = obj;
|
this.position = obj;
|
||||||
this.validateFields();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public final String getState() {
|
public final String getState() {
|
||||||
@ -74,7 +70,6 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
|||||||
|
|
||||||
protected final void setState(String state) {
|
protected final void setState(String state) {
|
||||||
this.currentState = state;
|
this.currentState = state;
|
||||||
this.validateFields();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -94,34 +89,4 @@ public abstract class Character extends Entity implements IMovable, IFeelable, I
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(this.name, this.gender);
|
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