package Kaguyahime; import java.util.ArrayList; import java.util.Arrays; import java.util.List; abstract class Person{ public String name; public String sex; public Location address; public String getName() { return name; } public String getAddress () { return address.getAddress(); } public String getSex() { return sex; } public void Move(Location address){ this.address=address; System.out.println(this.getName()+"は、"+this.getAddress()+"に移動しました"); } } class Kaguyahime extends Person{ private static Kaguyahime kaguyahime = new Kaguyahime(); public static Kaguyahime getInstance() { return kaguyahime; } private Kaguyahime() { } private String name="かぐや姫"; private String sex="women"; private Location address ; public String getName() { return name; } public String getAddress () { return address.getAddress(); } public String getSex() { return sex; } public void Move(Location address){ this.address=address; System.out.println(this.getName()+"は、"+this.getAddress()+"に移動しました"); } } class Ojiisan extends Person{ private static Ojiisan ojiisan = new Ojiisan(); public static Ojiisan getInstance() { return ojiisan; } private Ojiisan() { } private String name="おじいさん"; private String sex="men"; private Location address; public String getName() { return name; } public String getAddress () { return address.getAddress(); } public String getSex() { return sex; } public void Move(Location address){ this.address=address; System.out.println(this.getName()+"は、"+this.getAddress()+"に移動しました"); } void sibakari(Location location){ this.address=location; System.out.println(this.getName()+"は、"+this.getAddress()+"へ芝刈りへ行きました"); } public void Find_take(){ System.out.println(this.getName()+"は、"+this.getAddress()+"で光る竹を見つけました"); } public Person take_cut(){ System.out.println("ふしぎに思って切ってみると、そのなかには、ちいさくてかわいい女の子がはいっていました。"); return Kaguyahime.getInstance(); } } class Mob extends Person{ public String name; public String sex; public Location address; public Quest quest; public Mob(String name,String sex, Location location){ this.name=name; this.sex=sex; this.address=location; System.out.println(this.getName()+this.sex+"は、"+this.getAddress()+"に生成されました"); } public String getName() { return name; } public String getAddress () { return address.getAddress(); } public String getSex() { return sex; } public Quest getQuest() { return quest; } public void Move(Location address){ this.address=address; System.out.println(this.getName()+"は、"+this.getAddress()+"に移動しました"); } public void AddQuest(Quest quest){ this.quest=quest; } } class Location{ public String address; public Location(String address){ this.address=address; } public String getAddress () { return address; } void set_name(String add){ this.address=add; } } class Quest{ Person character; Person requester; String target; Location destination; public Quest(Person character,Person requester,String target,Location destination){ this.character = character; this.requester = requester; this.target = target; this.destination = destination; } public boolean try_quest(){ System.out.println(this.character.getName()+"は、"+this.requester.getName()+"からの依頼に挑戦しました。ターゲットは"+this.destination.getAddress()+"の"+this.target+"です"); return false; } } public class Kaguyahime_story { public static void main(String[] args) { System.out.println("Kaguyahime_start"); Location near_miyako=new Location("都の近く"); Ojiisan ojiisan =Ojiisan.getInstance(); Location yama=new Location("山"); ojiisan.sibakari(yama); ojiisan.Find_take(); Person kaguyahime = ojiisan.take_cut(); kaguyahime.Move(near_miyako); ojiisan.Move(near_miyako); List<String> Males_name = new ArrayList<>(Arrays.asList("石作皇子", "庫持皇子", "右大臣阿部御主人","大納言大友御行","中納言石上麿呂足")); List<Mob> Males = new ArrayList<>(); Location miyako=new Location("都"); System.out.println("・・・・・・・・・・・・"); for (int i =0 ;i<=4;i++){ Males.add(new Mob(Males_name.get(i), "男", miyako)); } System.out.println("・・・・・・・・・・・・"); for (int i =0 ;i<=4;i++){ Males.get(i).Move(near_miyako); } List<String> Items = new ArrayList<>(Arrays.asList("仏の御石の鉢", "根は白金、茎は黄金、白い珠の実の付く枝", "火ねずみの皮衣","龍の首の五色の珠","燕の子安貝")); List<Location> Destination = new ArrayList<>(Arrays.asList(new Location("天竺行") , new Location("蓬莱山"), new Location("唐土,インド"),new Location("不明"),new Location("不明"))); for(int i=0;i<=4;i++){ Males.get(i).AddQuest( new Quest(Males.get(i),kaguyahime,Items.get(i),Destination.get(i)) ); } boolean result; List<Person> engagement = new ArrayList<>(); for(int i=0;i<=4;i++){ result = Males.get(i).quest.try_quest(); if (result==false){ System.out.println("クエストは失敗しました"); } else{ System.out.println("クエストは成功しました"); engagement.add(Males.get(i)); } } System.out.println("クエストを達成した人は、"+engagement.size()+"でした"); if (engagement.size() ==0){ Location thuki=new Location("月"); kaguyahime.Move(thuki); } else{ System.out.println(kaguyahime.getName()+"と"+engagement.get(0)+"は結婚しました"); } System.out.println("おしまい"); } }