updated class connections
This commit is contained in:
parent
a906a45583
commit
959ed28059
32
README.md
32
README.md
|
@ -45,31 +45,19 @@
|
|||
|
||||
## Output
|
||||
```
|
||||
Жители собираются в Домик Знайки чтобы рассказать истории
|
||||
Все жители, и малыши и малышки, приходили по вечерам к Домик Знайки и слушали рассказы путешественников.
|
||||
На этом знаменитое путешествие Знайка закончилось.
|
||||
Жизнь в Цветочный город потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.
|
||||
Жители собираются в Домик Знайки чтобы рассказать истории
|
||||
Знайка умно рассказывает историю о путешествия Знайки особенно про путешествие в Зеленый город
|
||||
и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась
|
||||
С тех пор как наши отважные путешественники Знайка вернулись домой, в городе только и говорили о них.
|
||||
Жители собираются в Дом Знайки чтобы рассказать истории
|
||||
Все жители слушают историю о путешествии в путешествие в Зеленый город в Цветочный город
|
||||
Малыш слушает: Малыш слушает историю о путешествие в Зеленый город и спрашивает вопросы о путешествие в Зеленый город
|
||||
Малышка слушает: Малышка слушает историю о путешествие в Зеленый город и спрашивает вопросы о путешествие в Зеленый город
|
||||
Знайка рассказывает: Знайка умно рассказывает историю о путешествие в Зеленый город
|
||||
и думает: Немного я знаю о городах, но история о путешествие в Зеленый город мне очень понравилась
|
||||
|
||||
Малыш слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город
|
||||
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
|
||||
|
||||
Малышка слушает историю о путешествия Знайки и спрашивает вопросы о путешествие в Зеленый город
|
||||
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
|
||||
|
||||
Знайка умно рассказывает историю о путешествия Знайки особенно про жизнь в Цветочном городе
|
||||
и думает: Немного я знаю о городах, но история о путешествия Знайки мне очень понравилась
|
||||
|
||||
Малыш слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе
|
||||
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
|
||||
|
||||
Малышка слушает историю о путешествия Знайки и спрашивает вопросы о жизнь в Цветочном городе
|
||||
и думает: Я никогда не был в городе, но история о путешествия Знайки мне очень понравилась
|
||||
|
||||
Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения.
|
||||
Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слушать новые приключения.
|
||||
```
|
||||
|
||||
## UML Diagram
|
||||
|
||||
![UML Diagram](https://new.akarpov.ru/media/files/sanspie/aDoSa/bebebe.svg "https://new.akarpov.ru/files/nySsGIMRBJaERBoBWFuu")
|
||||
![UML Diagram](https://new.akarpov.ru/media/files/sanspie/qLhQT/bebra.svg "https://new.akarpov.ru/files/rWZkihSbBcdbqCMhtfGB")
|
11
itmo-prog-lab-3.iml
Normal file
11
itmo-prog-lab-3.iml
Normal file
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="JAVA_MODULE" version="4">
|
||||
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||
<exclude-output />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
|
@ -1,31 +1,52 @@
|
|||
import characters.Character;
|
||||
import enums.AdventureType;
|
||||
import enums.LifeType;
|
||||
import model.*;
|
||||
import characters.*;
|
||||
import story.StoryContext;
|
||||
import story.Adventure;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class StoryTeller {
|
||||
public static void main(String[] args) {
|
||||
// На этом знаменитое путешествие Знайки и его товарищей окончилось.
|
||||
// Жизнь в Цветочном городе потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.
|
||||
// С тех пор как наши отважные путешественники вернулись домой, в городе только и говорили о них.
|
||||
// Все жители, и малыши и малышки, приходили по вечерам к домику Знайки и слушали рассказы путешественников об их жизни в Зеленом городе.
|
||||
public static void main(String[] args) {
|
||||
City city = new City("Цветочный город", LifeType.NOT_AS_USUAL);
|
||||
|
||||
// Creating the setting for the story
|
||||
City flowerCity = new City("Цветочный город");
|
||||
House znaykasHouse = new House("Домик Знайки");
|
||||
StoryContext context = new StoryContext(flowerCity, znaykasHouse, "путешествия Знайки");
|
||||
// Create adventurers
|
||||
Traveler znayka = new Znayka();
|
||||
znayka.addAdventure("Жизнь в Зеленом городе");
|
||||
znayka.returnHome();
|
||||
|
||||
// Creating the characters
|
||||
Character znayka = new Znayka();
|
||||
Character malish = new Child("Малыш");
|
||||
Character malishka = new Child("Малышка");
|
||||
city.addTraveler(znayka);
|
||||
|
||||
// Adding characters to Znayka's house
|
||||
znaykasHouse.addResident(znayka);
|
||||
znaykasHouse.addResident(malish);
|
||||
znaykasHouse.addResident(malishka);
|
||||
// Create house
|
||||
House znaykaHouse = new House("Дом Знайки", znayka, city);
|
||||
|
||||
znaykasHouse.tellEveningStories(context);
|
||||
// Add house to the city.
|
||||
city.addHouse(znaykaHouse);
|
||||
|
||||
// Create children
|
||||
Child child1 = new Child("Малыш");
|
||||
Child child2 = new Child("Малышка");
|
||||
|
||||
// Add children to the city
|
||||
city.addChild(child1);
|
||||
city.addChild(child2);
|
||||
|
||||
City flowerCity = new City("Цветочный город", LifeType.NOT_AS_USUAL);
|
||||
|
||||
Adventure adventure = new Adventure("путешествие в Зеленый город", AdventureType.FAMOUS, List.of(znayka));
|
||||
adventure.setLocation(flowerCity);
|
||||
|
||||
znayka.addAdventure(adventure);
|
||||
adventure.end();
|
||||
city.returnToDailyLife();
|
||||
city.recognizeTravelers();
|
||||
znaykaHouse.addResident(child1);
|
||||
znaykaHouse.addResident(child2);
|
||||
znaykaHouse.addResident(znayka);
|
||||
znaykaHouse.tellEveningStories(adventure);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,4 +41,9 @@ public abstract class Character extends StoryElement implements Listenable, Conv
|
|||
public String toString() {
|
||||
return name + " (" + type + ")";
|
||||
}
|
||||
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@ package characters;
|
|||
|
||||
import enums.CharacterType;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Child extends Character {
|
||||
String thoughts = "";
|
||||
|
||||
|
@ -23,17 +25,25 @@ public class Child extends Character {
|
|||
}
|
||||
|
||||
public String converse(String subject) {
|
||||
String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject
|
||||
+ "\n" + "и думает: " + this.thoughts;
|
||||
String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject;
|
||||
this.thoughts = "";
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String listen(String subject) {
|
||||
String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject
|
||||
+ "\n" + "и думает: " + this.thoughts;
|
||||
String response = this.name + " слушает историю о " + context.getStoryContext() + " и спрашивает вопросы о " + subject;
|
||||
this.thoughts = "";
|
||||
return response;
|
||||
}
|
||||
|
||||
public void discussTravelers(List<Traveler> travelers){
|
||||
System.out.println(this.name + " обсуждает путешественников: ");
|
||||
|
||||
for(Traveler t: travelers){
|
||||
if(t.isHome()){
|
||||
System.out.println(t.getName());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,13 +1,19 @@
|
|||
package characters;
|
||||
|
||||
import enums.AdventureType;
|
||||
import enums.CharacterType;
|
||||
import story.Adventure;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Traveler extends Character {
|
||||
private boolean isHome;
|
||||
private final List<Adventure> adventures;
|
||||
|
||||
public Traveler(String name) {
|
||||
super(CharacterType.TRAVELER, name);
|
||||
this.adventures = new ArrayList<>();
|
||||
}
|
||||
|
||||
// Traveler can tell stories about his adventures and listen to stories about the city, but dont ask questions
|
||||
|
@ -17,12 +23,33 @@ public abstract class Traveler extends Character {
|
|||
return this.name + " рассказывает историю о " + context.getStoryContext() + "\n";
|
||||
}
|
||||
|
||||
public void addAdventure(String adventureStory) {
|
||||
Adventure newAdventure = new Adventure(adventureStory, AdventureType.FAMOUS, List.of(this));
|
||||
this.adventures.add(newAdventure);
|
||||
}
|
||||
public void addAdventure(Adventure adventureStory) {
|
||||
this.adventures.add(adventureStory);
|
||||
}
|
||||
public void addAdventure(String adventureStory, List<Traveler> travelers) {
|
||||
travelers.add(this);
|
||||
Adventure newAdventure = new Adventure(adventureStory, AdventureType.FAMOUS, travelers);
|
||||
this.adventures.add(newAdventure);
|
||||
}
|
||||
|
||||
public List<Adventure> getAdventures() {
|
||||
return this.adventures;
|
||||
}
|
||||
|
||||
public void returnHome() {
|
||||
this.isHome = true;
|
||||
}
|
||||
|
||||
public boolean isHome() {
|
||||
return isHome;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String listen(String subject) {
|
||||
return this.name + " слушает историю о " + context.getStoryContext() + "\n";
|
||||
}
|
||||
|
||||
public List<String> returnHomeAndTellAStory() {
|
||||
return List.of("город", "путешествие");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,22 +9,25 @@ public class Znayka extends Traveler {
|
|||
super("Знайка");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void think(String story) {
|
||||
public String thinkAbout(String story) {
|
||||
if (story.contains("город")) {
|
||||
this.thoughts += "Немного я знаю о городах, но история о " + context.getStoryContext() + " мне очень понравилась\n";
|
||||
return "Немного я знаю о городах, но история о " + context.getStoryContext() + " мне очень понравилась\n";
|
||||
} else if (story.contains("путешествие")) {
|
||||
this.thoughts += "Я люблю путешествовать, история о " + context.getStoryContext() + " мне очень понравилась\n";
|
||||
return "Я люблю путешествовать, история о " + context.getStoryContext() + " мне очень понравилась\n";
|
||||
}
|
||||
else {
|
||||
this.thoughts += "Интересная получается история о " + context.getStoryContext() + "\n";
|
||||
return "Интересная получается история о " + context.getStoryContext() + "\n";
|
||||
}
|
||||
}
|
||||
|
||||
public void think(String story) {
|
||||
this.thoughts += thinkAbout(story);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String converse(String subject) {
|
||||
String response = name + " умно рассказывает историю о " + subject
|
||||
+ "\n" + "и думает: " + this.thoughts;
|
||||
+ "\n" + "и думает: " + thinkAbout(subject);
|
||||
this.thoughts = "";
|
||||
return response;
|
||||
}
|
||||
|
@ -36,9 +39,4 @@ public class Znayka extends Traveler {
|
|||
this.thoughts = "";
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> returnHomeAndTellAStory() {
|
||||
return List.of("Путешествие в Зеленый город", "Жизнь в Зеленом городе");
|
||||
}
|
||||
}
|
||||
|
|
6
src/enums/AdventureType.java
Normal file
6
src/enums/AdventureType.java
Normal file
|
@ -0,0 +1,6 @@
|
|||
package enums;
|
||||
|
||||
public enum AdventureType {
|
||||
FAMOUS, // Represents adventures that are famous
|
||||
UNKNOWN // Represents adventures that are unknown
|
||||
}
|
7
src/enums/LifeType.java
Normal file
7
src/enums/LifeType.java
Normal file
|
@ -0,0 +1,7 @@
|
|||
package enums;
|
||||
|
||||
public enum LifeType {
|
||||
NOT_AS_USUAL, // Represents life not as usual
|
||||
AS_USUAL, // Represents life as usual
|
||||
|
||||
}
|
|
@ -1,21 +1,87 @@
|
|||
package model;
|
||||
|
||||
import story.StoryElement;
|
||||
import characters.Child;
|
||||
import characters.Traveler;
|
||||
import enums.LifeType;
|
||||
import story.Adventure;
|
||||
|
||||
public class City extends StoryElement {
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class City extends Location {
|
||||
private final String name;
|
||||
private final LifeType lifeType;
|
||||
private final List<Traveler> travelers;
|
||||
private final List<Child> children;
|
||||
private final List<House> houses;
|
||||
|
||||
public City(String name) {
|
||||
super(name); // Assuming the super class StoryElement's constructor takes a name or description
|
||||
|
||||
public City(String name, LifeType lifeType) {
|
||||
super(name);
|
||||
this.name = name;
|
||||
this.lifeType = lifeType;
|
||||
travelers = new ArrayList<>();
|
||||
children = new ArrayList<>();
|
||||
houses = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addTraveler(Traveler traveler) {
|
||||
travelers.add(traveler);
|
||||
}
|
||||
|
||||
public void removeTraveler(Traveler traveler) {
|
||||
travelers.remove(traveler);
|
||||
}
|
||||
|
||||
public void addChild(Child child) {
|
||||
children.add(child);
|
||||
}
|
||||
|
||||
public void addHouse(House house) {
|
||||
houses.add(house);
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
|
||||
public void returnToDailyLifeWithChanges() {
|
||||
// Implementation of the method as before
|
||||
System.out.println("Жизнь в " + this.getName() + " потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.");
|
||||
public void returnToDailyLife() {
|
||||
if (this.lifeType == LifeType.NOT_AS_USUAL) {
|
||||
System.out.println("Жизнь в " + this.name + " потекла по-старому... хотя нет, нельзя сказать, чтобы совсем по-старому.");
|
||||
} else {
|
||||
System.out.println("Жизнь в " + this.name + " потекла по-старому.");
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> gatherStories() {
|
||||
List<String> stories = new ArrayList<>();
|
||||
for (Traveler t : travelers) {
|
||||
if(t.isHome()) {
|
||||
for (Adventure a : t.getAdventures()) {
|
||||
String story = t.getName() + " рассказывает историю о " + a.getAdventurePlace();
|
||||
System.out.println(story);
|
||||
stories.add(story);
|
||||
}
|
||||
}
|
||||
}
|
||||
return stories;
|
||||
}
|
||||
|
||||
public void listenToStories(String ownerName, List<String> stories) {
|
||||
for (House house : houses) {
|
||||
if (house.getOwner().getName().equals(ownerName)) {
|
||||
house.gatherChildren(children);
|
||||
for(String story: stories){
|
||||
System.out.println("Малышки слушают историю о " + story);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void recognizeTravelers() {
|
||||
for (Traveler traveler : travelers) {
|
||||
System.out.println("С тех пор как наши отважные путешественники " + traveler.getName() + " вернулись домой, в городе только и говорили о них.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,21 +2,29 @@ package model;
|
|||
|
||||
import characters.Character;
|
||||
import characters.Traveler;
|
||||
import story.Adventure;
|
||||
import story.StoryContext;
|
||||
import story.StoryElement;
|
||||
import characters.Child;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class House extends StoryElement {
|
||||
public class House extends Location {
|
||||
|
||||
private final String name;
|
||||
private final List<Character> residents;
|
||||
private final Character owner;
|
||||
private final City city;
|
||||
public Character getOwner() {
|
||||
return this.owner;
|
||||
}
|
||||
|
||||
public House(String name) {
|
||||
public House(String name, Character owner, City city) {
|
||||
super(name);
|
||||
this.name = name;
|
||||
this.residents = new ArrayList<>();
|
||||
this.owner = owner;
|
||||
this.city = city;
|
||||
}
|
||||
public String getName() {
|
||||
return this.name;
|
||||
|
@ -46,36 +54,34 @@ public class House extends StoryElement {
|
|||
return travelers;
|
||||
}
|
||||
|
||||
public void tellEveningStories(StoryContext context) {
|
||||
context.gatherResidentsForStories();
|
||||
context.getCity().returnToDailyLifeWithChanges();
|
||||
public void tellEveningStories(Adventure adventure) {
|
||||
List<Traveler> travelingResidents = this.getTravelers();
|
||||
|
||||
if (!travelingResidents.isEmpty()) {
|
||||
this.gatherResidents();
|
||||
|
||||
StoryContext context = adventure.getContext(city, this);
|
||||
System.out.println("Все жители слушают историю о путешествии в " + adventure.getAdventureName() + " в " + adventure.getAdventurePlace());
|
||||
for (Character resident : this.getResidents()) {
|
||||
resident.setContext(context);
|
||||
if (resident instanceof Traveler) {
|
||||
String response = resident.converse(context.getStoryContext());
|
||||
System.out.println(resident.getName() + " рассказывает: " + response);
|
||||
}
|
||||
|
||||
List<String> subjects = new ArrayList<>();
|
||||
|
||||
this.gatherResidents();
|
||||
for (Traveler resident : this.getTravelers()) {
|
||||
subjects.addAll(resident.returnHomeAndTellAStory());
|
||||
}
|
||||
for (String subject: subjects) {
|
||||
for (Character resident : this.getResidents()) {
|
||||
// if (resident instanceof Traveler) {
|
||||
// event = resident.converse(context, subject);
|
||||
// } else {
|
||||
// event = resident.listen(context);
|
||||
// }
|
||||
// now can just converse for everyone
|
||||
|
||||
resident.think(subject);
|
||||
String response = resident.converse(subject);
|
||||
System.out.println(response);
|
||||
else if (resident instanceof Child) {
|
||||
String response = resident.listen(context.getStoryContext());
|
||||
System.out.println(resident.getName() + " слушает: " + response);
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println("Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слушать новые приключения.");
|
||||
}
|
||||
|
||||
// The method could end with a closing statement or a setup for the next day's stories.
|
||||
System.out.println("Истории захватывали дух, и каждый вечер собирались всё больше жителей, чтобы слышать новые приключения.");
|
||||
public void gatherChildren(List<Child> children) {
|
||||
List<String> childrenNames = new ArrayList<>();
|
||||
for (Child child : children) {
|
||||
childrenNames.add(child.getName());
|
||||
}
|
||||
System.out.println(String.join(",", childrenNames) + " собираются в доме " + owner.getName() + " чтобы послушать истории");
|
||||
}
|
||||
}
|
||||
|
|
16
src/model/Location.java
Normal file
16
src/model/Location.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
package model;
|
||||
|
||||
import story.StoryElement;
|
||||
|
||||
abstract public class Location extends StoryElement {
|
||||
private final String name;
|
||||
|
||||
public Location(String name) {
|
||||
super(name);
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return this.name;
|
||||
}
|
||||
}
|
54
src/story/Adventure.java
Normal file
54
src/story/Adventure.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
package story;
|
||||
|
||||
import characters.Traveler;
|
||||
import enums.AdventureType;
|
||||
import model.City;
|
||||
import model.House;
|
||||
import model.Location;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Adventure {
|
||||
public String name;
|
||||
private Location location;
|
||||
private final AdventureType type;
|
||||
private List<Traveler> travelers = new ArrayList<>();
|
||||
|
||||
public Adventure(String name, AdventureType type, List<Traveler> travelers) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
this.travelers = travelers;
|
||||
}
|
||||
|
||||
public void setLocation(Location location) {
|
||||
this.location = location;
|
||||
}
|
||||
|
||||
public Location getLocation() {
|
||||
return this.location;
|
||||
}
|
||||
|
||||
public void end() {
|
||||
List<String> travelersNames = new ArrayList<>();
|
||||
for (Traveler traveler : this.travelers) {
|
||||
travelersNames.add(traveler.getName());
|
||||
}
|
||||
|
||||
if (this.type == AdventureType.FAMOUS) {
|
||||
System.out.println("На этом знаменитое путешествие " + String.join(", ", travelersNames) + " закончилось.");
|
||||
} else {
|
||||
System.out.println("На этом путешествие " + String.join(", ", travelersNames) + " закончилось.");
|
||||
}
|
||||
}
|
||||
|
||||
public String getAdventurePlace() {
|
||||
return this.location.getName();
|
||||
}
|
||||
public String getAdventureName() {
|
||||
return this.name;
|
||||
}
|
||||
public StoryContext getContext(City city, House house){
|
||||
return new StoryContext(city, house, this.getAdventureName());
|
||||
}
|
||||
}
|
|
@ -3,6 +3,8 @@ package story;
|
|||
import model.City;
|
||||
import model.House;
|
||||
|
||||
|
||||
|
||||
public class StoryContext {
|
||||
private final City city;
|
||||
private final House house;
|
||||
|
|
Loading…
Reference in New Issue
Block a user