예제 #1
0
  @Override
  public Agent vote() {

    List<Agent> whiteAgent = new ArrayList<>();
    List<Agent> blackAgent = new ArrayList<>();

    for (Judge j : getMyJudgeList()) {
      if (getLatestDayGameInfo().getAliveAgentList().contains(judge.getTarget())) {
        switch (j.getResult()) {
          case HUMAN:
            whiteAgent.add(judge.getTarget());
            break;
          case WEREWOLF:
            blackAgent.add(judge.getTarget());
            break;
        }
      }
    }

    if (blackAgent.size() > 0) {
      return randomSelect(blackAgent);
    } else {
      List<Agent> voteCandidates = new ArrayList<Agent>();
      voteCandidates.addAll(getLatestDayGameInfo().getAliveAgentList());
      voteCandidates.remove(getMe());
      voteCandidates.removeAll(whiteAgent);

      return randomSelect(voteCandidates);
    }
  }
예제 #2
0
 @Override
 public String talk() {
   if (!isComingOut) {
     String comingoutTalk = TemplateTalkFactory.comingout(getMe(), getMyRole());
     isComingOut = true;
     return comingoutTalk;
   } else {
     for (Judge judge : getMyJudgeList()) {
       if (!myToldJudgeList.contains(judge)) {
         String resultTalk = TemplateTalkFactory.divined(judge.getTarget(), judge.getResult());
         myToldJudgeList.add(judge);
         return resultTalk;
       }
     }
   }
   return Talk.OVER;
 }
예제 #3
0
  @Override
  public String talk() {
    if (!isComingout) {
      isComingout = true;
      String ret = TemplateTalkFactory.comingout(getMe(), getMyRole());
      return ret;
    }

    if (!tellMyJudge) {
      tellMyJudge = true;
      Judge judge = this.getLatestDayGameInfo().getDivineResult();
      if (judge != null) {
        String ret = TemplateTalkFactory.divined(judge.getTarget(), judge.getResult());
        return ret;
      }
    }

    return Talk.OVER;
  }
예제 #4
0
  @Override
  public Agent divine() {
    List<Agent> aliveAgentList = getLatestDayGameInfo().getAliveAgentList();
    aliveAgentList.remove(this.getMe());

    if (!isAgainstSeer) {
      return randomSelect(aliveAgentList);
    } else {
      double flag = Math.random();
      if (0.00D <= flag && flag < 0.05D) {
        List<Agent> againstSeer = new ArrayList<>();
        for (Agent agent : this.comingoutRole.keySet()) {
          Role role = this.comingoutRole.get(agent);
          if (role.equals(Role.SEER) && !agent.equals(this.getMe())) {
            againstSeer.add(agent);
          }
        }

        if (againstSeer.size() > 0) {
          return randomSelect(againstSeer);
        }
      } else if (0.05 <= flag && flag < 0.75D) {
        List<Agent> anotherDivinedAgent = new ArrayList();
        for (int i = 0; i < this.anotherJudgeList.size(); i++) {
          Judge judge = anotherJudgeList.get(i);
          if (!anotherDivinedAgent.contains(judge.getTarget())) {
            anotherDivinedAgent.add(judge.getTarget());
          }
        }

        if (anotherDivinedAgent.size() > 0) {
          return randomSelect(anotherDivinedAgent);
        }
      }

      return randomSelect(aliveAgentList);
    }
  }
예제 #5
0
 @Override
 public Agent divine() {
   List<Agent> divineCandidates = new ArrayList<Agent>();
   divineCandidates.addAll(
       COResult.aliveGrayForMe(getLatestDayGameInfo().getAliveAgentList(), getMe()));
   divineCandidates.removeAll(
       COResult.aliveBlack(getLatestDayGameInfo().getAliveAgentList(), getMe()));
   for (Judge judge : getMyJudgeList()) {
     divineCandidates.remove(judge.getTarget());
   }
   if (divineCandidates.size() > 0) {
     return randomSelect(divineCandidates);
   } else {
     divineCandidates.addAll(getLatestDayGameInfo().getAliveAgentList());
     divineCandidates.removeAll(
         COResult.aliveBlack(getLatestDayGameInfo().getAliveAgentList(), getMe()));
     for (Judge judge : getMyJudgeList()) {
       divineCandidates.remove(judge.getTarget());
     }
     if (divineCandidates.size() > 0) {
       return randomSelect(divineCandidates);
     } else {
       divineCandidates.addAll(
           COResult.aliveWhite(getLatestDayGameInfo().getAliveAgentList(), getMe()));
       for (Judge judge : getMyJudgeList()) {
         divineCandidates.remove(judge.getTarget());
       }
       if (divineCandidates.size() > 0) {
         return randomSelect(divineCandidates);
       } else {
         for (Agent seer : COResult.getSeerCOAgent()) {
           divineCandidates.add(seer);
         }
         divineCandidates.remove(getMe());
         for (Judge judge : getMyJudgeList()) {
           divineCandidates.remove(judge.getTarget());
         }
         if (divineCandidates.size() > 0) {
           return randomSelect(divineCandidates);
         } else {
           return getMe();
         }
       }
     }
   }
 }
예제 #6
0
  public static Set<SelectAction> getAbleSelectActions(Information info) {
    Set<SelectAction> actions = new HashSet<SelectAction>();

    List<Agent> seerList = info.getSeerCOList();
    List<Agent> mediumList = info.getMediumCOList();

    Set<Agent> taged = new HashSet<Agent>();

    Set<Agent> surviver = (Set<Agent>) info.getSurviver();
    if (seerList.size() > 0) {
      Agent seer = seerList.get(0);
      if (surviver.contains(seer)) {
        actions.add(S1);
        taged.add(seer);
      }
      Set<Judge> judges = info.getJudgeSets().get(seer);
      if (judges != null) {
        for (Judge judge : judges) {
          if (surviver.contains(judge.getTarget())) {
            if (judge.getResult() == Species.HUMAN) {
              actions.add(JH1);
            } else {
              actions.add(JW1);
            }
            taged.add(judge.getTarget());
          }
        }
      }
    }
    if (seerList.size() > 1) {
      Agent seer = seerList.get(1);
      if (surviver.contains(seer)) {
        actions.add(S2);
        taged.add(seer);
      }
      Set<Judge> judges = info.getJudgeSets().get(seer);
      if (judges != null) {
        for (Judge judge : judges) {
          if (surviver.contains(judge.getTarget())) {
            if (judge.getResult() == Species.HUMAN) {
              actions.add(JH2);
            } else {
              actions.add(JW2);
            }
            taged.add(judge.getTarget());
          }
        }
      }
    }
    if (seerList.size() > 2) {
      Agent seer = seerList.get(2);
      if (surviver.contains(seer)) {
        actions.add(S3);
        taged.add(seer);
      }
      Set<Judge> judges = info.getJudgeSets().get(seer);
      if (judges != null) {
        for (Judge judge : judges) {
          if (surviver.contains(judge.getTarget())) {
            if (judge.getResult() == Species.HUMAN) {
              actions.add(JH3);
            } else {
              actions.add(JW3);
            }
            taged.add(judge.getTarget());
          }
        }
      }
    }

    if (mediumList.size() > 0 && surviver.contains(mediumList.get(0))) {
      actions.add(M1);
      taged.add(mediumList.get(0));
    }
    if (mediumList.size() > 1 && surviver.contains(mediumList.get(1))) {
      actions.add(M2);
      taged.add(mediumList.get(1));
    }
    if (mediumList.size() > 2 && surviver.contains(mediumList.get(2))) {
      actions.add(M3);
      taged.add(mediumList.get(2));
    }

    if (!taged.containsAll(surviver)) {
      actions.add(OT);
    }
    actions.add(RA);
    return actions;
  }
예제 #7
0
  public List<Agent> getSelectedAgents(Information info) {
    List<Agent> agents = new ArrayList<Agent>();
    try {
      switch (this) {
        case S1:
        case JW1:
        case JH1:
          Agent seer = info.getSeerCOList().get(0);
          if (this == S1) {
            agents.add(seer);
            break;
          }
          for (Judge judge : info.getJudgeSets().get(seer)) {
            if (this == JH1 && judge.getResult() == Species.HUMAN) {
              agents.add(judge.getTarget());
            } else if (this == JW1 && judge.getResult() == Species.WEREWOLF) {
              agents.add(judge.getTarget());
            }
          }
          break;

        case S2:
        case JW2:
        case JH2:
          Agent seer2 = info.getSeerCOList().get(1);
          if (this == S2) {
            agents.add(seer2);
            break;
          }
          for (Judge judge : info.getJudgeSets().get(seer2)) {
            if (this == JH2 && judge.getResult() == Species.HUMAN) {
              agents.add(judge.getTarget());
            } else if (this == JW2 && judge.getResult() == Species.WEREWOLF) {
              agents.add(judge.getTarget());
            }
          }
          break;

        case S3:
        case JW3:
        case JH3:
          Agent seer3 = info.getSeerCOList().get(2);
          if (this == S3) {
            agents.add(seer3);
            break;
          }
          for (Judge judge : info.getJudgeSets().get(seer3)) {
            if (this == JH3 && judge.getResult() == Species.HUMAN) {
              agents.add(judge.getTarget());
            } else if (this == JW3 && judge.getResult() == Species.WEREWOLF) {
              agents.add(judge.getTarget());
            }
          }
          break;

        case M1:
          agents.add(info.getMediumCOList().get(0));
          break;
        case M2:
          agents.add(info.getMediumCOList().get(1));
          break;
        case M3:
          agents.add(info.getMediumCOList().get(2));
          break;

        case OT:
          agents.addAll(info.getSurviver());

          List<Agent> remover = new ArrayList<Agent>();
          for (int i = 0; i < info.getSeerCOList().size(); i++) {
            if (i >= 3) {
              break;
            }
            Agent a = info.getSeerCOList().get(i);
            remover.add(a);
            if (info.getJudgeSets().get(a) != null) {
              for (Judge judge : info.getJudgeSets().get(a)) {
                remover.add(judge.getTarget());
              }
            }
          }

          for (int i = 0; i < info.getMediumCOList().size(); i++) {
            if (i >= 3) {
              break;
            }
            Agent a = info.getMediumCOList().get(i);
            remover.add(a);
          }

          agents.removeAll(remover);
          if (agents.size() == 0) {
            System.out.println("a");
          }
          return agents;

        case RA:
          agents.addAll(info.getSurviver());
          if (agents.size() == 0) {
            System.out.println("aaaa");
          }
          return agents;

        default:
          break;
      }

    } catch (Exception e) {
      System.out.println("不適切なActionの選択:" + this);
      e.printStackTrace();
    }

    Set<Agent> surviver = (Set<Agent>) info.getSurviver();
    List<Agent> remover = new ArrayList<Agent>();
    for (Agent agent : agents) {
      if (!surviver.contains(agent)) {
        remover.add(agent);
      }
    }
    agents.removeAll(remover);
    if (agents.size() == 0) {
      System.out.println("aa");
    }
    return agents;
  }
예제 #8
0
 @Override
 public Agent vote() {
   List<Agent> whiteAgent = new ArrayList<Agent>();
   List<Agent> blackAgent = new ArrayList<Agent>();
   for (Judge judge : getMyJudgeList()) {
     if (getLatestDayGameInfo().getAliveAgentList().contains(judge.getTarget())) {
       switch (judge.getResult()) {
         case HUMAN:
           whiteAgent.add(judge.getTarget());
           break;
         case WEREWOLF:
           blackAgent.add(judge.getTarget());
           break;
       }
     }
   }
   if (blackAgent.size() > 0) {
     return randomSelect(blackAgent);
   } else {
     List<Agent> voteCandidates = new ArrayList<Agent>();
     if (fakeSeerCOAgent.size() > 0 && getLatestDayGameInfo().getAgentList().size() < 9) {
       for (Agent fake : fakeSeerCOAgent) {
         if (getLatestDayGameInfo().getAliveAgentList().contains(fake)) {
           voteCandidates.add(fake);
         }
       }
     }
     if (voteCandidates.size() > 0) {
       return randomSelect(voteCandidates);
     } else {
       voteCandidates.addAll(
           COResult.aliveGrayForMe(getLatestDayGameInfo().getAliveAgentList(), getMe()));
       voteCandidates.removeAll(whiteAgent);
       if (voteCandidates.size() > 0) {
         return randomSelect(voteCandidates);
       } else {
         voteCandidates.addAll(getLatestDayGameInfo().getAliveAgentList());
         voteCandidates.removeAll(COResult.getSeerCOAgent());
         voteCandidates.removeAll(COResult.getMediumCOAgent());
         voteCandidates.removeAll(whiteAgent);
         if (voteCandidates.size() > 0) {
           return randomSelect(voteCandidates);
         } else {
           for (Agent seer : COResult.getSeerCOAgent()) {
             if (getLatestDayGameInfo().getAliveAgentList().contains(seer)) {
               voteCandidates.add(seer);
             }
             voteCandidates.remove(getMe());
           }
           if (voteCandidates.size() > 0) {
             return randomSelect(voteCandidates);
           } else {
             voteCandidates.addAll(getLatestDayGameInfo().getAliveAgentList());
             voteCandidates.remove(getMe());
             return randomSelect(voteCandidates);
           }
         }
       }
     }
   }
 }