Newer
Older
Onitaizi / src / Kabu / TheGiantTurnip.java
@Motoki Miura Motoki Miura on 13 Feb 2022 3 KB stories
package Kabu;

public class TheGiantTurnip {
    public static void main(String[] args){
        System.out.println("「おおきなかぶ」~ロシア民話~");

        Human jisan = new Human("おじいさん",40);
        Turnip kabu = jisan.plant();

        jisan.grab(kabu);
        jisan.pull();

        Human basan = new Human("おばあさん",20);
        jisan.call(basan);
        basan.pull();

        Human mago = new Human("まご",10);
        basan.call(mago);
        mago.pull();

        Dog inu = new Dog(15);
        mago.call(inu);
        inu.pull();

        Cat neko = new Cat(10);
        inu.call(neko);
        neko.pull();

        Mouse nezumi = new Mouse(5);
        neko.call(nezumi);
        nezumi.pull();
    }
}

abstract class Organism{
    String name = "";
    int power;

    abstract void pull(int receivedPower);

    String getName(){
        return name;
    }    
}

class Animal extends Organism{

    Organism grabbingObject;

    Turnip plant(){
        System.out.println(name + "はカブを植えました.");
        return new Turnip();
    }

    void call(Animal dareka){
        dareka.grabbingObject = this;
        System.out.println(name + "は" + dareka.getName() + "を呼んできました.");
    }

    void pull() {
        if(grabbingObject == null){
            System.out.println("何も掴んでいません");
            return;
        }
        if(grabbingObject instanceof Vegetable){
            System.out.println(name + "は" + grabbingObject.getName() + "を引っ張りました.");
        }else{
            System.out.println(name + "は" + grabbingObject.getName() + "を引っ張り,");
        }
        grabbingObject.pull(power);    
    }

    @Override
    void pull(int receivedPower) {
        if(grabbingObject == null){
            System.out.println("何も掴んでいません");
            return;
        }
        if(grabbingObject instanceof Vegetable){
            System.out.println(name + "は" + grabbingObject.getName() + "を引っ張りました.");
        }else{
            System.out.println(name + "は" + grabbingObject.getName() + "を引っ張り,");
        }
        grabbingObject.pull(power + receivedPower);
    }

    void grab(Organism _grabbingObject){
        grabbingObject = _grabbingObject;
    }
}
class Human extends Animal{
    Human(String _name, int _power){
        name = _name;
        power = _power;
    }
}
class Dog extends Animal{
    Dog(int _power){
        name = "犬";
        power = _power;
    }
}
class Cat extends Animal{
    Cat(int _power){
        name = "猫";
        power = _power;
    }
}
class Mouse extends Animal{
    Mouse(int _power){
        name = "ねずみ";
        power = _power;
    }
}

class Vegetable extends Organism{
    boolean harvest = false;
    @Override
    void pull(int receivedPower) {
        System.out.println("うんとこしょ,どっこいしょ");
        if (power <= receivedPower){
            System.out.println(name + "は抜けました.(条件:"+power+"以上,現在:"+receivedPower+")");
            harvest = true;
        }else{
            System.out.println("しかし" + name + "は抜けません.(条件:"+power+"以上,現在:"+receivedPower+")");
            System.out.println();
        }
    }
}

class Turnip extends Vegetable{
    Turnip(){
        name = "カブ";
        power = 100;
        System.out.println("大きな"+ name + "ができました.");
    }
}