当前位置: 首页 > 工具软件 > 舒尔特表 > 使用案例 >

舒尔特表游戏实现

桑璞
2023-12-01

#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

     假设是0位置的与3位置的交换

     随机一个位置数字1~8

     假设是5 1位置的和5交换

     ...就可以实现随机顺序

     */

    for (int i = 0; i<9; i++) {

        /**

         *  随机出来的位置数字称为种子数

         */

        NSInteger seed = i+ arc4random() % (9-i) ;//[0,9)

        /**

         *  交换位置iseed中的数字

         */

        [numberArray exchangeObjectAtIndex:i withObjectAtIndex:seed];

    }

    

    return numberArray;

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}



/**

 *  关闭当前视图控制器

    因为当前视图控制器是被上级视图控制器推出来的

    因此 关闭了当期的视图控制器 原来的就显示出来了

    关闭了当前视图控制器会被释放掉

    ModelPush的区别 

    Model连线方式显示的视图控制器 新的控制器会叠加在之前的控制器上,用户无法与上一级控制器进行交互,Model方式多用户游戏开发,Push方式多用于应用开发,Push方式需要使用UINavigationController

 */

- (IBAction)backBtnClicked {

    [self dismissViewControllerAnimated:YES completion:nil];

}

- (IBAction)tapNumber:(UIButton *)sender {

    /**

     *  通过buttontag拿到title

     */

//    NSInteger buttonTag = sender.tag;

//    NSString  * buttonTitle = [NumberArray[buttonTag]stringValue];

//    NSLog(@"你点击了数字:%@",buttonTitle);

    

    /**

     *  通过转换buttontitle

     */

//    NSString *buttonTitle = sender.titleLabel.text;

//    NSInteger buttonNumber = buttonTitle.integerValue;

//    NSLog(@"你点击了数字:%d",buttonNumber);

    NSInteger buttonNumber = sender.titleLabel.text.integerValue;

    /**

     *  游戏规则

     1.需要顺序点击数字,由小到大

     2.判断用户点对还是点错

     2.1如果用户当前点击的数字比上次大说明点对了  当前点击数字赋值给上次点击数字

     2.2如果用户当前点击数字不是比上次大说明点错了 提示用户 音效

     */

    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


 类似资料: