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("おしまい");
}
}