仿照天梯算法的代码
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; } }