0

クイズを作成しましたが、答えをシャッフルして、より挑戦的なものにしたいと考えています。これは、どのボタンが答えであるかを確認できるメソッドが必要な場合を意味します。答えがボタン 1 の場合、ボタン 1 には正しい答えが含まれます。答えがボタン 4 の場合、ボタン 4 には正解などが含まれます。

現在、コードは新しいゲームをプレイするたびに答えをシャッフルしますが、4 つのボタンすべてのタイトルを同じタイトルに設定し、正解は常にボタン 1 になります。

何か案は?

フィリップ

これは私が持っているものです。

- (IBAction)PlayHistory_Easy:(id)sender {

    // The questions        
    history_Easy = [[NSMutableArray alloc] initWithObjects:kHisQ_E1, kHisQ_E2, kHisQ_E3, kHisQ_E4,nil];

    numberOfQuestions = [history_Easy count];
    index = arc4random() % numberOfQuestions--;
    NSString *dd = [history_Easy objectAtIndex:index];
    questionLabel.text = dd;

    // Setup code to shuffle answers
    NSMutableArray *randomizeAnswer = [[NSMutableArray alloc] initWithObjects:btnOne, btnTwo, btnThree, btnFour, nil];
    NSMutableArray *ranAns = [[NSMutableArray alloc] initWithObjects:@"Answer 1", @"Answer 2", @"Answer 3", @"Answer 4", nil];

    if ([questionLabel.text isEqualToString:kHisQ_E1]) { // Answer 1st button

        for (UIButton *btn in randomizeAnswer) {

            int i = arc4random() % ranAns.count;
            NSString *str = [ranAns objectAtIndex:i];
            [btnOne setTitle:[ranAns objectAtIndex:i] forState:UIControlStateNormal];
            [btnTwo setTitle:[ranAns objectAtIndex:i] forState:UIControlStateNormal];
            [btnThree setTitle:[ranAns objectAtIndex:i] forState:UIControlStateNormal];
            [btnFour setTitle:[ranAns objectAtIndex:i] forState:UIControlStateNormal];

       } 
}

答えを確認してください。ここでは、回答のチェックは手動で行われますが、回答をシャッフルするために、コードは明らかに異なります。

- (IBAction)button1:(id)sender {

    if ([questionLabel.text isEqualToString:kHisQ_E1]) {
        [self playRIGHTAnswer_EASY];
    }
}

- (IBAction)button2:(id)sender {

    if ([questionLabel.text isEqualToString:kHisQ_E1]) {
        [self playWRONGAnswer_EASY];
    }
}

- (IBAction)button3:(id)sender {

    if ([questionLabel.text isEqualToString:kHisQ_E1]) {
        [self playWRONGAnswer_EASY];
    }
}

- (IBAction)button4:(id)sender {

    if ([questionLabel.text isEqualToString:kHisQ_E1]) {
        [self playWRONGAnswer_EASY];
    }
}
4

2 に答える 2

1

これに興味のあるすべての人に、私自身の質問に答えます。

これを理解しようとして、各質問でボタンをランダムに再配置する方が簡単だと思いました. だから私はそれをグーグルで検索し、このリンクを見つけました:

UIButton と値をランダムに配置する方法

IB で (アウトレットとアクションが適切に接続された状態で) ボタンを既に作成しているため、コードの一部のみを使用したため、以下のコードのみが必要でした。このコードを呼び出すたびに、変更可能な配列に入れた整数値に従ってボタンを置き換えます。

- (void)randomlyPositionAnswerButtons {

    //Create an array with the rectangles used for the frames
    NSMutableArray *indexArray = [NSMutableArray arrayWithObjects:
                                  [NSValue valueWithCGRect:CGRectMake(28, 230, 260, 42)],
                                  [NSValue valueWithCGRect:CGRectMake(28, 296, 260, 42)],
                                  [NSValue valueWithCGRect:CGRectMake(28, 359, 260, 42)],
                                  [NSValue valueWithCGRect:CGRectMake(28, 422, 260, 42)], nil];

    //Randomize the array
    NSUInteger count = [indexArray count];
    for (NSUInteger i = 0; i < count; ++i) {
        int nElements = count - i;
        int n = (arc4random() % nElements) + i;
        [indexArray exchangeObjectAtIndex:i withObjectAtIndex:n];
    }

    //Assign the frames
    btnOne.frame = [((NSValue *)[indexArray objectAtIndex:0]) CGRectValue];
    btnTwo.frame = [((NSValue *)[indexArray objectAtIndex:1]) CGRectValue];
    btnThree.frame = [((NSValue *)[indexArray objectAtIndex:2]) CGRectValue];
    btnFour.frame = [((NSValue *)[indexArray objectAtIndex:3]) CGRectValue];

}
于 2013-09-09T11:43:42.920 に答える