仿照天梯算法的代码
package com.sencorsta.ids;
import java.util.Random;
public class HearthStoneTest {
public static void main(String[] args) throws InterruptedException {
int turn = 10000;
for (int j = 0; j < 100; j++) {
long allRound = 0;
double rate = 0.01 * j + 0.01;
int getTimes = 0;
for (int i = 0; i < turn; i++) {
long res = start(0, rate, 1440);
if (res != -1) {
allRound += res;
getTimes++;
}
}
String out = String.format("%1.2f\t%4.0f\t%4.4f", rate, (double) allRound / getTimes,
(double) getTimes / turn);
System.out.println(out);
}
}
public static long start(int finalLevel, double rate, long maxround) {
int star = 0;
int level = 25;
int wincount = 0;
Random battel = new Random();
long round = 0;
while (level > finalLevel) {
round++;
int needUp = 3;
if (level > 20) {
needUp = 2;
} else if (level > 15) {
needUp = 3;
} else if (level > 10) {
needUp = 4;
} else {
needUp = 5;
}
double res = battel.nextDouble();
boolean isWin = false;
boolean isLevelUp = false;
boolean isLevelDown = false;
boolean is3Win = false;
if (res < rate) {
// 赢得情况
wincount++;
isWin = true;
if (level > 5 && wincount >= 3) {
star += 2;
is3Win = true;
} else {
star++;
}
if (star > needUp) {
level--;
star -= needUp;
isLevelUp = true;
}
} else {
// 输得情况
wincount = 0;
if (star > 0) {
star--;
} else {
if (level + 1 == 6 || level + 1 >= 21) {
star = 0;
} else {
level++;
isLevelDown = true;
if (level > 20) {
needUp = 2;
} else if (level > 15) {
needUp = 3;
} else if (level > 10) {
needUp = 4;
} else {
needUp = 5;
}
star = needUp - 1;
}
}
}
// String win=isWin?" 赢 ":" 输 ";
// String levelup=isLevelUp?" 升级!":"";
// String levelDown=isLevelDown?" 掉级!":"";
// String win3=is3Win?" 连胜!":"";
// System.out.println("LV:" + level +" "+ star + "/" +
// needUp+win+levelup+win3+levelDown);
// Thread.sleep(1);
if (round > maxround) {
return -1;
}
}
return round;
}
}