• moveUp()


    这个函数内容有点多,想讲一下大概思路:

    向上移有两种情况
    1、前面为空白
    这种情况有两个步骤
    (1)将人当前的位置设置为空白(0),
    (2)再讲人前面的位置设置为人(2)
    2、前面为箱子
    当前面为箱子时有三种情况
    1、箱子前面为空白
    移动人和箱子,这个操作有三个步骤
    (1)将人当前位置设置为空(0)
    (2)将箱子位置设置为人(2)
    (3)将箱子前面设置为箱子(3)
    2、箱子前面为墙
    这种情况不需要做任何操作
    3、箱子前面为终点
    这种情况有四个个步骤
    (1)将人的位置设置为空(0)
    (2)将箱子的位置设置为人(2)
    (3)将终点位置设置为★(5)
    (4)箱子boxs的数量减一
    3、前面为墙
    这种情况最简单,不需要做任何操作
    4、前面为终点
    我这里没有考虑太多,这种情况不做操作。(如果更换地图的话可能需要修改代码)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    具体代码如下,解析我全写在注释里面:

    void moveUp(){
    //定义变量存放人物上方的坐标
    int ux, uy;

    //当上方没有元素时,直接return (其实人不可能在边缘)
    if(y == 0){
    return;
    }

    //记录上方坐标,x为横,y为纵,所有ux = x, uy = y - 1;
    ux = x;
    uy = y - 1;

    //上方为已完成的箱子
    if(map[uy][ux] == 5){
    return;
    }
    //假设上方为墙,直接return,这个和上面的判断可以合在一起,这里为了看清楚分开写
    if(map[uy][ux] == 1){
    return;
    }

    //假设上方为箱子
    if(map[uy][ux] == 3){
    //判断箱子上方是否为墙
    if(map[uy - 1][ux] == 1){(http://www.my516.com)
    return;
    }

    //判断箱子上方是否为终点
    if(map[uy - 1][ux] == 4){
    //将箱子上面内容赋值为5★
    map[uy - 1][ux] = 5;
    map[uy][ux] = 0;

    //箱子的数目减1
    boxs--;
    }else{
    //移动箱子
    map[uy - 1][ux] = 3;
    }
    }
    //当上面几种return的情况都没遇到,人肯定会移动,移动操作如下
    map[y][x] = 0;
    map[uy][ux] = 2;
    //更新人的坐标
    y = uy;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    这是一个方向的,其它方向要考虑的问题也和前面一样,我也就不赘述了。

  • 相关阅读:
    Java 深拷贝和浅拷贝 利用序列化实现深拷贝
    算法题005 剑指Offer面试题29 数组中出现次数超过一半的数字
    算法题003 斐波那契(Fibonacci)数列
    Android Sensors (4) 传感器使用最佳实践
    Android WebView使用基础
    Java 多线程(八) 线程状态图
    算法题006 判断两个链表是否相交
    Java 多线程(五) 多线程的同步
    算法题001 剑指Offer 面试题三:二维数组中的查找
    Android绘制基础及手写绘制实例
  • 原文地址:https://www.cnblogs.com/ly570/p/11661055.html
Copyright © 2020-2023  润新知