updated code for story telling to work

This commit is contained in:
Alexander Karpov 2023-11-27 17:44:36 +03:00
parent 48ad83ea5a
commit 249021b63f
12 changed files with 175 additions and 44 deletions

View File

@ -1,21 +1,31 @@
import characters.Character; import characters.Character;
import model.*; import model.*;
import characters.*; import characters.*;
import story.StoryContext;
import java.util.ArrayList;
import java.util.List;
public class StoryTeller { public class StoryTeller {
public static void main(String[] args) { public static void main(String[] args) {
// Creating the setting for the story
City flowerCity = new City("Цветочный город"); City flowerCity = new City("Цветочный город");
House znaykasHouse = new House("Домик Знайки"); House znaykasHouse = new House("Домик Знайки");
StoryContext context = new StoryContext(flowerCity, znaykasHouse); StoryContext context = new StoryContext(flowerCity, znaykasHouse);
Character znayka = new Znayka("описание"); // Creating the characters
Character znayka = new Znayka("Знайка");
Character malish = new Child("Малыш", "Малыш"); Character malish = new Child("Малыш", "Малыш");
Character malishka = new Child("Малышка", "Малышка"); Character malishka = new Child("Малышка", "Малышка");
// Adding characters to Znayka's house
znaykasHouse.addResident(znayka); znaykasHouse.addResident(znayka);
znaykasHouse.addResident(malish); znaykasHouse.addResident(malish);
znaykasHouse.addResident(malishka); znaykasHouse.addResident(malishka);
znaykasHouse.tellEveningStories(context); List<String> stories = new ArrayList<>();
stories.add("о жизни в Зеленом городе");
znaykasHouse.tellEveningStories(context, stories);
} }
} }

View File

@ -3,7 +3,7 @@ package characters;
import enums.CharacterType; import enums.CharacterType;
import interfaces.Interactable; import interfaces.Interactable;
import interfaces.Listenable; import interfaces.Listenable;
import model.StoryContext; import story.StoryContext;
import model.StoryElement; import model.StoryElement;
public abstract class Character extends StoryElement implements Interactable, Listenable { public abstract class Character extends StoryElement implements Interactable, Listenable {
@ -16,13 +16,30 @@ public abstract class Character extends StoryElement implements Interactable, Li
this.name = name; this.name = name;
} }
// Method where characters can reminisce about past events
public abstract void reminisce(String memory);
// Method for characters to react to stories being told
public abstract void reactToStory();
// Method for telling a story about a specific place or event
public abstract void tellStoryOf(String place);
// Method for characters, especially children, to ask questions about the story
public abstract void askQuestionsAbout(String subject);
public abstract void listen(); public abstract void listen();
public abstract void tell(); public abstract void tell();
public abstract void converse(StoryContext context, String subject);
// Interaction method for general purposes
@Override @Override
public abstract void interact(StoryContext context); public abstract void interact(StoryContext context);
// Listening method within a story context
@Override @Override
public abstract void listen(StoryContext context); public abstract void listen(StoryContext context);
} }

View File

@ -1,7 +1,7 @@
package characters; package characters;
import enums.CharacterType; import enums.CharacterType;
import model.StoryContext; import story.StoryContext;
public class Child extends Character { public class Child extends Character {
@ -9,9 +9,29 @@ public class Child extends Character {
super(description, CharacterType.CHILD, name); super(description, CharacterType.CHILD, name);
} }
@Override
public void reminisce(String memory) {
}
@Override
public void reactToStory() {
}
@Override
public void tellStoryOf(String place) {
}
@Override
public void askQuestionsAbout(String subject) {
System.out.println(name + " спрашивает вопросы о " + subject);
}
@Override @Override
public void listen() { public void listen() {
System.out.println(name + " listens to the story with wide-eyed wonder."); System.out.println(name + " слушает с удивлением");
} }
@Override @Override
@ -23,7 +43,12 @@ public class Child extends Character {
@Override @Override
public void interact(StoryContext context) { public void interact(StoryContext context) {
// Child-specific interactions // Child-specific interactions
System.out.println(name + " shares their impressions about the story."); System.out.println(name + " говорят свое мнение об истории.");
}
@Override
public void converse(StoryContext context, String subject) {
askQuestionsAbout(subject);
} }
@Override @Override

View File

@ -1,7 +1,7 @@
package characters; package characters;
import enums.CharacterType; import enums.CharacterType;
import model.StoryContext; import story.StoryContext;
public class Traveler extends Character { public class Traveler extends Character {
@ -9,6 +9,26 @@ public class Traveler extends Character {
super(description, CharacterType.TRAVELER, name); super(description, CharacterType.TRAVELER, name);
} }
@Override
public void reminisce(String memory) {
}
@Override
public void reactToStory() {
}
@Override
public void tellStoryOf(String place) {
}
@Override
public void askQuestionsAbout(String subject) {
}
@Override @Override
public void listen() { public void listen() {
@ -19,6 +39,11 @@ public class Traveler extends Character {
// Logic for telling a story // Logic for telling a story
} }
@Override
public void converse(StoryContext context, String subject) {
tellStoryOf(subject);
}
@Override @Override
public void interact(StoryContext context) { public void interact(StoryContext context) {
System.out.println(name + " рассказывает историю о Зеленом городе."); System.out.println(name + " рассказывает историю о Зеленом городе.");

View File

@ -1,20 +1,15 @@
package characters; package characters;
import enums.CharacterType;
import interfaces.Listener; import interfaces.Listener;
import model.StoryContext;
public class Znayka extends Traveler implements Listener { public class Znayka extends Traveler implements Listener {
private String name;
public Znayka(String description) { public Znayka(String description) {
super(description, "Знайка"); super(description, "Знайка");
this.name = name;
} }
@Override public void tellStoryOf(String about) {
public void tell() { System.out.println("Знайка рассказывает истории " + about);
System.out.println(name + " рассказывает истории о жизни в Зеленом городе.");
} }
@Override @Override

View File

@ -1,5 +1,6 @@
package enums; package enums;
public enum CharacterType { public enum CharacterType {
TRAVELER, CHILD TRAVELER, // Represents characters who are travelers
CHILD // Represents child characters
} }

View File

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

View File

@ -1,6 +1,6 @@
package interfaces; package interfaces;
import model.StoryContext; import story.StoryContext;
public interface Listenable { public interface Listenable {
void listen(StoryContext context); void listen(StoryContext context);

View File

@ -1,8 +1,19 @@
package model; package model;
public class City extends StoryElement { public class City extends StoryElement {
private final String name;
public City(String description) { public City(String name) {
super(description); super(name); // Assuming the super class StoryElement's constructor takes a name or description
this.name = name;
}
public String getName() {
return this.name;
}
public void returnToDailyLifeWithChanges() {
// Implementation of the method as before
System.out.println("Жизнь в " + this.getName() + " потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.");
} }
} }

View File

@ -1,28 +1,57 @@
package model; package model;
import characters.Character; import characters.Character;
import interfaces.Listenable; import characters.Traveler;
import story.StoryContext;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class House extends StoryElement { public class House extends StoryElement {
private List<Character> residents; private final String name;
private final List<Character> residents;
public House(String description) { public House(String name) {
super(description); super(name); // Assuming the super class StoryElement's constructor takes a name or description
this.name = name;
this.residents = new ArrayList<>(); this.residents = new ArrayList<>();
} }
public String getName() {
return this.name;
}
public void addResident(Character character) { public void addResident(Character character) {
this.residents.add(character); this.residents.add(character);
} }
public void tellEveningStories(StoryContext context) { // Method to gather all the residents of the house
for (Character resident : residents) { public void gatherResidents() {
if (resident != null) { System.out.println("Жители " + this.getDescription() + " собираются чтобы рассказать истории");
((Listenable) resident).listen(context); }
// Method to retrieve the list of residents
public List<Character> getResidents() {
return residents;
}
public void tellEveningStories(StoryContext context, List<String> subjects) {
context.gatherResidentsForStories();
context.getCity().returnToDailyLifeWithChanges();
this.gatherResidents();
for (String subject: subjects) {
for (Character resident : this.getResidents()) {
if (resident instanceof Traveler) {
resident.converse(context, subject);
} else {
resident.converse(context, subject);
} }
} }
} }
// The method could end with a closing statement or a setup for the next day's stories.
System.out.println("Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения.");
}
} }

View File

@ -1,13 +0,0 @@
package model;
public class StoryContext {
private City city;
private House house;
public StoryContext(City city, House house) {
this.city = city;
this.house = house;
}
// Getters and setters for city and house
}

View File

@ -0,0 +1,31 @@
package story;
import model.City;
import model.House;
public class StoryContext {
private City city;
private House house;
public StoryContext(City city, House house) {
this.city = city;
this.house = house;
}
// Getters and setters for city and house
public City getCity() {
return this.city;
}
// Methods for story actions
public void returnToDailyLifeWithChanges() {
// Implement the logic for the city's daily life with subtle changes after the travelers' return
System.out.println("Жизнь в " + city.getName() + " потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.");
}
public void gatherResidentsForStories() {
// Implement the logic for gathering residents to listen to stories
house.gatherResidents();
System.out.println("Все жители, и малыши и малышки, приходили по вечерам к " + house.getName() + " и слушали рассказы путешественников.");
}
}