我正在制作一个基本的猜色游戏(我的第一个),你会得到一个十六进制代码,你会得到一些颜色可供选择。但是,我遇到了一些问题。我设置它的方式是我创建一些椭圆,我分配随机颜色(一个与正确的颜色),这是很好的工作。
问题在于,为了在每次我试图为这些椭圆形随机生成位置时不要将答案放在同一位置,但我的代码不起作用。代码(我认为会保留斑点并指定斑点)不能正确保留斑点。我认为如果没有采用(takenPos[tempRandomNum] == false)
的位置,它只会进入else语句,但它似乎总是进入else语句,即使我的打印确认它多次生成相同的位置。
另一个问题是,如果它进入If语句(它现在不是),则生成一个新值,并且该值仍然使用该值。
打印:
ELSE false 0
ELSE false 540
ELSE false 0
ELSE false 360
ELSE false 360
ELSE false 450
ELSE false 180
ELSE false 360
ELSE false 540
代码:
public int randomOvalPos() {
//An array of booleans to keep track of if the position is taken.
boolean[] takenPos = new boolean[difficulty];
//Temporary variable to return if it gets through the if statement.
int tempRandomNum = randomNum(0 , difficulty - 1);
//Check if the position is taken (set before return).
if(takenPos[tempRandomNum]){
//If the position is taken I want it to get a new random position.
//The problem is that if this spot is taken as
//well I can't just keep redoing it.
tempRandomNum = randomNum(0, difficulty - 1);
takenPos[tempRandomNum] = true;
return tempRandomNum * 90;
}else{
//If it isn't taken set the boolean to true and return the value.
takenPos[tempRandomNum] = true;
return tempRandomNum * 90;
}
}
答案 0 :(得分:0)
我会做什么(在向用户显示椭圆之前)使用当前有效的代码并且每次都将答案放在同一个位置,然后使用Fischer-Yates shuffle
将数组洗牌阅读此问题,了解如何执行此操作:Random shuffling of an array