package me.DDoS.MCCasino.slotmachine;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Random;
import org.bukkit.inventory.ItemStack;
/**
*
* @author DDos
*/
public class Reel {
private static final Random random = new SecureRandom();
//
private final List<ReelValue> values;
public Reel(List<ReelValue> values) {
this.values = values;
}
public ItemStack getRandomItem() {
int totalWeights = 0;
for (ReelValue value : values) {
totalWeights += value.getProb();
}
int i = 0;
final int rand = random.nextInt(totalWeights);
for (ReelValue value : values) {
i += value.getProb();
if (rand < i) {
return value.getItem();
}
}
return null;
}
public static void main(String[] args) {
try {
System.out.println("Testing probabilities.");
if (args.length < 1) {
System.out.println("You need to provide IDs and their associated weights");
return;
}
final List<ReelValue> values = new ArrayList<ReelValue>();
for (String value : args[0].split("-")) {
String[] pair = value.split(":");
if (pair.length < 2) {
System.out.println("Invalid ID and weight pair: missing ID or weight.");
return;
}
try {
values.add(new ReelValue(new ItemStack(Integer.parseInt(pair[0]), 1), Integer.parseInt(pair[1])));
} catch (NumberFormatException nfe) {
System.out.println("Invalid ID and weight pair: ID or weight is not a number.");
System.out.println("Cause: " + value);
return;
}
}
final Reel reel = new Reel(values);
int repeats;
try {
repeats = args.length > 1 ? Integer.parseInt(args[1]) : 10000;
} catch (NumberFormatException nfe) {
System.out.println("Provided number of repetitions is invalid: not a number.");
return;
}
System.out.println("Running test...");
final Map<Integer, Integer> results = new HashMap<Integer, Integer>();
for (int i = 0; i < repeats; i++) {
int result = reel.getRandomItem().getTypeId();
if (results.containsKey(result)) {
results.put(result, results.get(result) + 1);
} else {
results.put(result, 1);
}
}
System.out.println("Results for " + repeats + " attempts:");
for (Entry<Integer, Integer> entry : results.entrySet()) {
System.out.println("ID: " + entry.getKey() + ", hits: " + entry.getValue());
}
System.out.println("Done.");
} catch (NoClassDefFoundError cnfe) {
System.out.println("Error: please add the Bukkit.jar library to a lib folder, in the same directory as this jar.");
}
}
}