Я думаю, что также разумно создать более разумный способ присвоения изображений разного цвета вашим представлениям изображений, поэтому это решение делает и то и другое.
Они должны быть объявлены в заголовке класса
NSArray *allCircleImagesViews; // These are suppose to be the onscreen UIImagesViews
NSArray *circlesByColor;
NSMutableArray *correctCircles; // The current circles the user is allowed to click
NSArray *colorOrder; // The order of the colors to click
int currentColorIndex; // The current index in the order of colors
Теперь о функциях:
Первый создает назначение разных цветных изображений, устанавливает правильный порядок цветов и устанавливает механизм, чтобы определить, был ли выбран правильный цвет
- (void) populateImages
{
NSArray *images = [NSArray arrayWithObjects:
[UIImage imageNamed:@"bluebubble.png"],
[UIImage imageNamed:@"redbubble.png"],
[UIImage imageNamed:@"yellowbubble.png"],
[UIImage imageNamed:@"greenbubble.png"],
[UIImage imageNamed:@"orangebubble.png"],
[UIImage imageNamed:@"pinkbubble.png"],
[UIImage imageNamed:@"purplebubble.png"],
nil];
NSArray *circlesByColor=[NSArray arrayWithObjects:
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
[NSMutableArray array],
nil];
[circlesByColor retain];
// Assign images to circles and set the
for (UIImageView *currCircle in allCircleImagesViews)
{
int nextIndex = arc4random()%7;
currCircle.image = [images objectAtIndex:0];
[(NSMutableArray *)[circlesByColor objectAtIndex:nextIndex] addObject:currCircle];
}
// Set the correct order
NSArray *colorOrder = [NSArray arrayWithObjects:
[NSNumber numberWithInt:5], // Pink
[NSNumber numberWithInt:0], // Blue
[NSNumber numberWithInt:1], // etc.
[NSNumber numberWithInt:4],
[NSNumber numberWithInt:2],
[NSNumber numberWithInt:3],
[NSNumber numberWithInt:6],nil];
[colorOrder retain];
currentColorIndex = 0;
correctCircles = [circlesByColor objectAtIndex:[[colorOrder objectAtIndex:currentColorIndex] intValue]];
}
Следующая функция проверяет, был ли выбран правильный круг
- (void) checkCircle:(UIImageView *)clickedImageView
{
BOOL result;
if ([correctCircles containsObject:clickedImageView])
{
[correctCircles removeObject:clickedImageView];
result = YES;
}
else {
result = NO;
}
if ([correctCircles count] == 0)
{
currentColorIndex++;
if (currentColorIndex < 7)
correctCircles = [circlesByColor objectAtIndex:[[colorOrder objectAtIndex:currentColorIndex] intValue]];
else
correctCircles = nil;
}
if (!result)
{
// Wrong circle clicked logic
}
else {
if (!correctCircles)
{
// Game won logic
}
else {
// Correct circle clicked logic
}
}
}