在objective-c中随机化数组中的4个对象,但我需要根据一组数量随机化计数和对象

时间:2013-06-21 02:10:09

标签: objective-c nsarray

好的,我会试着让它不像标题那样令人困惑。

我有4个UIImageViews,view1,view1,view3和view4。在我正在制作的游戏中,我需要将它们随机化并根据玩家所处的某个难度和等级随机化计数。

所以我有一个数组,比如说,[currentSequence]它包含了4个uiimageviews。好吧,我需要能够完全随机化它。说,这可能是它的内容。 vie1,view1,vie3,view3,view3,view4,view4,view1,view1,view2等等。

这是一款记忆匹配游戏。所以订单很重要。我需要将这些对象随机化一次并保持,直到我在玩家进入新一轮并制作新套装时擦除它们。

我还计划在一轮中使用有限数量的序列,例如6.因此,如果我们在序列1处,将出现的视图可以是view1,view2,view2,view4。然后序列两个以相同的顺序开始,但它会添加更多的对象。

想想老游戏,西蒙。

现在我只需要一个解决方案来随机化计数和对象,对于一组有限的对象(4)。

感谢。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

NSUInteger capacity = 20;
NSArray *objects = @[@(1), @(2), @(3), @(4)];
NSMutableArray *randomized = [NSMutableArray arrayWithCapacity:capacity];

for (int i = 0; i < capacity; i++) {
    NSUInteger rnd = floor(arc4random() % 4);
    randomized[i] = objects[rnd];
}

但这不会随机化放置在randomized数组中的对象数量。

要将其随机化,请尝试以下方法:

NSArray *objects = @[@(1), @(2), @(3), @(4)];
NSMutableArray *randomized = [@[] mutableCopy];
NSUInteger terminationUnlikeliness = 10; /* increase to make termination less likely */

for (int i = 0; floor(arc4random() % terminationUnlikeliness) != 0; i++) {
    NSUInteger rnd = floor(arc4random() % 4);
    randomized[i] = objects[rnd];
}