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); } }