为Dice for Risk游戏解析这个java算法

时间:2014-10-02 17:43:42

标签: java algorithm random dice

像在风险游戏中我必须滚动骰子,但我不想在每个滚动中使用Random.nextInt()方法。 由于某些原因,我已经有了攻击的结果,我想简单地生成骰子的值。

在风险游戏中,骰子被订购并单独比较:
例如:如果攻击滚动3个骰子和防御卷2个骰子,这些是结果:
[4,3,5] - [3,5]因为:[5,4,3] - [5,3] 5 = 5(在平局的情况下攻击失败)
4> 3(辩护失败)
3(在这种情况下第三个骰子是无用的)

这是输入代码:

int diceForAttack = StringUtils.nextInt(3) + 1;
int diceForDefense = StringUtils.nextInt(3) + 1;
//prints: attack Vs. defense
System.out.println(String.format("%d Vs. %d", diceForAttack, diceForDefense));

int maxLost = Math.min(diceForAttack, diceForDefense);
int attackLoses = StringUtils.nextInt(maxLost + 1);
int defenseLoses = maxLost - attackLoses;
//prints:
//Attack lost x
//Defense lost y
System.out.println(String.format("Attack lost %d\nDefense lost %d", attackLoses, defenseLoses));

//Now I want to generate two arrays
//such that the dice respect the values attackLoses and defenseLoses
int[] attack = new int[diceForAttack];
int[] defense= new int[diceForDefense];
...
...
...


问题是:
因为我已经知道有多少坦克将失去攻击和防御 我怎样才能生成两个数组,使骰子尊重值attackLoses和defenseLoses?

1 个答案:

答案 0 :(得分:1)

处理这类问题的一种干净,简单的方法是重新掷骰子,直到得到你想要的结果。缺点是,如果要求的结果不太可能(甚至不可能),那么需要一段时间,但这似乎不会成为问题。