gpt4 book ai didi

java - 如何创建一个只能选择一个数字 1 次的数字生成器?

转载 作者:行者123 更新时间:2023-12-01 13:52:55 27 4
gpt4 key购买 nike

我正在创建一个集中游戏。

我有一个缓冲图像数组,我在其中加载 25 个图像 Sprite 表。

public static BufferedImage[] card = new BufferedImage[25];

0 索引为卡片背面。 1 - 24 是卡片正面的值,用于检查卡片是否匹配。

我要做的是,我将有 4 个难度:简单、普通、困难和极限。每个难度都需要抽取一定数量的卡牌,然后将其选择的卡牌数量加倍。例如,默认级别为 NORMAL,即 12 场比赛,因此需要从缓冲图像数组中随机选择 12 张唯一的卡,然后将每个值加倍,这样每张卡中只有 2 张,然后对结果进行洗牌。

这是我到目前为止得到的,但大约 99% 的时间它似乎总是有重复的。

//generate cards
Random r = new Random();

int j = 0;


int[] rowOne = new int[12];
int[] rowTwo = new int[12];
boolean[] rowOneBool = new boolean[12];

for(int i = 0; i < rowOneBool.length; i++)
rowOneBool[i] = false;


for(int i = 0; i < rowOne.length; i++){
int typeId = r.nextInt(12)+1;
while(rowOneBool[typeId]){
typeId = r.nextInt(12)+1;
if(rowOneBool[typeId] == false);
}

rowOne[i] = typeId;
j=0;
}

A sample run of my program

我需要生成的 3 个金额是 Easy 6、Normal 12 和 Hard 18Extreme,它们将使用除卡片背面索引 0 之外的所有图像。

最佳答案

这或多或少是随机数的本质。有时它们是重复的。如果您希望它们更加独特,您可以轻松地将其考虑在内。如果不是唯一的,只需丢弃该数字并重新生成即可。

这里有一个简单的方法来生成具有指定重复次数的唯一随机数:

public static void main(String[] args) {
int[] randoms = uniqueRandoms(new int[16], 1, 25, 3);
for (int r : randoms) System.out.println(r);
}

public static int[] uniqueRandoms(int[] randoms, int lo, int hi, int allowance) {
// should do some error checking up here

int range = hi - lo, duplicates = 0;
Random gen = new Random();

for (int i = 0, k; i < randoms.length; i++) {
randoms[i] = gen.nextInt(range) + lo;

for (k = 0; k < i; k++) {
if (randoms[i] == randoms[k]) {
if (duplicates < allowance) {
duplicates++;
} else {
i--;
}
break;
}
}
}

return randoms;
}

编辑:已测试并更正。现在可以了。 :)

关于java - 如何创建一个只能选择一个数字 1 次的数字生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19827533/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com