炉石传说天梯模拟器

仿照天梯算法的代码

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

猜你喜欢

转载自blog.csdn.net/icemaker88/article/details/79373933