From 99126cdd9ac7a208c95e23d30e222fecc84b661d Mon Sep 17 00:00:00 2001 From: Alexander-D-Karpov Date: Sat, 16 Dec 2023 03:10:44 +0300 Subject: [PATCH] updated story processing for characters --- README.md | 30 +++++++++++++++++++--------- src/characters/Character.java | 28 +++++++++++++++++++------- src/characters/Child.java | 32 +++++++++++++++++++----------- src/characters/Traveler.java | 9 ++++----- src/characters/Znayka.java | 34 +++++++++++++++++++++++--------- src/interfaces/Conversable.java | 5 +++-- src/interfaces/Interactable.java | 7 ------- src/interfaces/Listenable.java | 3 +-- src/model/House.java | 11 ++++++++--- 9 files changed, 103 insertions(+), 56 deletions(-) delete mode 100644 src/interfaces/Interactable.java diff --git a/README.md b/README.md index d836e0d..855cffc 100644 --- a/README.md +++ b/README.md @@ -45,19 +45,31 @@ ## Output ``` -Жители Домик Знайки собираются чтобы рассказать истории +Жители собираются в Домик Знайки чтобы рассказать истории Все жители, и малыши и малышки, приходили по вечерам к Домик Знайки и слушали рассказы путешественников. Жизнь в Цветочный город потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому. -Жители Домик Знайки собираются чтобы рассказать истории -Знайка рассказывает историю о путешествие Знайки в Зеленый город -Малыш слушает историю о путешествие Знайки и спрашивает вопросы о путешествие Знайки в Зеленый город -Малышка слушает историю о путешествие Знайки и спрашивает вопросы о путешествие Знайки в Зеленый город -Знайка рассказывает историю о жизнь в Цветочном городе -Малыш слушает историю о путешествие Знайки и спрашивает вопросы о жизнь в Цветочном городе -Малышка слушает историю о путешествие Знайки и спрашивает вопросы о жизнь в Цветочном городе +Жители собираются в Домик Знайки чтобы рассказать истории +Знайка умно рассказывает историю о путешествия Знайки особенно про путешествие в Зеленый город +и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась + +Малыш слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город +и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась + +Малышка слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город +и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась + +Знайка умно рассказывает историю о путешествия Знайки особенно про жизнь в Цветочном городе +и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась + +Малыш слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе +и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась + +Малышка слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе +и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась + Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения. ``` ## UML Diagram -![UML Diagram](https://new.akarpov.ru/media/files/sanspie/tFfur/diagram.svg "https://new.akarpov.ru/files/PRaEOtISfNJAvOZYJbiO") \ No newline at end of file +![UML Diagram](https://new.akarpov.ru/media/files/sanspie/xNdHx/123123123.svg "https://new.akarpov.ru/files/HaDSrkLmjVfoPTmXvQaw") \ No newline at end of file diff --git a/src/characters/Character.java b/src/characters/Character.java index 53f60f3..c395a22 100644 --- a/src/characters/Character.java +++ b/src/characters/Character.java @@ -3,11 +3,15 @@ package characters; import enums.CharacterType; import interfaces.Conversable; import interfaces.Listenable; +import story.StoryContext; import story.StoryElement; +import java.util.Objects; + public abstract class Character extends StoryElement implements Listenable, Conversable { protected CharacterType type; protected String name; + protected StoryContext context; public Character(CharacterType type, String name) { super(type + " " + name); @@ -15,16 +19,26 @@ public abstract class Character extends StoryElement implements Listenable, Conv this.name = name; } - public boolean equals(Character character) { - return this.name.equals(character.name) && this.type.equals(character.type); + public void setContext(StoryContext context) { + this.context = context; } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Character other = (Character) obj; + return Objects.equals(name, other.name) && type == other.type; + } + + @Override + public int hashCode() { + return Objects.hash(name, type); + } + + public String toString() { return name + " (" + type + ")"; } - - public int hashCode() { - // seems legit to me - return name.hashCode() * type.hashCode(); - } } diff --git a/src/characters/Child.java b/src/characters/Child.java index 34f4424..4441ffc 100644 --- a/src/characters/Child.java +++ b/src/characters/Child.java @@ -1,9 +1,9 @@ package characters; import enums.CharacterType; -import story.StoryContext; public class Child extends Character { + String thoughts = ""; public Child(String name) { super(CharacterType.CHILD, name); @@ -11,21 +11,29 @@ public class Child extends Character { // Child can listen to stories about the city and ask questions about the subject of the story - public String listenAbout(String context) { - return name + " слушает историю о " + context; + public void think(String story) { + if (story.contains("город")) { + this.thoughts += "Я никогда не был в городе, но история о " + context.getStoryContext() + " мне очень понравилась\n"; + } else if (story.contains("путешествие")) { + this.thoughts += "Не люблю я путешествовать, но история о " + context.getStoryContext() + " мне очень понравилась\n"; + } + else { + this.thoughts += "Интересная получается история о " + context.getStoryContext() + "\n"; + } } - public String listenAbout(String context, String subject) { - return name + " слушает историю о " + context + " и спрашивает вопросы о " + subject; + public String converse(String subject) { + String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject + + "\n" + "и думает: " + this.thoughts; + this.thoughts = ""; + return response; } @Override - public String converse(StoryContext context, String subject) { - return listenAbout(context.getStoryContext(), subject); - } - - @Override - public String listen(StoryContext context) { - return listenAbout(context.getStoryContext()); + public String listen(String subject) { + String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject + + "\n" + "и думает: " + this.thoughts; + this.thoughts = ""; + return response; } } \ No newline at end of file diff --git a/src/characters/Traveler.java b/src/characters/Traveler.java index 7343d5f..9de2abe 100644 --- a/src/characters/Traveler.java +++ b/src/characters/Traveler.java @@ -1,7 +1,6 @@ package characters; import enums.CharacterType; -import story.StoryContext; public abstract class Traveler extends Character { @@ -12,12 +11,12 @@ public abstract class Traveler extends Character { // Traveler can tell stories about his adventures and listen to stories about the city, but dont ask questions @Override - public String listen(StoryContext context) { - return name + " слушает историю о " + context.getStoryContext(); + public String converse(String subject) { + return this.name + " рассказывает историю о " + context.getStoryContext() + "\n"; } @Override - public String converse(StoryContext context, String subject) { - return name + " рассказывает историю о " + subject; + public String listen(String subject) { + return this.name + " слушает историю о " + context.getStoryContext() + "\n"; } } diff --git a/src/characters/Znayka.java b/src/characters/Znayka.java index 592cf79..4fd9d24 100644 --- a/src/characters/Znayka.java +++ b/src/characters/Znayka.java @@ -1,21 +1,37 @@ package characters; -import interfaces.Conversable; -import interfaces.Listenable; -import story.StoryContext; - -public class Znayka extends Traveler implements Listenable, Conversable { +public class Znayka extends Traveler { + String thoughts = ""; public Znayka() { super("Знайка"); } + @Override - public String listen(StoryContext context) { - return name + " умно слушает историю о " + context.getStoryContext(); + public void think(String story) { + if (story.contains("город")) { + this.thoughts += "Немного я знаю о городах, но история о " + context.getStoryContext() + " мне очень понравилась\n"; + } else if (story.contains("путешествие")) { + this.thoughts += "Я люблю путешествовать, история о " + context.getStoryContext() + " мне очень понравилась\n"; + } + else { + this.thoughts += "Интересная получается история о " + context.getStoryContext() + "\n"; + } } @Override - public String converse(StoryContext context, String subject) { - return name + " умно рассказывает историю о " + subject; + public String converse(String subject) { + String response = name + " умно рассказывает историю о " + context.getStoryContext() + " особенно про " + subject + + "\n" + "и думает: " + this.thoughts; + this.thoughts = ""; + return response; + } + + @Override + public String listen(String subject) { + String response = name + " умно слушает историю о " + context.getStoryContext() + " особенно про " + subject + + "\n" + "и думает: " + this.thoughts; + this.thoughts = ""; + return response; } } diff --git a/src/interfaces/Conversable.java b/src/interfaces/Conversable.java index 09813a9..b701caa 100644 --- a/src/interfaces/Conversable.java +++ b/src/interfaces/Conversable.java @@ -1,7 +1,8 @@ package interfaces; -import story.StoryContext; public interface Conversable { - String converse(StoryContext context, String subject); + String converse(String subject); + + void think(String story); } diff --git a/src/interfaces/Interactable.java b/src/interfaces/Interactable.java deleted file mode 100644 index bc9b024..0000000 --- a/src/interfaces/Interactable.java +++ /dev/null @@ -1,7 +0,0 @@ -package interfaces; - -import story.StoryContext; - -public interface Interactable { - void interact(StoryContext context); -} \ No newline at end of file diff --git a/src/interfaces/Listenable.java b/src/interfaces/Listenable.java index 3d8ab7e..a5b29c3 100644 --- a/src/interfaces/Listenable.java +++ b/src/interfaces/Listenable.java @@ -1,7 +1,6 @@ package interfaces; -import story.StoryContext; public interface Listenable { - String listen(StoryContext context); + String listen(String subject); } \ No newline at end of file diff --git a/src/model/House.java b/src/model/House.java index 107a7b7..e7e3e6f 100644 --- a/src/model/House.java +++ b/src/model/House.java @@ -39,18 +39,23 @@ public class House extends StoryElement { context.gatherResidentsForStories(); context.getCity().returnToDailyLifeWithChanges(); + for (Character resident : this.getResidents()) { + resident.setContext(context); + } + this.gatherResidents(); for (String subject: subjects) { for (Character resident : this.getResidents()) { - String event; // if (resident instanceof Traveler) { // event = resident.converse(context, subject); // } else { // event = resident.listen(context); // } // now can just converse for everyone - event = resident.converse(context, subject); - System.out.println(event); + + resident.think(subject); + String response = resident.converse(subject); + System.out.println(response); } }