This commit is contained in:
Ivan Zinchenko 2023-11-28 01:21:36 +03:00
commit 1df8332f73
Signed by: zinch
GPG Key ID: 6D45AA2C8FD6A37E
13 changed files with 277 additions and 0 deletions

34
.gitignore vendored Normal file
View File

@ -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

3
MANIFEST.mf Normal file
View File

@ -0,0 +1,3 @@
Manifest-Version: 1.0
Created-By: zinch
Main-class: Main

6
Makefile Normal file
View File

@ -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

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1,6 @@
package Characters;
public enum Gender {
MAN,
WOMAN
}

View File

@ -0,0 +1,7 @@
package Characters;
import Entity.IGrabbable;
public interface IGrabbableCharacter extends IGrabbable {
String getGrabbablePart();
}

View File

@ -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 "шиворот";
}
}

28
src/Entity/Entity.java Normal file
View File

@ -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);
}
}

View File

@ -0,0 +1,5 @@
package Entity;
public interface IGrabbable {
String getName();
}

30
src/Items/Container.java Normal file
View File

@ -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);
}
}

19
src/Items/Item.java Normal file
View File

@ -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);
}
}

27
src/Main.java Normal file
View File

@ -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) + '.');
}
}