#import "gameViewController.h"
@interface gameViewController (){
NSArray *NumberArray ;
/**
* 用户上次点击的数字
*/
NSInteger _lastTapNumber;
/**
* 游戏开始时间
*
*/
NSData *gameStartTime;
/**
* 游戏时钟
*/
NSTimer *gameTimer;
}
- (IBAction)backBtnClicked;
/**
* 按钮集合
*/
@property (strong, nonatomic) IBOutletCollection(UIButton) NSArray *numberButtons;
/**
* 按钮点击事件
*/
- (IBAction)tapNumber:(UIButton *)sender;
@end
@implementation gameViewController
- (void)viewDidLoad {
[super viewDidLoad];
/**
* collection中保存的是无序的(但是我测试了其实是顺序的)
*/
// NSInteger indexNum = 0;
// NSArray *numberArray = [self createNumberArray];
// for (UIButton *btn in _numberButtons) {
// /**
// * 经过包装后的整数,是一个NSNumber类型
// 数字转字符串 stringvalue
// 字符串转数字 integervalue
// */
//
// NSString *text = [numberArray[indexNum]stringValue];
// [btn setTitle:text forState:UIControlStateNormal];
// indexNum++;
// }
/**
* 这样写 省去了indexNum
*/
NSArray *numberArray = [self createNumberArray];
NumberArray = numberArray;
for(UIButton *btn in _numberButtons) {
NSString * titleText = [numberArray[btn.tag]stringValue];
[btn setTitle:titleText forState:UIControlStateNormal];
btn.layer.cornerRadius = 10;
}
_lastTapNumber = 0;
/**
* 游戏时钟开始
第一个参数 多长时间会触发一次
*/
gameTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateTimer:) userInfo:nil repeats:YES];
/**
* 以系统当前时间作为游戏开始时间
*/
gameStartTime = [NSData data];
}
#pragma mark -私有方法
/**
* 时钟触发的方法
*/
- (void)updateTimer:(NSTimer *)sender{
/**
* fireData是时钟当前触发的时间
*
*/
NSLog(@"当前触发的时间不对");
}
/**
* 生成一个连续数字的数组用于设置界面上按钮中的数字
*/
- (NSArray *)createNumberArray{
NSMutableArray *numberArray = [NSMutableArray array];
/**
* 生成一个随机数[1,100]的随机数
*/
// NSInteger num = arc4random() % 100 +1;
for (NSInteger i =1; i<10; i++) {
/**
* 数组中添加数字不能直接addobject一个数字 需要包装一下
*
*/
[numberArray addObject:@(i)];
}
/**
* 打乱数组的顺序
1,2,3,4,5,6,7,8,9
先随机出来一个位置的数字0~8
假设是3 用0位置的与3位置的交换
随机一个位置数字1~8
假设是5 用1位置的和5交换
...就可以实现随机顺序
*/
for (int i = 0; i<9; i++) {
/**
* 随机出来的位置数字称为种子数
*/
NSInteger seed = i+ arc4random() % (9-i) ;//[0,9)
/**
* 交换位置i和seed中的数字
*/
[numberArray exchangeObjectAtIndex:i withObjectAtIndex:seed];
}
return numberArray;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/**
* 关闭当前视图控制器
因为当前视图控制器是被上级视图控制器推出来的
因此 关闭了当期的视图控制器 原来的就显示出来了
关闭了当前视图控制器会被释放掉
Model和Push的区别
Model连线方式显示的视图控制器 新的控制器会叠加在之前的控制器上,用户无法与上一级控制器进行交互,Model方式多用户游戏开发,Push方式多用于应用开发,Push方式需要使用UINavigationController
*/
- (IBAction)backBtnClicked {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)tapNumber:(UIButton *)sender {
/**
* 通过button的tag拿到title
*/
// NSInteger buttonTag = sender.tag;
// NSString * buttonTitle = [NumberArray[buttonTag]stringValue];
// NSLog(@"你点击了数字:%@",buttonTitle);
/**
* 通过转换button的title
*/
// NSString *buttonTitle = sender.titleLabel.text;
// NSInteger buttonNumber = buttonTitle.integerValue;
// NSLog(@"你点击了数字:%d",buttonNumber);
NSInteger buttonNumber = sender.titleLabel.text.integerValue;
/**
* 游戏规则
1.需要顺序点击数字,由小到大
2.判断用户点对还是点错
2.1如果用户当前点击的数字比上次大1 说明点对了 当前点击数字赋值给上次点击数字
2.2如果用户当前点击数字不是比上次大1 说明点错了 提示用户 音效
*/
if (_lastTapNumber + 1 == buttonNumber) {
_lastTapNumber = buttonNumber;
// /**
// * 点击正确 这个按钮标题为灰
// */
[sender setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
[sender setEnabled:NO];
/**
* 高亮 是按住按钮不放的时候显示的颜色
*/
// [sender setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted];
}else{
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"点错了哦" message:@"数字按照从小到大的顺序点击" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleCancel handler:nil];
[alert addAction:okAction];
[self presentViewController:alert animated:YES completion:nil];
}
if (_lastTapNumber == 9) {
/**
* 用户全部点完 提示用户成功
*/
UIAlertController *successAlert = [UIAlertController alertControllerWithTitle:@"挑战成功!" message:@"你是最棒的" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"继续" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
[self dismissViewControllerAnimated:YES completion:nil];
}];
[successAlert addAction:okAction];
[self presentViewController:successAlert animated:YES completion:nil];
}
}
@end