updated story processing for characters

This commit is contained in:
Alexander Karpov 2023-12-16 03:10:44 +03:00
parent 5498cfa5a3
commit 99126cdd9a
9 changed files with 103 additions and 56 deletions

View File

@ -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")
![UML Diagram](https://new.akarpov.ru/media/files/sanspie/xNdHx/123123123.svg "https://new.akarpov.ru/files/HaDSrkLmjVfoPTmXvQaw")

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -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";
}
}

View File

@ -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;
}
}

View File

@ -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);
}

View File

@ -1,7 +0,0 @@
package interfaces;
import story.StoryContext;
public interface Interactable {
void interact(StoryContext context);
}

View File

@ -1,7 +1,6 @@
package interfaces;
import story.StoryContext;
public interface Listenable {
String listen(StoryContext context);
String listen(String subject);
}

View File

@ -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);
}
}