我有一个带有不同值的卡片对象的NSArray,比方说1,2,3,5,8,10。我想确定一张卡片是否可以玩,我用卡对象的可玩属性来做这件事,这显然也有一个值属性。规则是,当一张卡是可玩的(在本例中,只有卡1是可玩的),值只有1的牌也是可玩的。所以在上面的例子中,第二张牌也是可玩的,其余的也是不可玩的。为了清楚起见,排序可能有所不同,并不总是在上升或下降。
我想要的是遍历playerCards数组,并将1卡与数组中的所有其他卡进行比较,当差值为1时,将该卡的可玩属性设置为IsPlayable,然后再次循环,直到确定所有可玩卡。
First loop attempt (card 1 is playable):
2-1 = 1 card value 2 is playable
3-1 = 2 card value 3 is not playable
5-1 = 4 card value 5 is not playable
8-1 = 7 card value 8 is not playable
10-1 = 9 card value 10 is not playable
Second loop attempt (card 2 is now also playable):
3-2 = 1 card value 3 is playable
5-2 = 3 card value 5 is not playable
8-2 = 6 card value 8 is not playable
10-2 = 8 card value 10 is not playable
Third loop attempt (card 3 is now also playable):
5-3 = 2 card value 5 is not playable
8-3 = 5 card value 8 is not playable
10-3 = 7 card value 10 is not playable
Stop loop.我不知道该怎么做。这就是我目前所得到的,但我迷失了方向;
for(int x = 0; x < [playerCards count]; x++)
{
Card *playerCard = [playerCards objectAtIndex:x];
if(playerCard.playable == IsPlayable){
something like playerCard.value-otherplayerCard.value ???}你们能帮忙吗?
谢谢!
发布于 2014-03-06 20:13:46
您可以将for循环放入一个while循环中,在该循环中,while循环检查是否进行了更改,而for循环是否进行了更改(或者,如果一切都完成了)。
我假设Card类有一个名为card的NSNumber
BOOL changed = YES;
NSMutableArray *playableCards = [NSMutableArray array];
while (changed) {
changed = NO;
for (Card *playerCard in playerCards) {
NSNumber *card = playerCard.card;
if (playerCard.playable == IsPlayable) {
if (![playableCards containsObject:card]) {
NSLog(@"Card %@ is already playable", playerCard.card);
[playableCards addObject:card];
changed = YES;
}
} else {
NSNumber *cardUp = @(card.integerValue + 1);
NSNumber *cardDown = @(card.integerValue - 1);
if ([playableCards containsObject:cardUp] || [playableCards containsObject:cardDown]) {
NSLog(@"Card %@ is being made playable", playerCard.card);
changed = YES;
playerCard.playable = IsPlayable;
[playableCards addObject:card];
}
}
}
}发布于 2014-03-07 19:11:39
这里有一个通用的编程模式,在其他地方会很有用。模式是从一些有限的信息开始,并可能添加更多的信息,从而导致更多的信息;在这种情况下,“可玩”卡最初是那些标记为可玩的卡,然后那些附近的可玩卡变得可玩,以此类推。模式是
"start with initial data"
BOOL changed = YES;
while (changed)
{
changed = NO;
"try to find any new information"
if ("any new information was found")
changed = YES;
}https://stackoverflow.com/questions/22234728
复制相似问题