0

4つのUIボタンと1つのUILabelがあります.4つのボタンにランダムに表示される4つの単語(plistファイルから)(1つのボタンには1つの単語があります)とラベルに表示される1つの単語(ボタンの単語と同じ名前)を実行したい。どうやってやるの?

4

2 に答える 2

3

words.plistあなたのplistが呼び出され、あなたが4の配列を持っていると仮定しますUIButtons

NSString * path = [[NSBundle mainBundle] pathForResource:@"words" ofType:@"plist"];
NSMutableArray * words = [NSMutableArray arrayWithContentsOfFile:path];

wordsこれで、配列内のすべての可能な単語ができました。この時点で、4つの一意のランダムインデックスが必要です。これは、基本的に、配列をランダムにシャッフルした後、配列の最初の4つの要素を取得することを意味します。この回答で提案されているように、 Fisher-Yatesシャッフルアルゴリズムを使用します。

for (int i = words.count - 1; i > 0; --i) {
    int r = arc4random_uniform(i);
    [words exchangeObjectAtIndex:i withObjectAtIndex:r];
}

ランダムにシャッフルされた単語の配列ができたので、最初の4つの要素を取得して、それらをボタンに割り当てます。次のようになります。

for (int j = 0; j < buttons.count; j++) {
    UIButton * button = [buttons objectAtIndex:j];
    button.titleLabel.text = [words objectAtIndex:j];
}

最後に、ボタンに使用したインデックスからランダムにインデックスを選択して、ラベルに単語を割り当てます。

yourLabel.text = [words objectAtIndex:arc4random_uniform(buttons.count)];

このソリューションは任意の数のボタンで機能し、シャッフルアルゴリズム(すでに生成されたインデックスをチェックするよりも間違いなく優れています)により効率的であることが保証され、ランダム生成はarc4random_uniform

于 2012-12-02T23:29:13.783 に答える
2

PLISTファイルの内容を配列に移動します。

NSArray *words = [[NSArray alloc] initWithContentsOfFile:filePath];

ランダムに番号を見つけます。

int randInt = arc4random() % 10;

10PLISTの単語の総数に変更します。

これで、配列からランダムな単語を選択できます。

NSString *random = [words objectAtIndex:randInt];

ランダムな単語が1つあります。別の乱数を見つけて(前の乱数と同じでないことを確認してください)、words配列から次の単語を選択します。

于 2012-12-02T21:04:05.703 に答える