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 ## Output
``` ```
Жители Домик Знайки собираются чтобы рассказать истории Жители собираются в Домик Знайки чтобы рассказать истории
Все жители, и малыши и малышки, приходили по вечерам к Домик Знайки и слушали рассказы путешественников. Все жители, и малыши и малышки, приходили по вечерам к Домик Знайки и слушали рассказы путешественников.
Жизнь в Цветочный город потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому. Жизнь в Цветочный город потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.
Жители Домик Знайки собираются чтобы рассказать истории Жители собираются в Домик Знайки чтобы рассказать истории
Знайка рассказывает историю о путешествие Знайки в Зеленый город Знайка умно рассказывает историю о путешествия Знайки особенно про путешествие в Зеленый город
Малыш слушает историю о путешествие Знайки и спрашивает вопросы о путешествие Знайки в Зеленый город и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась
Малышка слушает историю о путешествие Знайки и спрашивает вопросы о путешествие Знайки в Зеленый город
Знайка рассказывает историю о жизнь в Цветочном городе Малыш слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город
Малыш слушает историю о путешествие Знайки и спрашивает вопросы о жизнь в Цветочном городе и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
Малышка слушает историю о путешествие Знайки и спрашивает вопросы о жизнь в Цветочном городе
Малышка слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
Знайка умно рассказывает историю о путешествия Знайки особенно про жизнь в Цветочном городе
и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась
Малыш слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
Малышка слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения. Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения.
``` ```
## UML Diagram ## 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 enums.CharacterType;
import interfaces.Conversable; import interfaces.Conversable;
import interfaces.Listenable; import interfaces.Listenable;
import story.StoryContext;
import story.StoryElement; import story.StoryElement;
import java.util.Objects;
public abstract class Character extends StoryElement implements Listenable, Conversable { public abstract class Character extends StoryElement implements Listenable, Conversable {
protected CharacterType type; protected CharacterType type;
protected String name; protected String name;
protected StoryContext context;
public Character(CharacterType type, String name) { public Character(CharacterType type, String name) {
super(type + " " + name); super(type + " " + name);
@ -15,16 +19,26 @@ public abstract class Character extends StoryElement implements Listenable, Conv
this.name = name; this.name = name;
} }
public boolean equals(Character character) { public void setContext(StoryContext context) {
return this.name.equals(character.name) && this.type.equals(character.type); 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() { public String toString() {
return name + " (" + type + ")"; return name + " (" + type + ")";
} }
public int hashCode() {
// seems legit to me
return name.hashCode() * type.hashCode();
}
} }

View File

@ -1,9 +1,9 @@
package characters; package characters;
import enums.CharacterType; import enums.CharacterType;
import story.StoryContext;
public class Child extends Character { public class Child extends Character {
String thoughts = "";
public Child(String name) { public Child(String name) {
super(CharacterType.CHILD, 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 // Child can listen to stories about the city and ask questions about the subject of the story
public String listenAbout(String context) { public void think(String story) {
return name + " слушает историю о " + context; 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) { public String converse(String subject) {
return name + " слушает историю о " + context + " и спрашивает вопросы о " + subject; String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject
+ "\n" + "и думает: " + this.thoughts;
this.thoughts = "";
return response;
} }
@Override @Override
public String converse(StoryContext context, String subject) { public String listen(String subject) {
return listenAbout(context.getStoryContext(), subject); String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject
} + "\n" + "и думает: " + this.thoughts;
this.thoughts = "";
@Override return response;
public String listen(StoryContext context) {
return listenAbout(context.getStoryContext());
} }
} }

View File

@ -1,7 +1,6 @@
package characters; package characters;
import enums.CharacterType; import enums.CharacterType;
import story.StoryContext;
public abstract class Traveler extends Character { 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 // Traveler can tell stories about his adventures and listen to stories about the city, but dont ask questions
@Override @Override
public String listen(StoryContext context) { public String converse(String subject) {
return name + " слушает историю о " + context.getStoryContext(); return this.name + " рассказывает историю о " + context.getStoryContext() + "\n";
} }
@Override @Override
public String converse(StoryContext context, String subject) { public String listen(String subject) {
return name + " рассказывает историю о " + subject; return this.name + " слушает историю о " + context.getStoryContext() + "\n";
} }
} }

View File

@ -1,21 +1,37 @@
package characters; package characters;
import interfaces.Conversable; public class Znayka extends Traveler {
import interfaces.Listenable; String thoughts = "";
import story.StoryContext;
public class Znayka extends Traveler implements Listenable, Conversable {
public Znayka() { public Znayka() {
super("Знайка"); super("Знайка");
} }
@Override @Override
public String listen(StoryContext context) { public void think(String story) {
return name + " умно слушает историю о " + context.getStoryContext(); if (story.contains("город")) {
this.thoughts += "Немного я знаю о городах, но история о " + context.getStoryContext() + " мне очень понравилась\n";
} else if (story.contains("путешествие")) {
this.thoughts += "Я люблю путешествовать, история о " + context.getStoryContext() + " мне очень понравилась\n";
}
else {
this.thoughts += "Интересная получается история о " + context.getStoryContext() + "\n";
}
} }
@Override @Override
public String converse(StoryContext context, String subject) { public String converse(String subject) {
return name + " умно рассказывает историю о " + 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; package interfaces;
import story.StoryContext;
public interface Conversable { 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; package interfaces;
import story.StoryContext;
public interface Listenable { 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.gatherResidentsForStories();
context.getCity().returnToDailyLifeWithChanges(); context.getCity().returnToDailyLifeWithChanges();
for (Character resident : this.getResidents()) {
resident.setContext(context);
}
this.gatherResidents(); this.gatherResidents();
for (String subject: subjects) { for (String subject: subjects) {
for (Character resident : this.getResidents()) { for (Character resident : this.getResidents()) {
String event;
// if (resident instanceof Traveler) { // if (resident instanceof Traveler) {
// event = resident.converse(context, subject); // event = resident.converse(context, subject);
// } else { // } else {
// event = resident.listen(context); // event = resident.listen(context);
// } // }
// now can just converse for everyone // 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);
} }
} }