lundi 6 février 2017

How to Pair Up Random Indices of an ArrayList with each other

I am currently working on a project where I read in a CSV file that contains a list of Pokemon, as well as their traits. I am trying to run a battle simulator that randomly pairs up these Pokemon with each other and compares their combatScore, which is a result of a simple calculation using their traits such as speed, attack, defense, etc. I read in all of the Pokemon from the CSV file into an ArrayList of type Pokemon. Now, I want to randomly pair them up with each other and compare their combatScore; whoever has the higher score moves on to the next round, and the loser is placed into another ArrayList of defeated Pokemon. However, I do not know how to randomly pair up the Pokemon. Here is my code of the main class so far:

import java.io.*;
import java.util.ArrayList;
import java.util.Random;

public class assign1 {

public static void main(String[] args) throws IOException {

    String csvFile = args[0];   //path to CSV file
    String writeFile = args[1]; //name of output file that contains list of Pokemon and their traits
    BufferedReader br = null;
    String line = "";
    String cvsSplitBy = ",";

    ArrayList<Pokemon> population = new ArrayList<Pokemon>();

    FileWriter fileWriter = new FileWriter(writeFile);

    BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

    try {

        br = new BufferedReader(new FileReader(csvFile));
        String headerLine = br.readLine(); // used to read first line of CSV file that contains headers
        while ((line = br.readLine()) != null) {

            Pokemon creature = new Pokemon();
            // use comma as separator
            String[] pokemon = line.split(cvsSplitBy);

            creature.setId(pokemon[0]);
            creature.setName(pokemon[1]);
            creature.setType1(pokemon[2]);
            creature.setType2(pokemon[3]);
            creature.setTotal(pokemon[4]);
            creature.setHp(Integer.parseInt(pokemon[5]));
            creature.setAttack(Integer.parseInt(pokemon[6]));
            creature.setDefense(Integer.parseInt(pokemon[7]));
            creature.setSpAtk(Integer.parseInt(pokemon[8]));
            creature.setSpDef(Integer.parseInt(pokemon[9]));
            creature.setSpeed(Integer.parseInt(pokemon[10]));
            creature.setGeneration(Integer.parseInt(pokemon[11]));
            creature.setLegendary(Boolean.parseBoolean(pokemon[12]));
            creature.getCombatScore();

            // Adds individual Pokemon to the population ArrayList
            population.add(creature);

            // Writes to pokemon.txt the list of creatures
            bufferedWriter.write(creature.getId() + ". "
                    + "Name: " + creature.getName() + ": "
                    + "Type 1: " + creature.getType1() + ", "
                    + "Type 2: " + creature.getType2() + ", "
                    + "Total: " + creature.getTotal() + ", "
                    + "HP: " + creature.getHp() + ", "
                    + "Attack: " + creature.getAttack() + ", "
                    + "Defense: " + creature.getDefense() + ", "
                    + "Special Attack: " + creature.getSpAtk() + ", "
                    + "Special Defense: " + creature.getSpDef() + ", "
                    + "Speed: " + creature.getSpeed() + ", "
                    + "Generation: " + creature.getGeneration() + ", "
                    + "Legendary? " + creature.isLegendary() + ", "
                    + "Score: " + creature.getCombatScore());
            bufferedWriter.newLine();

        }

    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    finally {
        if (br != null) {
            try {
                br.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    bufferedWriter.close();

}
}

And here is the code for my Pokemon class:

public class Pokemon {
String id;
String name;
String type1;
String type2;
String total;
int hp;
int attack;
int defense;
int spAtk;
int spDef;
int speed;
int generation;
boolean legendary;


public Pokemon() {}

public String getId () {
        return id;
    }

public void setId(String id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getType1() {
    return type1;
}

public void setType1(String type1) {
    this.type1 = type1;
}

public String getType2() {
    return type2;
}

public void setType2(String type2) {
    this.type2 = type2;
}

public String getTotal() {
    return total;
}

public void setTotal(String total) {
    this.total = total;
}

public int getHp() {
    return hp;
}

public void setHp(int hp) {
    this.hp = hp;
}

public int getAttack() {
    return attack;
}

public void setAttack(int attack) {
    this.attack = attack;
}

public int getDefense() {
    return defense;
}

public void setDefense(int defense) {
    this.defense = defense;
}

public int getSpAtk() {
    return spAtk;
}

public void setSpAtk(int spAtk) {
    this.spAtk = spAtk;
}

public int getSpDef() {
    return spDef;
}

public void setSpDef(int spDef) {
    this.spDef = spDef;
}

public int getSpeed() {
    return speed;
}

public void setSpeed(int speed) {
    this.speed = speed;
}

public int getGeneration() {
    return generation;
}

public void setGeneration(int generation) {
    this.generation = generation;
}

public boolean isLegendary() {
    return legendary;
}

public void setLegendary(boolean legendary) {
    this.legendary = legendary;
}

public int getCombatScore() {
    return (speed/2) * (attack + (spAtk/2)) + (defense + (spDef/2));
}

@Override
public String toString() {
    return "Name: " + this.getName()
            + ", Type 1: " + this.getType1()
            + ", Type 2: " + this.getType2()
            + ", Total: " + this.getTotal()
            + ", HP: " + this.getHp()
            + ", Attack: " + this.getAttack()
            + ", Defense: " + this.getDefense()
            + ", Sp. Attack: " + this.getSpAtk()
            + ", Sp. Defense: " + this.getSpDef()
            + ", Generation: " + this.getGeneration()
            + ", Legnedary: " + this.isLegendary()
            + ", Score: " + this.getCombatScore();
}
}

I only want to compare their combatScore values to each other. Any help/suggestions would be much appreciated.




Aucun commentaire:

Enregistrer un commentaire