A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶子哥 中级黑马   /  2016-6-15 21:52  /  1642 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


       花了一天的时间,终于捣鼓出了一款别用特色的猜图小游戏. 那有什么特别之处了??
   
       效果展示:
                                          

        1>采用MVC设计模式

           

      2>使用懒加载
           
  1. //懒加载
  2. - (NSArray *)guessArray{

  3.     if (!_guessArray) {
  4.         NSString *path = [[NSBundle mainBundle] pathForResource:@"questions.plist" ofType:nil];
  5.         NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
  6.         
  7.         NSMutableArray *tempArray = [NSMutableArray array];
  8.         for (NSDictionary *dict in dictArray) {
  9.             YYGuessModel *guess = [YYGuessModel guessWithDict:dict];
  10.             [tempArray addObject:guess];
  11.         }
  12.         _guessArray = tempArray;
  13.     }
  14.     return _guessArray;
  15. }
复制代码


      3>字典转模型
         
  1. #import "YYGuessModel.h"

  2. @implementation YYGuessModel

  3. - (instancetype)initWithDict:(NSDictionary *)dict{

  4.     if (self = [super init]) {
  5.         [self setValuesForKeysWithDictionary:dict];
  6.     }
  7.     return self;
  8. }
  9. + (instancetype)guessWithDict:(NSDictionary *)dict{

  10.     return  [[self alloc] initWithDict:dict];
  11. }

  12. @end
复制代码

      4>使用中间弹框,温馨提示用户(带自定义的枚举参数)
           
  1. //弹框(三种)
  2. -(void)showAlertView:(YYGuessAlertType)alertType{

  3.        UIAlertAction *againAction = [UIAlertAction actionWithTitle:@"再来一次" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  4.         self.index = -1;
  5.         [self nextBtn:self.nextBtn];
  6.     }];
  7.     UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
  8.         NSLog(@"你选择了取消");
  9.         self.index --;
  10.         [self nextBtn:self.nextBtn];
  11.     }];
  12.     UIAlertAction *continueAction = [UIAlertAction actionWithTitle:@"继续" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
  13.         NSLog(@"你选择了继续");
  14.         
  15.         if (self.index != self.guessArray.count - 1) {
  16.             [self nextBtn:self.nextBtn];
  17.         }
  18.     }];

  19.     UIAlertController *alert = nil;
  20.     switch (alertType) {
  21.         case YYGuessAlertError:
  22.         {
  23.             alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"sorry,您答错了..扣除100金币" preferredStyle:UIAlertControllerStyleAlert];
  24.             
  25.             [alert addAction:cancelAction];
  26.         }
  27.             break;
  28.             
  29.         case YYGuessAlertRight:
  30.         {
  31.             alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"恭喜您,您答对了! 奖励200金币" preferredStyle:UIAlertControllerStyleAlert];
  32.             [alert addAction:continueAction];
  33.             [alert addAction:cancelAction];

  34.         }
  35.             break;
  36.             
  37.         case YYGuessAlertPass:
  38.         {
  39.             alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"恭喜您,您已经通关!! 奖励1000金币" preferredStyle:UIAlertControllerStyleAlert];
  40.             [alert addAction:againAction];
  41.             [alert addAction:cancelAction];

  42.         }
  43.             break;
  44.         
  45.     }
  46.    
  47.     [self presentViewController:alert animated:YES completion:^{
  48.         NSLog(@"....");
  49.     }];
  50. }
复制代码

      5>九宫格小算法
         
  1. //加载待选项按钮(只加载一次)
  2. -(void)loadOptionsBtn{
  3.    
  4.     CGFloat optionBtnW = 44;
  5.     CGFloat optionBtnH = optionBtnW;
  6.     CGFloat padding = 2;
  7.     CGFloat xMargin = (SCREEN_W - 2 * padding - COL * optionBtnW) / (COL - 1);
  8.    
  9.     NSMutableArray *optBtnArray = [NSMutableArray array];
  10.     for (int i = 0; i < COL * ROW; i++) {
  11.         int col = i % COL;
  12.         int row = i / COL;
  13.         
  14.         CGFloat optionBtnX = padding + (xMargin + optionBtnW) * col;
  15.         CGFloat optionBtnY = padding + (padding + optionBtnH) * row;
  16.         
  17.         UIButton *optionBtn = [[UIButton alloc]initWithFrame:CGRectMake(optionBtnX, optionBtnY, optionBtnW, optionBtnH)];
  18.         [optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option"] forState:UIControlStateNormal];
  19.         [optionBtn setBackgroundImage:[UIImage imageNamed:@"btn_option_highlighted"] forState:UIControlStateHighlighted];
  20.         
  21.         [optionBtn addTarget:self action:@selector(tipOptionBtn:) forControlEvents:UIControlEventTouchUpInside];
  22.         
  23.         optionBtn.tag = 101 + i;
  24.         
  25.         [self.optionsView addSubview:optionBtn];
  26.         [optBtnArray addObject:optionBtn];
  27.         
  28.     }
  29.     self.optBtnArray = optBtnArray;
  30.    
  31. }
复制代码
     6>动态创建答案按钮框
         
  1. - (void)loadAnswerBtn:(YYGuessModel *)guess{

  2.     //移除上一次创建的按钮
  3.     for (UIButton *btn in self.ansBtnArray) {
  4.         [btn removeFromSuperview];
  5.     }
  6.    
  7.     NSString *answer = guess.answer;

  8.     CGFloat ansBtnW = 44;
  9.     CGFloat ansBtnH = ansBtnW;
  10.     CGFloat padding = 10;
  11.    
  12.     NSInteger length = answer.length;
  13.     NSMutableArray *ansBtnArray = [NSMutableArray array];
  14.     for (int i = 0; i < length; i++) {
  15.         UIButton *ansBtn = [[UIButton alloc]init];
  16.         [ansBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer"] forState:UIControlStateNormal];
  17.         [ansBtn setBackgroundImage:[UIImage imageNamed:@"btn_answer_highlighted"] forState:UIControlStateHighlighted];
  18.         
  19.         CGFloat leftMargin = (SCREEN_W - ansBtnW * length - (length - 1)*padding) / 2;
  20.         CGFloat ansBtnX = leftMargin + (ansBtnW + padding) * i;
  21.         ansBtn.frame = CGRectMake(ansBtnX, 0, ansBtnW, ansBtnH);
  22.         
  23.         [ansBtn addTarget:self action:@selector(tipAnswerBtn:) forControlEvents:UIControlEventTouchUpInside];
  24.         
  25.         [self.answerView addSubview:ansBtn];
  26.         [ansBtnArray addObject:ansBtn];
  27.         
  28.     }
  29.     self.ansBtnArray = ansBtnArray;
  30.    
  31. }
复制代码



评分

参与人数 1技术分 +3 黑马币 +3 收起 理由
橘子哥 + 3 + 3 灰常灰常给力哦~

查看全部评分

3 个回复

倒序浏览
楼主厉害,自己开始研究啦,非常棒啊
回复 使用道具 举报
感谢分享~
回复 使用道具 举报
顶起 顶起
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马