2

編集:みんな、あなたはとても素晴らしいです、すべての返信に感謝します. stringByAppendingString ルートが最も簡単だと思われるため、行くことにしましたが、それでも何らかの理由で機能しません! これがあまりにも初心者である場合は、もう一度お許しください。すべてのサポートに感謝します!

コードの一部は次のとおりです。

    #import "ViewController.h"
    @interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupGame];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
  int finalorder = 12;
- (IBAction)buttonPressed: (UIButton*) button {
    if (button.tag == 1)
    {
        int order = 1;
    }
     if (button.tag == 2)
    {
        [order stringByAppendingString:@"2"];
    }
    if ([order isEqualToString:finalorder])
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wrong!"
                            message:[NSString stringWithFormat:@"Try again!"]
                            delegate:self
                            cancelButtonTitle:@"Try"
                            otherButtonTitles:nil];
        [alert show];
                              };

    }

// 元の質問: 私は完全な初心者であり、これは初心者の質問であるため、非常に申し訳ありません。

私は最初の iPhone アプリを作成しています。それをスケール トレーナーにしたいと考えています。画面には 1 オクターブのピアノ (12 個のボタン、各キーに 1 つ) があり、ユーザーが特定のキーの順序を覚えているかどうかを知るために、ユーザーがボタンを押す順序をプログラムで追跡する必要があります。規模。たとえば、スケール C にいる場合、キーは C、D、E、F、G、A、B です。ユーザーが C を押してから D を押すと、さらに機能します。ただし、ユーザーが C を押してから C# を押すと、「間違っています。もう一度やり直してください」という警告が表示されます。

それに加えて、各キーの名前をラベルで表示したい: ユーザーが C キーを押すと、C などがあります。

では、プレスの順序を追跡するにはどうすればよいでしょうか。 これまでのところ、キーの名前を表示し、タイマーを使用する次のコードを作成しました。助けてくれてどうもありがとう!

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupGame];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
- (IBAction)buttonPressed: (UIButton*) button {

    if (button.tag == 1)
    {
        waitinglabel.text = @"C";
    }
    else
    {
    [timer invalidate];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Wrong!"
                message:[NSString stringWithFormat:@"Try again!"]
                delegate:self
                cancelButtonTitle:@"Try"
                otherButtonTitles:nil];
    [alert show];
    }
    if (button.tag == 2)
    {
        waitinglabel.text = @"C#";
    }

    if (button.tag == 3)
    {
        waitinglabel.text = @"D";
    }


    if (button.tag == 4)
    {
        waitinglabel.text = @"D#";
    }

    if (button.tag == 5)
    {
        waitinglabel.text = @"E";
    }

    if (button.tag == 6)
    {
        waitinglabel.text = @"F";
    }

    if (button.tag == 7)
    {
        waitinglabel.text = @"F#";
    }

    if (button.tag == 8)
    {
        waitinglabel.text = @"G";
    }

    if (button.tag == 9)
    {
        waitinglabel.text = @"G#";
    }

    if (button.tag == 10)
    {
        waitinglabel.text = @"A";
    }

    if (button.tag == 11)
    {
        waitinglabel.text = @"A#";
    }

    if (button.tag == 12)
    {
        waitinglabel.text = @"B";
    }
}

- (void)setupGame {
    seconds = 30;
    count = 0;

    timerlabel.text = [NSString stringWithFormat:@"Time: %i", seconds];

    timer = [NSTimer scheduledTimerWithTimeInterval:1.0f
                                             target:self
                                           selector:@selector(subtractTime)
                                           userInfo:nil
                                            repeats:YES];
}

- (void)subtractTime {
    seconds--;
    timerlabel.text = [NSString stringWithFormat:@"Time: %i",seconds];

    if (seconds == 0) {
        [timer invalidate];
    }
}

@end
4

5 に答える 5

2

NSMutableArray を使用し、ボタンが押されるたびに、ボタンのタグを配列に追加するだけです。

[yourArray addObject:[NSNumber numberWithInteger:button.tag]];

.h ファイルで次のように定義します。

@property(nonatomic,strong) NSMutableArray *buttonTapArray;

あなたsetUpGameはこれを行います:

self.buttonTapArray = [[NSMutableArray alloc] init];

そして、buttonPress関数に最初のスニペットを追加するだけです

[self.buttonTapArray addObject:[NSNumber numberWithInteger:button.tag]];

順序をリセットするには、別の方法で配列を再初期化するだけです

self.buttonTapArray = [[NSMutableArray alloc] init];
于 2013-04-29T15:25:31.580 に答える
1

NSStringボタンを押すイベントを作成することをお勧めします。

あなたが持っているようfinalOrderにABCDです

NSString *order;

1stButtonPress -> order=@"A";
2ndButtonPress -> [order stringByAppendingString:@"B"];
3rdButtonPress -> [order stringByAppendingString:@"C"];
4thButtonPress -> [order stringByAppendingString:@"D"];

これと一致しない

if ([order isEqualToString:finalOrder])
    {
        //Your Work
    }
    else{
        //invalid format
    }  

編集

あなたの質問によると、ie に置き換えintてくださいNSString

NSString *finalorder = @12";  
NSString *order = @"1";
于 2013-04-29T17:19:38.647 に答える
0

NSStringを使用して、押されたスケールのシーケンスを保存します。stringByAppendingString メソッドを使用してシーケンスに追加し、rangeOfString を使用して、押されたシーケンスがスケールの正しい順序のサブセットであるかどうかを確認します

于 2013-04-29T19:40:46.423 に答える