Пример #1
0
  public static void main(String[] args) {
    int p1Score = 0;
    int p2Score = 0;

    while (true) {
      System.out.println("P1:" + p1Score + " P2:" + p2Score);
      Trainer player1 = new Trainer(null, 0, "AI", 1000);
      Trainer player2 = new Trainer(null, 0, "AI-2", 1000);

      String player1Move = null;
      String player2Move = null;

      for (int i = 0; i < 10; i++) {
        if (player2Move != null) {
          player1.updateBoard(player2Move);
        }
        player1Move = player1.makeMove();
        // System.out.println("P1:" + player1Move);
        player2.updateBoard(player1Move);
        player2Move = player2.makeMove();
        // System.out.println("P2:" + player2Move);
      }

      player1.updateBoard(player2Move);
      // Always score grid using 1, becuase to player 2 they are still the primary player
      int player2Score = Scorer.score(player2.getGrid(), 1);
      if (player2Score < 500001) {
        p1Score++;
      } else {
        p2Score++;
      }
      player1.endGame(player2Score < 500001);
      player2.endGame(player2Score >= 500001);
    }
  }
Пример #2
0
  public void executeMoves() {
    MoveOrder attackOrder = resolveTurnOrder(player, opponent);

    // choose attacks
    player.setChosenAction(chooseAttack(player));
    opponent.setChosenAction(chooseAttack(opponent));

    // get order for always correct sequential attacking
    Trainer firstP = (attackOrder.getFirst());
    Move firstPM = (attackOrder.getFirst().getChosenAction());
    Trainer secondP = (attackOrder.getSecond());
    Move secondPM = (attackOrder.getSecond().getChosenAction());

    if (firstPM.getCat().toUpperCase().equals("PHYSICAL")) {
      attack(firstP.getPokemon(), firstPM, secondP.getPokemon());
    } else if (firstPM.getCat().toUpperCase().equals("STATUS")) {
      stat(firstPM, secondP.getPokemon());
    } else if (firstPM.getName().toUpperCase().equals("USEPOTION")) {
      heal(firstP);
    }

    if (secondPM.getCat().toUpperCase().equals("PHYSICAL")) {
      attack(secondP.getPokemon(), secondPM, firstP.getPokemon());
    } else if (secondPM.getCat().toUpperCase().equals("STATUS")) {
      stat(secondPM, firstP.getPokemon());
    } else if (secondPM.getName().toUpperCase().equals("USEPOTION")) {
      heal(secondP);
    }
  }
Пример #3
0
  public static void main(String[] args) {
    if (args.length < 2) {
      usage();
    }

    String cookedExampleFile = args[0];
    String outputParamFile = args[1];
    int epochs = 5;
    int threads = 4;
    boolean traceLosses = false;
    boolean roundRobin = false;
    if (args.length > 2) {
      for (int i = 2; i < args.length; i++) {
        if ("--epochs".equals(args[i])) {
          if (i + 1 < args.length) epochs = Integer.parseInt(args[++i]);
          else usage();
        } else if ("--traceLosses".equals(args[i])) {
          traceLosses = true;
        } else if ("--threads".equals(args[i])) {
          if (i + 1 < args.length) threads = Integer.parseInt(args[++i]);
          else usage();
        } else if ("--rr".equals(args[i])) {
          roundRobin = true;
        } else usage();
      }
    }

    //		L2PosNegLossTrainedSRW<String> srw = new L2PosNegLossTrainedSRW<String>();
    //		Trainer<String> trainer = new MultithreadedTrainer<String>(srw,threads);
    //		Map<String,Double> paramVec = trainer.trainParametersOnCookedIterator(
    //				trainer.importCookedExamples(cookedExampleFile, new
    // AnnotatedGraphFactory<String>(AnnotatedGraphFactory.STRING)),
    //				epochs,
    //				traceLosses);

    // wait for keypress
    //		System.out.println("Press any key to start.");
    //		Reader in = new InputStreamReader(System.in);
    //		try {
    //			in.read();
    //		} catch (IOException e) {
    //			// TODO Auto-generated catch block
    //			e.printStackTrace();
    //			System.exit(1);
    //		}

    L2PosNegLossTrainedSRW srw = new L2PosNegLossTrainedSRW();
    Trainer trainer = null;
    if (roundRobin) {
      trainer = new MultithreadedRRTrainer(srw, threads);
    } else {
      trainer = new MultithreadedTrainer(srw, threads);
    }
    //		Trainer trainer = new MultithreadedTrainer(srw,threads);
    Map<String, Double> paramVec =
        trainer.trainParametersOnCookedIterator(
            trainer.importCookedExamples(cookedExampleFile), epochs, traceLosses);
    Dictionary.save(paramVec, outputParamFile);
  }
Пример #4
0
 public void printVerdict() {
   if (player.getPokemon().getHp() > 0 && opponent.getPokemon().getHp() < 0) {
     System.out.println("Gary's pokemon fainted!");
     System.out.println("You win!");
   } else if (player.getPokemon().getHp() < 0 && opponent.getPokemon().getHp() > 0) {
     System.out.println("Your pokemon fainted!");
     System.out.println("You lost! I hope you saved your game...");
   }
 }
Пример #5
0
 public void heal(Trainer trainer) {
   System.out.println(trainer.getName() + " is using a potion!");
   wait(600);
   if (trainer.getPotionAmount() == 0) {
     System.out.println("Tried to use a potion but didn't have any!");
     wait(600);
   } else {
     trainer.usePotion();
   }
 }
Пример #6
0
 public void drawSituation() {
   wait(600);
   System.out.println("\n");
   wait(50);
   System.out.println("|---------------------------------------|");
   wait(50);
   System.out.println(
       "|    "
           + opponent.getName()
           + "'s "
           + opponent.getPokemonName()
           + " HP:"
           + opponent.getPokemon().getHp()
           + " \t\t|");
   wait(50);
   System.out.println("|\t\t\t\t\t|");
   wait(50);
   System.out.println("|\t\t(-o-)\t\t        |");
   wait(50);
   System.out.println("|\t\t\t\t\t|");
   wait(50);
   System.out.println(
       "|\t"
           + player.getName()
           + "'s "
           + player.getPokemonName()
           + " HP:"
           + player.getPokemon().getHp()
           + " \t\t|");
   wait(50);
   System.out.println("|---------------------------------------|");
   wait(50);
   System.out.println("\n");
   wait(50);
 }
Пример #7
0
  @Override
  protected void setUpExamples(int epoch, Collection<PosNegRWExample> examples) {
    super.setUpExamples(epoch, examples);
    if (currentTrainingRun.threads != null) {
      throw new IllegalStateException(
          "template called out of order! Must clean up last example set using cleanUpExamples()");
    }

    currentTrainingRun.threads = new ArrayList<Thread>();
    currentTrainingRun.queues.clear();
    for (int k = 0; k < nthreads; k++) {
      currentTrainingRun.queues.add(new ArrayList<TrainerExample>());
    }
  }
  public boolean validateTrainer(Trainer trainer) {
    if (trainer == null) return false;
    if (trainer.getFirstName() == null) return false;
    if (trainer.getFirstName().trim().equals("")) return false;
    if (trainer.getFirstName().matches(".*\\d.*")) return false;
    if (trainer.getLastName() == null) return false;
    if (trainer.getLastName().trim().equals("")) return false;
    if (trainer.getLastName().matches(".*\\d.*")) return false;
    if (trainer.getAge() == null) return false;
    if (trainer.getAge() < 40) return false;
    if (trainer.getAnnualSalary() == null) return false;
    if (trainer.getAnnualSalary().getAmount() == null) return false;
    if (trainer.getPreviousTeamList() == null) return false;
    if (trainer.getPreviousTeamList().size() < 1) return false;
    for (Team team : trainer.getPreviousTeamList()) {
      if (team == null) return false;
    }

    return true;
  }
Пример #9
0
  public void chooseCharacters() {
    String playerPokemonName;
    String opponentPokemonName;
    while (true) {
      System.out.print("Enter your pokemon: ");
      playerPokemonName = reader.nextLine();
      System.out.print("Enter opponent's pokemon: ");
      opponentPokemonName = reader.nextLine();
      // a bit hardcoded...
      if (!playerPokemonName.equals("bulbasaur")
          && !playerPokemonName.equals("charmander")
          && !playerPokemonName.equals("squirtle")) {
        System.out.println("Either name was invalid! Try lowercase?");
      } else if ((!opponentPokemonName.equals("bulbasaur")
          && !opponentPokemonName.equals("charmander")
          && !opponentPokemonName.equals("squirtle"))) {
        System.out.println("Either name was invalid! Try lowercase?");
      } else {
        break;
      }
    }
    player = new Trainer("Ash", playerPokemonName);
    opponent = new Trainer("Gary", opponentPokemonName);

    pokemons.add(player.getPokemon());
    pokemons.add(opponent.getPokemon());
    wait(600);
    System.out.println(
        "So it is - "
            + player.getName()
            + "'s "
            + player.getPokemonName()
            + " versus "
            + opponent.getName()
            + "'s "
            + opponent.getPokemonName()
            + "! ");
    wait(600);
  }
Пример #10
0
  public Move chooseAttack(Trainer trainer) {

    // player attackchooser
    if (trainer == player) {
      ArrayList<Move> availableMoves = player.getPokemon().getMoveSet();
      for (int i = 0; i < availableMoves.size(); i++) {
        System.out.println(i + ") " + availableMoves.get(i));
      }
      System.out.println("2) Use Potion (" + player.getPotionAmount() + " left)");

      System.out.print("\n Choose action (number): ");
      String command = reader.nextLine();
      Move chosenMove;
      while (true) {
        if (command.equals("0")) {
          chosenMove = availableMoves.get(0);
          System.out.println(
              player.getPokemonName() + " will use: " + availableMoves.get(0).getName());
          break;
        } else if (command.equals("1")) {
          chosenMove = availableMoves.get(1);
          System.out.println(
              player.getPokemonName() + " will use: " + availableMoves.get(1).getName());
          break;
        } else if (command.equals("2")) { // use potion as a move, check for it in method attack()
          chosenMove = new Move("usepotion", "", "", 0, 0, 0);
          break;
        } else {
          System.out.println("Invalid move!");
          System.out.print("\n Choose action (number): ");
          command = reader.nextLine();
        }
      }
      return chosenMove;
    }
    // AI control
    else if (trainer == opponent) {
      Move chosenMove;
      int randomized;
      randomized = random.nextInt((2 - 0 + 1) + 0);
      ArrayList<Move> availableMoves = opponent.getPokemon().getMoveSet();
      for (int i = 0; i < availableMoves.size(); i++) {
        if (randomized == 2) {
          if (opponent.getPokemon().isFullHp()) {
            // System.out.println("Gary tried to use a potion, but his pokemon is already at Full
            // HP!");
            wait(200);
            chosenMove = availableMoves.get(0);
          }

          if (opponent.getPokemon().getHp() < 40 && opponent.getPotionAmount() != 0) {
            chosenMove = new Move("usepotion", "", "", 0, 0, 0);
          } else {
            chosenMove = availableMoves.get(0);
            System.out.println(
                "Gary's " + opponent.getPokemonName() + " will use: " + chosenMove.getName());
            wait(600);
          }

          return chosenMove;
        } else {
          wait(200);
          chosenMove = availableMoves.get(randomized);
          System.out.println(
              "Gary's " + opponent.getPokemonName() + " will use: " + chosenMove.getName());
          wait(600);
          return chosenMove;
        }
      }
      System.out.println("Critical error! Exiting... \"chooseAttack()\", AI controlled");
      return null;
    } else {
      System.out.println("Critical error! Exiting... \"chooseAttack()\"");
      return null;
    }
  }