随机播放NSString字符并按块排列

时间:2013-05-31 10:33:45

标签: iphone nsstring shuffle

我正在尝试开发一个益智游戏,我们在块中显示一个混乱的单词,用户必须按照正确的顺序点击才能形成单词。我有一个大约3k字的数组,我已经洗牌了阵列并形成了混乱array.Now我想最后选择一个单词字符串,将其洗牌并在框中显示混洗排列,例如单词是板球,它应该在屏幕上显示以下格式:

enter image description here

这是我如何改组数组并形成一个混乱的

srandom(time(NULL));
for (NSInteger x=0;x<[greWordsArray count];x++)
{
   NSInteger randomNumber = (random() % ([greWordsArray count] - x)) + x;
   [greWordsArray exchangeObjectAtIndex:x withObjectAtIndex:randomNumber];
}

我也忘了说我有一个“新”按钮,如果用户点击它,新单词应该出现,像往常一样它应该处于随机播放模式,然后以块显示。

有人可以指导我如何实现这一点,我想知道用什么来显示块中的字符,无论是按钮,文本字段还是其他一些对象。我还需要一些帮助来改变块的数量取决于单词长度。还有如何在标签上显示所选字符。我确认我们可以在上面标记并排列字符,但是建议的方法是,我应该为每个字符或单个标签采用标签,然后允许间距取决于关于字符选择。如果是这样我应该怎么做。

人们会想知道我尝试了什么,但请帮助我,因为我是这类益智游戏的新手,至少为我提供了一些可以理解的来源。

2 个答案:

答案 0 :(得分:2)

假设你有由3k字组成的wordsArray

int randomWordIndex = arc4random%[wordsArray count];

NSString *jumbledWord = [wordsArray objectAtIndex:randomWordIndex];
NSMutableArray *characterArray = [[NSMutableArray alloc]init];
// character array having all characters of array

for (int i = 0; i< = [jumbledWord length]); i++)

{

   int randomCharacterIndex = arc4random%[jumbledWord length];
   [characterArray insertObject:
                        [NSString stringWithFormat: @"%@",
                          [jumbledWord  characterAtIndex:i]] 
                  atIndex:randomCharacterIndex] ;

}

现在您可以使用标签或tableview或其他任何内容显示它

答案 1 :(得分:0)

我找到了更加精确和合理的答案来解决我的问题,

正如alpha所提到的,我们需要对数组进行洗牌并形成一个排序的数组,我们需要根据索引为jumbledWord分配一个随机单词,比如说:

int randomWordIndex = (int)arc4random%[greWordsArray count];
self.jumbledWord = [greWordsArray objectAtIndex:randomWordIndex];

现在我们已准备好根据字长创建按钮。这就是:

-(void)buttonsCreation:(int)noOfButtons
{
    NSMutableArray *charactersArray = [NSMutableArray array];
    self.wordButtons = [[NSMutableArray alloc]initWithCapacity:20];

    BOOL record = NO;
    int randomNumber;

    for (int i=0; [charactersArray count] < jumbledWord.length; i++) //Loop for generate different random values
    {
        randomNumber = arc4random() % jumbledWord.length;//generating random number
        if(i==0)
        {
            [charactersArray addObject:[NSNumber numberWithInt:randomNumber]];
        }
        else
        {
            for (int j=0; j<= [charactersArray count]-1; j++)
            {
                if (randomNumber ==[[charactersArray objectAtIndex:j] intValue])
                    record = YES;
            }
            if (record == YES)
                record = NO;
            else
                [charactersArray addObject:[NSNumber numberWithInt:randomNumber]];
        }
    }

    int arrayValue;
    float x = 100.0;
    float y = 100.0;
    for(int i=0;i<[jumbledWord length];i++)
    {
        if(i>=0 && i<10)
        {
            arrayValue = [[charactersArray objectAtIndex:i] intValue];
            x = x + 33;
            UIButton *characterButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            characterButton.frame = CGRectMake(x,175.0, 35.0, 35.0);
            [wordButtons addObject:characterButton];
            NSString *characterValue = [NSString stringWithFormat:@"%c",[jumbledWord characterAtIndex:arrayValue]];
            [characterButton setTitle:characterValue forState:UIControlStateNormal];
            [characterButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
            [characterButton setTag:arrayValue];
            [self.view addSubview:characterButton];
        }
        else if(i>=10 && i<15)
        {
            y = y + 33;
            UIButton *characterButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
            characterButton.frame = CGRectMake(y,200.0, 35.0, 35.0);
            [wordButtons addObject:characterButton];
            NSString *characterValue = [NSString stringWithFormat:@"%c",[jumbledWord characterAtIndex:i]];
            [characterButton setTitle:characterValue forState:UIControlStateNormal];
            [characterButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside];
            [characterButton setTag:i];
            [self.view addSubview:characterButton];
        }
    }
}

请注意,x和y值可能会根据一个人的要求而有所不同。我根据单词长度简要设置了x和y的坐标位置,如果需要,可以更改,谢谢:)

希望它有所帮助,快乐的编码!!