编辑: 伙计们,你真是太棒了,感谢所有的回复。 我已经决定使用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应用程序,我希望它成为一个规模培训师 - 为学习音阶的人们。 屏幕上有一个八度的钢琴(12个按钮,每个按键一个),我希望程序跟踪用户按下按钮的顺序,以便了解他是否记住特定按键的顺序。规模。 例如,我们在比例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
答案 0 :(得分: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];
答案 1 :(得分:2)
您有一组预定义的音符。您需要先为每个音符创建一个唯一的表示法。创建所有笔记的数组。
每个笔记都有以下信息
[
{
"Tag":1,
"Name":"C",
"Info":{}
},
{
"Tag":2,
"Name":"C#",
"Info":{}
}
]
通过创建这样的数组,您可以在buttonPressed:方法中删除标记比较。您需要将注释的标签分配给相应的按钮。使用按钮的标签按下按钮时,您可以找到按下了哪个音符。
然后,您可以使用这些注释形成有效的订单。
比例C = [1,3,5,6,8,10,12];
您需要保留一个实例变量,该变量将跟踪用户输入的注释,每次按下按钮都会增加它。在使用此索引的每个事件时,检查存储在比例数组中的注释的标记。如果不匹配则发出警报。
答案 2 :(得分:1)
要检查一系列按下,您可以使用:
创建类变量:
NSMutableArray *_requiredSequence = [@[@"C", @"D", @"E", @"F", @"G", @"A", @"B" ] mutableCopy];
然后:
- (IBAction)buttonPressed: (UIButton*) button {
NSString *pressedNote = [self noteNameForButtonWithTag:button.tag];
NSString *requiredNote = _requiredSequence[0];
if ([pressedNote caseInsensitiveCompare:requiredNote] == NSOrderedSame]) {
waitinglabel.text = pressedNote;
[array removeObjectAtIndex:0];
if ([array count] == 0) {
//finish
}
} else {
//show alert
}
}
- (NSString *)noteNameForButtonWithTag:(NSUInteger)tag {
static NSArray *noteNames = @[@"C", @"C#", @"D", @"D#", ....];
NSUInteger index = tag - 1;
return scaleNames[index];
}
答案 3 :(得分: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
}
编辑
根据您的问题,将int
替换为NSString
,即
NSString *finalorder = @12";
NSString *order = @"1";
答案 4 :(得分:0)
我会使用NSString来存储按下的音阶序列。使用stringByAppendingString方法添加到序列,并使用rangeOfString检查按下的序列是否是正确的比例顺序的子集