黑马程序员技术交流社区

标题: YY超级猜图 [打印本页]

作者: 叶子哥    时间: 2016-6-15 21:52
标题: YY超级猜图

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

        1>采用MVC设计模式

           [attach]113590[/attach]

      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. }
复制代码




作者: 橘子哥    时间: 2016-6-16 09:51
楼主厉害,自己开始研究啦,非常棒啊
作者: 柳柳桑    时间: 2016-6-16 11:15
感谢分享~
作者: hyisya    时间: 2016-6-16 14:54
顶起 顶起




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2