Initial commit
This commit is contained in:
parent
8ec0ab6f0f
commit
48ad83ea5a
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
|||
.idea
|
||||
# ---> Java
|
||||
# Compiled class file
|
||||
*.class
|
||||
|
|
11
lab-3.iml
Normal file
11
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>
|
21
src/StoryTeller.java
Normal file
21
src/StoryTeller.java
Normal file
|
@ -0,0 +1,21 @@
|
|||
import characters.Character;
|
||||
import model.*;
|
||||
import characters.*;
|
||||
|
||||
public class StoryTeller {
|
||||
public static void main(String[] args) {
|
||||
City flowerCity = new City("Цветочный город");
|
||||
House znaykasHouse = new House("Домик Знайки");
|
||||
StoryContext context = new StoryContext(flowerCity, znaykasHouse);
|
||||
|
||||
Character znayka = new Znayka("описание");
|
||||
Character malish = new Child("Малыш", "Малыш");
|
||||
Character malishka = new Child("Малышка","Малышка");
|
||||
|
||||
znaykasHouse.addResident(znayka);
|
||||
znaykasHouse.addResident(malish);
|
||||
znaykasHouse.addResident(malishka);
|
||||
|
||||
znaykasHouse.tellEveningStories(context);
|
||||
}
|
||||
}
|
28
src/characters/Character.java
Normal file
28
src/characters/Character.java
Normal file
|
@ -0,0 +1,28 @@
|
|||
package characters;
|
||||
|
||||
import enums.CharacterType;
|
||||
import interfaces.Interactable;
|
||||
import interfaces.Listenable;
|
||||
import model.StoryContext;
|
||||
import model.StoryElement;
|
||||
|
||||
public abstract class Character extends StoryElement implements Interactable, Listenable {
|
||||
protected CharacterType type;
|
||||
protected String name;
|
||||
|
||||
public Character(String description, CharacterType type, String name) {
|
||||
super(description);
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public abstract void listen();
|
||||
|
||||
public abstract void tell();
|
||||
|
||||
@Override
|
||||
public abstract void interact(StoryContext context);
|
||||
|
||||
@Override
|
||||
public abstract void listen(StoryContext context);
|
||||
}
|
33
src/characters/Child.java
Normal file
33
src/characters/Child.java
Normal file
|
@ -0,0 +1,33 @@
|
|||
package characters;
|
||||
|
||||
import enums.CharacterType;
|
||||
import model.StoryContext;
|
||||
|
||||
public class Child extends Character {
|
||||
|
||||
public Child(String description, String name) {
|
||||
super(description, CharacterType.CHILD, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen() {
|
||||
System.out.println(name + " listens to the story with wide-eyed wonder.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tell() {
|
||||
|
||||
}
|
||||
|
||||
// If Children have other specific interactions, you could override the interact method
|
||||
@Override
|
||||
public void interact(StoryContext context) {
|
||||
// Child-specific interactions
|
||||
System.out.println(name + " shares their impressions about the story.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen(StoryContext context) {
|
||||
|
||||
}
|
||||
}
|
31
src/characters/Traveler.java
Normal file
31
src/characters/Traveler.java
Normal file
|
@ -0,0 +1,31 @@
|
|||
package characters;
|
||||
|
||||
import enums.CharacterType;
|
||||
import model.StoryContext;
|
||||
|
||||
public class Traveler extends Character {
|
||||
|
||||
public Traveler(String description, String name) {
|
||||
super(description, CharacterType.TRAVELER, name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tell() {
|
||||
// Logic for telling a story
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interact(StoryContext context) {
|
||||
System.out.println(name + " рассказывает историю о Зеленом городе.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen(StoryContext context) {
|
||||
// Listening logic for a traveler
|
||||
}
|
||||
}
|
24
src/characters/Znayka.java
Normal file
24
src/characters/Znayka.java
Normal file
|
@ -0,0 +1,24 @@
|
|||
package characters;
|
||||
|
||||
import enums.CharacterType;
|
||||
import interfaces.Listener;
|
||||
import model.StoryContext;
|
||||
|
||||
public class Znayka extends Traveler implements Listener {
|
||||
private String name;
|
||||
|
||||
public Znayka(String description) {
|
||||
super(description, "Знайка");
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tell() {
|
||||
System.out.println(name + " рассказывает истории о жизни в Зеленом городе.");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void listen() {
|
||||
System.out.println(name + " слушает.");
|
||||
}
|
||||
}
|
5
src/enums/CharacterType.java
Normal file
5
src/enums/CharacterType.java
Normal file
|
@ -0,0 +1,5 @@
|
|||
package enums;
|
||||
|
||||
public enum CharacterType {
|
||||
TRAVELER, CHILD
|
||||
}
|
7
src/interfaces/Interactable.java
Normal file
7
src/interfaces/Interactable.java
Normal file
|
@ -0,0 +1,7 @@
|
|||
package interfaces;
|
||||
|
||||
import model.StoryContext;
|
||||
|
||||
public interface Interactable {
|
||||
void interact(StoryContext context);
|
||||
}
|
7
src/interfaces/Listenable.java
Normal file
7
src/interfaces/Listenable.java
Normal file
|
@ -0,0 +1,7 @@
|
|||
package interfaces;
|
||||
|
||||
import model.StoryContext;
|
||||
|
||||
public interface Listenable {
|
||||
void listen(StoryContext context);
|
||||
}
|
5
src/interfaces/Listener.java
Normal file
5
src/interfaces/Listener.java
Normal file
|
@ -0,0 +1,5 @@
|
|||
package interfaces;
|
||||
|
||||
public interface Listener {
|
||||
void listen();
|
||||
}
|
8
src/model/City.java
Normal file
8
src/model/City.java
Normal file
|
@ -0,0 +1,8 @@
|
|||
package model;
|
||||
|
||||
public class City extends StoryElement {
|
||||
|
||||
public City(String description) {
|
||||
super(description);
|
||||
}
|
||||
}
|
28
src/model/House.java
Normal file
28
src/model/House.java
Normal file
|
@ -0,0 +1,28 @@
|
|||
package model;
|
||||
|
||||
import characters.Character;
|
||||
import interfaces.Listenable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class House extends StoryElement {
|
||||
|
||||
private List<Character> residents;
|
||||
|
||||
public House(String description) {
|
||||
super(description);
|
||||
this.residents = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addResident(Character character) {
|
||||
this.residents.add(character);
|
||||
}
|
||||
|
||||
public void tellEveningStories(StoryContext context) {
|
||||
for (Character resident : residents) {
|
||||
if (resident != null) {
|
||||
((Listenable) resident).listen(context);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
13
src/model/StoryContext.java
Normal file
13
src/model/StoryContext.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
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
|
||||
}
|
35
src/model/StoryElement.java
Normal file
35
src/model/StoryElement.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package model;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public abstract class StoryElement {
|
||||
protected String description;
|
||||
|
||||
public StoryElement(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getClass().getSimpleName() + "{" +
|
||||
"description='" + description + '\'' +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) return true;
|
||||
if (obj == null || getClass() != obj.getClass()) return false;
|
||||
StoryElement that = (StoryElement) obj;
|
||||
return Objects.equals(description, that.description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return description != null ? description.hashCode() : 0;
|
||||
}
|
||||
}
|
25
src/story/ListeningSession.java
Normal file
25
src/story/ListeningSession.java
Normal file
|
@ -0,0 +1,25 @@
|
|||
package story;
|
||||
|
||||
import interfaces.Listener;
|
||||
import characters.Character;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
class ListeningSession extends StoryEvent {
|
||||
private ArrayList<Character> listeners;
|
||||
|
||||
public ListeningSession(String description, ArrayList<Character> listeners) {
|
||||
super(description);
|
||||
this.listeners = listeners;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void occur() {
|
||||
super.occur();
|
||||
for (Character listener : listeners) {
|
||||
if (listener instanceof Listener) {
|
||||
((Listener) listener).listen();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
21
src/story/Narrative.java
Normal file
21
src/story/Narrative.java
Normal file
|
@ -0,0 +1,21 @@
|
|||
package story;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
class Narrative {
|
||||
private ArrayList<StoryEvent> events;
|
||||
|
||||
public Narrative() {
|
||||
this.events = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addEvent(StoryEvent event) {
|
||||
events.add(event);
|
||||
}
|
||||
|
||||
public void unfold() {
|
||||
for (StoryEvent event : events) {
|
||||
event.occur();
|
||||
}
|
||||
}
|
||||
}
|
13
src/story/StoryEvent.java
Normal file
13
src/story/StoryEvent.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package story;
|
||||
|
||||
class StoryEvent {
|
||||
private final String description;
|
||||
|
||||
public StoryEvent(String description) {
|
||||
this.description = description;
|
||||
}
|
||||
|
||||
public void occur() {
|
||||
System.out.println(description);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user