package tangedyn;
import ec.util.MersenneTwisterFast;
public class VengeanceSim {
boolean DEBUG = false;
public void run(double pAvoid, double bossInterval, int samples) {
MersenneTwisterFast mRandom = new MersenneTwisterFast();
int mSamples = 0;
double mTotalVengeance = 0.0;
double mVengeance = 1.0;
double mTotalVengeanceSq = 0.0;
boolean wasAttacked = false;
boolean wasHit = false;
double nextAttack = 0.0;
double nextVengeanceCheck = 0.05;
while (mSamples < samples) {
if (nextAttack < nextVengeanceCheck) {
wasAttacked = true;
if (!mRandom.nextBoolean(pAvoid)) wasHit = true;
if (DEBUG) System.out.println(nextAttack + " Attack " + (wasHit ? "HIT" : "MISS"));
nextAttack += bossInterval;
}
else {
if (!wasAttacked) mVengeance = Math.max(0.0, mVengeance - .1);
else if (wasHit) mVengeance = 1.0;
else mVengeance *= .95;
if (DEBUG) System.out.println(nextVengeanceCheck + " Vengeance = " + mVengeance);
nextVengeanceCheck += 2.0;
mTotalVengeance += mVengeance;
mTotalVengeanceSq += mVengeance * mVengeance;
mSamples ++;
wasHit = wasAttacked = false;
}
}
double vengeanceMean = mTotalVengeance / mSamples;
double stddev = Math.sqrt(mTotalVengeanceSq / mSamples - (vengeanceMean * vengeanceMean));
System.out.println("average vengeance = " + vengeanceMean + " +/- " + stddev);
}
public static void main(String args[]) {
VengeanceSim sim = new VengeanceSim();
sim.run(0.44465738881804, 5, 1000000);
}
}