zoukankan      html  css  js  c++  java
  • 循环逻辑。让我逻辑滞空的小题目

    昨晚遇到了一个让我逻辑滞空的小题目:

    让storyBoard中有一个button按钮,按钮图片可以随便设定,要求点击一下按钮,按钮就要向右下角45°方向移动。要就碰到四周时,button就要向个方向的90°方向移动。以此循环,碰到四周就要求转换方向。

    当时逻辑情况怎么也弄不清楚,总觉的少了好多情况。静下心来,我们来研究一下。

    定义边界属性(其实也可以定义局部变量)

    //button移动右边界范围x
    @property (nonatomic, assign) NSInteger rightRangeX;
    //button移动左边界范围x
    @property (nonatomic, assign) NSInteger leftRangeX;
    //button移动下边界范围y
    @property (nonatomic, assign) NSInteger bottomRangeY;
    //button移动上边界范围y
    @property (nonatomic, assign) NSInteger heightRangeY;
    

     设定两个BOOL值:用来判断是否向左,或向上(也可以向下,或向右)

    //判断button是否向左
    @property (nonatomic,assign) BOOL isleft;
    //判断button是否向上
    @property (nonatomic,assign) BOOL isup;
    

     在viewDidLoad中,让BOOL值为NO,因为题目要求是右下角嘛,要跟着题目走..

    - (void)viewDidLoad {
        [super viewDidLoad];
        self.isleft = NO;
        self.isup = NO;
        // Do any additional setup after loading the view, typically from a nib.
    }
    

     拖一个button方法:moveBtnClick: 

    - (IBAction)moveBtnClick:(UIButton *)sender 
    {
      ...  
    }
    

     方法中获取了屏幕的大小、设置了每次移动的距离(我假象为speed)、button在各个边的临界范围

        //获取屏幕大小
        CGRect mainRect = [[UIScreen mainScreen] bounds];
        
        //设置移动距离值
        NSInteger speed = 10;
        
        //求出button在个边的临界范围
        CGRect tempFrame = self.btnClick.frame;
    
        self.rightRangeX = mainRect.size.width - 60;
        self.bottomRangeY = mainRect.size.height - 60;
        self.leftRangeX = 0;
        self.heightRangeY = 0;
    
    
    (由于我在storyBoard中直接就设定了60 * 60 的大小,所以在求范围的时候就用了 “魔鬼数字 60”)
    

     主逻辑:起初,我在纸上写了不下10中情况,我考虑了起初button的各个位置的情况,在if语句中嵌套了无数个if语句,结果最后把自己锁死了进去。其实无非就上下左右,先考虑左右,在左右中考虑上下。仅此而已。

        if (self.isleft) {
            tempFrame.origin.x -= speed;
            if (tempFrame.origin.x < self.leftRangeX)
            {
                self.isleft = NO;
                tempFrame.origin.y += speed;
            }
            if (self.isup)
            {
                tempFrame.origin.y -= speed;
                if (tempFrame.origin.y < self.heightRangeY)
                {
                    self.isup = NO;
                }
            }
            else
            {
                tempFrame.origin.y += speed;
                if (tempFrame.origin.y > self.bottomRangeY)
                {
                    self.isup = YES;
                }
            }
        }
        else
        {
            tempFrame.origin.x += speed;
            if (tempFrame.origin.x > self.rightRangeX)
            {
                tempFrame.origin.y -= speed;
                self.isleft = YES;
            }
            if (self.isup)
            {
                tempFrame.origin.y -= speed;
                if (tempFrame.origin.y < self.heightRangeY)
                {
                    self.isup = NO;
                }
            }
            else
            {
                tempFrame.origin.y +=speed;
                if (tempFrame.origin.y > self.bottomRangeY)
                {
                    self.isup  = YES;
                }
            }
        }
    
    • 一道简单的逻辑分析问题,我却把自己锁死进去,给自己一个一个警告吧,遇到逻辑文字,静下心来,从全局入手,不要走一步分析一步,总也会有意想不到的问题发生,等走到了最后,发现自己已经走不出自己的逻辑了,挠头吧、删了重写吧、心里面乱了,就怎么都不会有任何新的进展了。
    • 静下心来,从总体入手,搭建出来打的框架,往框架里面添加所需要的逻辑。到头来,读一下自己写的代码,真简单。
    • 这是一道简单的逻辑问题,以后会遇到各种各样的复杂逻辑。静下心,搭出框架,走的每一步自己都知道在做什么,这样才能写出一套完美的逻辑。

    上全代码: 

      1 #import "ViewController.h"
      2 
      3 @interface ViewController ()
      4 
      5 @property (weak, nonatomic) IBOutlet UIButton *btnClick;
      6 //button移动右边界范围x
      7 @property (nonatomic, assign) NSInteger rightRangeX;
      8 
      9 //button移动左边界范围x
     10 @property (nonatomic, assign) NSInteger leftRangeX;
     11 
     12 //button移动下边界范围y
     13 @property (nonatomic, assign) NSInteger bottomRangeY;
     14 
     15 //button移动上边界范围y
     16 @property (nonatomic, assign) NSInteger heightRangeY;
     17 
     18 //判断button是否向左
     19 @property (nonatomic,assign) BOOL isleft;
     20 //判断button是否向上
     21 @property (nonatomic,assign) BOOL isup;
     22 
     23 @end
     24 
     25 @implementation ViewController
     26 
     27 - (void)viewDidLoad {
     28     [super viewDidLoad];
     29     self.isleft = NO;
     30     self.isup = NO;
     31     // Do any additional setup after loading the view, typically from a nib.
     32 }
     33 
     34 
     35 - (void)didReceiveMemoryWarning {
     36     [super didReceiveMemoryWarning];
     37     // Dispose of any resources that can be recreated.
     38 }
     39 - (IBAction)moveBtnClick:(UIButton *)sender
     40 {
     41     //获取屏幕大小
     42     CGRect mainRect = [[UIScreen mainScreen] bounds];
     43     
     44     //设置移动距离值
     45     NSInteger speed = 10;
     46     
     47     //求出button在个边的临界范围
     48     CGRect tempFrame = self.btnClick.frame;
     49 
     50     self.rightRangeX = mainRect.size.width - 60;
     51     self.bottomRangeY = mainRect.size.height - 60;
     52     self.leftRangeX = 0;
     53     self.heightRangeY = 0;
     54     
     55     if (self.isleft) {
     56         tempFrame.origin.x -= speed;
     57         if (tempFrame.origin.x < self.leftRangeX)
     58         {
     59             self.isleft = NO;
     60             tempFrame.origin.y += speed;
     61         }
     62         if (self.isup)
     63         {
     64             tempFrame.origin.y -= speed;
     65             if (tempFrame.origin.y < self.heightRangeY)
     66             {
     67                 self.isup = NO;
     68             }
     69         }
     70         else
     71         {
     72             tempFrame.origin.y += speed;
     73             if (tempFrame.origin.y > self.bottomRangeY)
     74             {
     75                 self.isup = YES;
     76             }
     77         }
     78     }
     79     else
     80     {
     81         tempFrame.origin.x += speed;
     82         if (tempFrame.origin.x > self.rightRangeX)
     83         {
     84             tempFrame.origin.y -= speed;
     85             self.isleft = YES;
     86         }
     87         if (self.isup)
     88         {
     89             tempFrame.origin.y -= speed;
     90             if (tempFrame.origin.y < self.heightRangeY)
     91             {
     92                 self.isup = NO;
     93             }
     94         }
     95         else
     96         {
     97             tempFrame.origin.y +=speed;
     98             if (tempFrame.origin.y > self.bottomRangeY)
     99             {
    100                 self.isup  = YES;
    101             }
    102         }
    103     }
    104     sender.frame = tempFrame;
    105 }
    106 
    107 
    108 @end

    仅此。

  • 相关阅读:
    使用文件进行优化 分类: python 小练习 divide into python python基础学习 2014-01-01 14:13 228人阅读 评论(0) 收藏
    生成器的应用例子 分类: python 小练习 divide into python python基础学习 2013-12-31 21:32 236人阅读 评论(0) 收藏
    生成器介绍 分类: python 小练习 python基础学习 divide into python 2013-12-31 21:17 226人阅读 评论(0) 收藏
    以lambda形式优化结构 分类: python 小练习 divide into python python基础学习 2013-12-30 21:07 279人阅读 评论(0) 收藏
    优化程序结构 分类: divide into python python 小练习 2013-12-30 20:53 229人阅读 评论(0) 收藏
    过滤(s='good ' if m%2==0 else 'bad') 分类: python 小练习 python基础学习 2013-12-27 13:45 220人阅读 评论(0) 收藏
    python中的除法和取模 分类: python基础学习 2013-12-27 12:49 572人阅读 评论(0) 收藏
    自动化测试理论 分类: 测试 2013-12-25 20:49 241人阅读 评论(0) 收藏
    琐碎知识点 分类: divide into python 2013-12-25 20:01 185人阅读 评论(0) 收藏
    Linux查看进程的内存占用情况 分类: ubuntu 测试 2013-12-20 12:37 369人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/Dog-Ping/p/6053158.html
Copyright © 2011-2022 走看看