From 1df8332f73895b2aff96db6e47b5efcc4df88efe Mon Sep 17 00:00:00 2001 From: Ivan Zinchenko Date: Tue, 28 Nov 2023 01:21:36 +0300 Subject: [PATCH] Git init --- .gitignore | 34 +++++++++++++++++++ MANIFEST.mf | 3 ++ Makefile | 6 ++++ src/Characters/Character.java | 45 +++++++++++++++++++++++++ src/Characters/FrenBok.java | 33 ++++++++++++++++++ src/Characters/Gender.java | 6 ++++ src/Characters/IGrabbableCharacter.java | 7 ++++ src/Characters/Karlson.java | 34 +++++++++++++++++++ src/Entity/Entity.java | 28 +++++++++++++++ src/Entity/IGrabbable.java | 5 +++ src/Items/Container.java | 30 +++++++++++++++++ src/Items/Item.java | 19 +++++++++++ src/Main.java | 27 +++++++++++++++ 13 files changed, 277 insertions(+) create mode 100644 .gitignore create mode 100644 MANIFEST.mf create mode 100644 Makefile create mode 100644 src/Characters/Character.java create mode 100644 src/Characters/FrenBok.java create mode 100644 src/Characters/Gender.java create mode 100644 src/Characters/IGrabbableCharacter.java create mode 100644 src/Characters/Karlson.java create mode 100644 src/Entity/Entity.java create mode 100644 src/Entity/IGrabbable.java create mode 100644 src/Items/Container.java create mode 100644 src/Items/Item.java create mode 100644 src/Main.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bd8d0b --- /dev/null +++ b/.gitignore @@ -0,0 +1,34 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ +.idea +*.iml + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store + +### Builds ### +app.jar \ No newline at end of file diff --git a/MANIFEST.mf b/MANIFEST.mf new file mode 100644 index 0000000..6f7f37a --- /dev/null +++ b/MANIFEST.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Created-By: zinch +Main-class: Main diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4effb7d --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +all: + rm -rf target + javac -d target -sourcepath src src/Main.java src/**/* + cd target; jar cfm app.jar ../MANIFEST.mf *.class ./**/*.class + mv target/app.jar ./ + rm -rf target diff --git a/src/Characters/Character.java b/src/Characters/Character.java new file mode 100644 index 0000000..7987282 --- /dev/null +++ b/src/Characters/Character.java @@ -0,0 +1,45 @@ +package Characters; + +import Entity.*; + +import java.util.Objects; + +public abstract class Character extends Entity { + private final Gender gender; + + public Character(String name, Gender gender) { + this.name = name; + this.gender = gender; + } + + public final String getGender() { + switch (this.gender) { + case MAN -> { + return "Он"; + } + case WOMAN -> { + return "Она"; + } + default -> { + return ""; + } + } + } + + public abstract String feel(); + public abstract String grab(IGrabbable obj); + public abstract String moveTo(Entity obj); + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Character character = (Character) o; + return Objects.equals(this.name, character.name) && this.gender == character.gender; + } + + @Override + public int hashCode() { + return Objects.hash(this.name, this.gender); + } +} diff --git a/src/Characters/FrenBok.java b/src/Characters/FrenBok.java new file mode 100644 index 0000000..125cbee --- /dev/null +++ b/src/Characters/FrenBok.java @@ -0,0 +1,33 @@ +package Characters; + +import Entity.*; +import Items.Item; + +public class FrenBok extends Character { + public FrenBok() { + super("Фрекен Бок", Gender.WOMAN); + } + + @Override + public String moveTo(Entity obj) { + return String.format("%s кинулась на %s", this.getGender(), obj); + } + + @Override + public String feel() { + return String.format("%s взревела от бешенства", this); + } + + @Override + public String grab(IGrabbable obj) { + return String.format("%s взяла %s", this.getGender(), obj); + } + + public String grabCharacter(IGrabbableCharacter character) { + return String.format("%s схватила %s за %s", this.getGender(), character.getName(), character.getGrabbablePart()); + } + + public String pushCharacterBehindItem(Character character, Item item) { + return String.format("%s вытолкнула %s за %s", this.getGender(), character, item); + } +} diff --git a/src/Characters/Gender.java b/src/Characters/Gender.java new file mode 100644 index 0000000..daa4abf --- /dev/null +++ b/src/Characters/Gender.java @@ -0,0 +1,6 @@ +package Characters; + +public enum Gender { + MAN, + WOMAN +} diff --git a/src/Characters/IGrabbableCharacter.java b/src/Characters/IGrabbableCharacter.java new file mode 100644 index 0000000..b9c931f --- /dev/null +++ b/src/Characters/IGrabbableCharacter.java @@ -0,0 +1,7 @@ +package Characters; + +import Entity.IGrabbable; + +public interface IGrabbableCharacter extends IGrabbable { + String getGrabbablePart(); +} diff --git a/src/Characters/Karlson.java b/src/Characters/Karlson.java new file mode 100644 index 0000000..559c892 --- /dev/null +++ b/src/Characters/Karlson.java @@ -0,0 +1,34 @@ +package Characters; + +import Entity.*; +import Items.Container; + +public class Karlson extends Character implements IGrabbableCharacter { + public Karlson() { + super("Кралсон", Gender.MAN); + } + + @Override + public String feel() { + return String.format("%s дрогнул губой и надулся", this); + } + + @Override + public String moveTo(Entity obj) { + return String.format("%s сделал шаг к %s", this.getGender(), obj); + } + + @Override + public String grab(IGrabbable obj) { + return String.format("%s взял %s", this, obj); + } + + public String grabFrom(Container container) { + return String.format("%s взял одну %s из %s", this.getGender(), container.getInnerItem(), container); + } + + @Override + public String getGrabbablePart() { + return "шиворот"; + } +} diff --git a/src/Entity/Entity.java b/src/Entity/Entity.java new file mode 100644 index 0000000..d17a524 --- /dev/null +++ b/src/Entity/Entity.java @@ -0,0 +1,28 @@ +package Entity; + +import java.util.Objects; + +public abstract class Entity { + protected String name; + public final String getName() { + return this.name; + } + + @Override + public String toString() { + return this.name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Entity entity = (Entity) o; + return Objects.equals(name, entity.name); + } + + @Override + public int hashCode() { + return Objects.hash(name); + } +} diff --git a/src/Entity/IGrabbable.java b/src/Entity/IGrabbable.java new file mode 100644 index 0000000..31fced8 --- /dev/null +++ b/src/Entity/IGrabbable.java @@ -0,0 +1,5 @@ +package Entity; + +public interface IGrabbable { + String getName(); +} diff --git a/src/Items/Container.java b/src/Items/Container.java new file mode 100644 index 0000000..669b879 --- /dev/null +++ b/src/Items/Container.java @@ -0,0 +1,30 @@ +package Items; + +import java.util.Objects; + +public class Container extends Item { + private final Item innerItem; + + public Container(String name, Item item) { + super(name); + this.innerItem = item; + } + + public Item getInnerItem() { + return this.innerItem; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + Container container = (Container) o; + return Objects.equals(innerItem, container.innerItem); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), innerItem); + } +} diff --git a/src/Items/Item.java b/src/Items/Item.java new file mode 100644 index 0000000..0797681 --- /dev/null +++ b/src/Items/Item.java @@ -0,0 +1,19 @@ +package Items; + +import Entity.*; + +import java.util.Objects; + +public class Item extends Entity implements IGrabbable { + public Item(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + Item item = (Item) o; + return Objects.equals(this.name, item.name); + } +} diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 0000000..1d10b5d --- /dev/null +++ b/src/Main.java @@ -0,0 +1,27 @@ +import Characters.FrenBok; +import Characters.Karlson; +import Items.Container; +import Items.Item; + +public class Main { + public static void main(String[] args) { + // Персонажи + Karlson karlson = new Karlson(); + FrenBok frenBok = new FrenBok(); + + // Предметы + Item kitchenHob = new Item("плита"); + Item meatball = new Item("тефтелька"); + Container fryingPan = new Container("сковородка", meatball); + Item door = new Item("дверь"); + + System.out.println(karlson.feel() + '.'); + System.out.println(karlson.moveTo(kitchenHob) + '.'); + System.out.println(karlson.grabFrom(fryingPan) + '.'); + System.out.println("Вот этого ему не следовало делать."); + System.out.println(frenBok.feel() + '.'); + System.out.println(frenBok.moveTo(karlson) + '.'); + System.out.println(frenBok.grabCharacter(karlson) + '.'); + System.out.println(frenBok.pushCharacterBehindItem(karlson, door) + '.'); + } +} \ No newline at end of file