我有一张NSMutableArray
有20张牌,在这个例子中是红色的。
Card
对象有一个名为playable
的属性。如果该卡可播放,则其值为IsPlayable
,如果不可用,则为IsNotPlayable
。 Card
对象也有一个属性value
,从1到20。
值为11的卡片始终为IsPlayable
,如果下一张卡片与当前卡片之间的差异为1(cardUp/ cardDown
),我会更改Card
playable
属性到IsPlayable
。
当我开始游戏时,假设我的数组中有5个Card
个对象(称为_redPlayerCards
); 11,2,3,13和9.当我从堆栈中绘制一张卡片时,它会被添加到_redPlayerCards
,这里是我创建的循环得到不同结果的地方。
当我绘制值为{10}的Card
时,卡片10和9的playable
属性会更改为IsPlayable
,因此11,10和9 IsPlayable
。但是,如果我在之后绘制值为Card
的值为Card
,则IsPlayable
12和13不会更改为IsNotPlayable
,而是保留IsPlayable
。只有在我播放值11后,值12才会变为playable
。
我真的不知道出了什么问题。看起来每个11以下的值都工作正常,并将IsPlayable
属性更改为playable
,而高于11的每个值都不会将IsPlayable
属性更改为redTableCards
。它只会在我玩牌时更改它(将牌放在桌子上NSMutableArray
,这也是Card
)。代码有什么问题?
value
IsPlayable
11在方法外更改为//Playable red cards
NSMutableArray *playableRedCards = [NSMutableArray array];
Card *redPlayerCard = [[Card alloc]init];
BOOL changedRed = YES;
for(int x = 0; x < [_redPlayerCards count]; x++) {
redPlayerCard = [_redPlayerCards objectAtIndex:x];
while (changedRed) {
changedRed = NO;
for (redPlayerCard in _redPlayerCards) {
NSNumber *cardValue = redPlayerCard.value;
if (redPlayerCard.playable == IsPlayable) {
[playableRedCards addObject:redPlayerCard.value];
//NSLog(@"red is playable");
} else {
NSNumber *cardUp = @(cardValue.integerValue + 1);
NSNumber *cardDown = @(cardValue.integerValue - 1);
if ([playableRedCards containsObject:cardUp] || [playableRedCards containsObject:cardDown] || [[[Game game] redTableCards] containsObject:cardUp] || [[[Game game] redTableCards] containsObject:cardDown]) {
changedRed = YES;
redPlayerCard.playable = IsPlayable;
[playableRedCards addObject:redPlayerCard.value];
//NSLog(@"playable reds: %@", playableRedCards);
}
}
}
}
}
。其余部分由此代码更改:
{{1}}