《围住神经猫》的逃跑路径算法


关于《围住神经猫》的逃跑路径算法

《围住神经猫》是去年在微信上挺火的H5游戏,在学习unity3d的过程中我就想把这个游戏用我学习到的unity3d知识重新编写。神经猫的逃跑路径有6个方向,分别是左上,右上,左,右,左下,右下,如图A。当神经猫到达边界点(最左,最右,最上,最下的点)时,则神经猫成功逃脱。

A

其中橙色圆点为不能到达点。如果在神经猫的逃跑路径上有橙色圆点,则称这条路径为不可通路径,反之为可通路径。逃跑算法的第一步是在6个逃跑方向寻找可通路径,再从可通路径中选择最短的路径(神经猫到达边界点最短距离),在图B中红色的方向为可通路径,白色的方向为不可通路径。

B

 

 

 

当同时存在多条最短可通路径时,人为的给神经猫设置优先级(我设置的优先级是左上,右上,左,右,左下,右下)。

当神经猫的6个逃跑方向都为不可通路径时。如图C,则在6个逃跑方向中选择神经猫可行走最远距离的为逃跑路径,图D的红色方向。因为这样可在一定程度上避免神经猫被橙色点包围。

图C

图D

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//using System.Collections.
public class Pot1Click : MonoBehaviour
{

    private GameObject cat;
    private GameObject manager;
    private int[] potNum = new int[6];//保存神经猫最短的可通路径
    private bool[] potClick = new bool[6];
    private int[] potMax = new int[6];//保存神经猫最远的可移动方向
    private int cl1;
    private int cl2;
    private int cl3;
    private int cr1;
    private int cr2;
    private int cr3;
    List<int> lisPot = new List<int>();

    // Use this for initialization
    void Start()
    {
        cat = GameObject.Find("cat");
        manager = GameObject.Find("GameManager");
    }

    // Update is called once per frame
    void Update()
    {

    }

    public void OnMouseDown()
    {
        if (manager.GetComponent<StartGame>().F == true || manager.GetComponent<StartGame>().V == true||manager.GetComponent<StartGame>().P==true)
            return;
        // print("x="+this.transform.position.x+",y="+this.transform.position.y);
        this.GetComponent<Pot1>().isClick = true;
        this.GetComponent<Pot1>().Changes();
        CheckPot();
        CatP();

    }
    public void CheckPot()
    {
        int max;
        int min;
        for (int i = 0; i < potClick.Length; i++)
        {
            potClick[i] = false;
        }
        //当6个移动方向为不可通路劲时,寻找神经猫可移动的最远的的方向
        if (CheckLeft1() != true && CheckRight1() != true && CheckLeft2() != true && CheckRight2() != true && CheckLeft3() != true && CheckRight3() != true)
        {
            max = 0;
            for (int i = 1; i < 6; i++)
            {
                if (potMax[max] < potMax[i])
                    max = i;
            }
            potClick[max] = true;
        }
        //寻找神经猫的最短可通路径
        else if (CheckLeft1() || CheckRight1() || CheckLeft2() || CheckRight2() || CheckLeft3() || CheckRight3())
        {
            CheckLeft1();
            CheckRight1();
            CheckLeft2();
            CheckRight2();
            CheckLeft3();
            CheckRight3();
            for (int i = 0; i < 6; i++)
            {
                if (potNum[i] <= 0)
                {
                    print("i=" + i+","+potNum[i]);
                    potNum[i] = 10;
                }
            }
            min = 0;
            for (int i = 1; i < 6; i++)
            {
                if (potNum[min] > potNum[i])
                    min = i;
            }
            potClick[min] = true;
        }
    }
    public void CatP()
    {
        int row;
        if (cat.GetComponent<CatMove>().y % 2 != 0)
        {
            MoveOdd();
            row = 1;//猫在奇数行
            print("奇数");
        }
        else
        {
            MoveEven();
            row = -1;//猫在偶数行
            print("偶数");
        }
    }

    /// <summary>
    /// 奇数行:左上x轴不变,右上x轴+0.5,左下x轴不变,右下x轴+0.5
    /// </summary>
    public void MoveOdd()
    {
        //左上
        if (CheckLeft1() == true && potClick[0])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
        }
        //右上
        else if (CheckRight1() && potClick[1])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
            cat.GetComponent<CatMove>().x++;
        }
        //左边
        else if (CheckLeft2() && potClick[2])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x--;
        }
        //右边
        else if (CheckRight2() && potClick[3])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x++;
        }
        //左下
        else if (CheckLeft3() && potClick[4])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
        }
        //右下
        else if (CheckRight3() && potClick[5])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
            cat.GetComponent<CatMove>().x++;
        }

        //非通路径检测
        //左上
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].GetComponent<Pot1>().isClick == false && potClick[0])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
        }
        //右上
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y - 1].GetComponent<Pot1>().isClick == false && potClick[1])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
            cat.GetComponent<CatMove>().x++;
        }
        //左边
        else if ((manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].GetComponent<Pot1>().isClick == false) && potClick[2])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x--;
        }
        //右边
        else if ((manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].GetComponent<Pot1>().isClick == false) && potClick[3])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x++;
        }
        //左下
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].GetComponent<Pot1>().isClick == false && potClick[4])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
        }
        //右下
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y + 1].GetComponent<Pot1>().isClick == false && potClick[5])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
            cat.GetComponent<CatMove>().x++;
        }
    }
    /// <summary>
    /// 偶数行:左上x轴-0.5,右上x轴不变,左下x轴-0.5,右下x轴不变
    /// </summary>
    public void MoveEven()
    {
        //左上
        if (CheckLeft1() == true && potClick[0])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
            cat.GetComponent<CatMove>().x--;
        }
        //右上
        else if (CheckRight1() && potClick[1])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
        }
        //左边
        else if (CheckLeft2() && potClick[2])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x--;
        }
        //右边
        else if (CheckRight2() && potClick[3])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x++;
        }
        //左下
        else if (CheckLeft3() && potClick[4])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
            cat.GetComponent<CatMove>().x--;
        }
        //右下
        else if (CheckRight3() && potClick[5])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
        }

        //非通路劲检测
        //左上
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y - 1].GetComponent<Pot1>().isClick == false && potClick[0])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
            cat.GetComponent<CatMove>().x--;
        }
        //右上
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].GetComponent<Pot1>().isClick == false && potClick[1])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y - 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y--;
        }
        //左边
        else if ((manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].GetComponent<Pot1>().isClick == false) && potClick[2])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x--;
        }
        //右边
        else if ((manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].GetComponent<Pot1>().isClick == false) && potClick[3])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x + 1, cat.GetComponent<CatMove>().y].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().x++;
        }
        //左下
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y + 1].GetComponent<Pot1>().isClick == false && potClick[4])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x - 1, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
            cat.GetComponent<CatMove>().x--;
        }
        //右下
        else if (manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].GetComponent<Pot1>().isClick == false && potClick[5])
        {
            float x = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.x;
            float y = manager.GetComponent<StartGame>().pots[cat.GetComponent<CatMove>().x, cat.GetComponent<CatMove>().y + 1].transform.position.y;
            cat.GetComponent<CatMove>().Move(x, y + 0.4f);
            cat.GetComponent<CatMove>().y++;
        }
    }
    /// <summary>
    /// 左上通路径检测
    /// </summary>
    /// <returns></returns>
    public bool CheckLeft1()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[0] = 0;
        cl1 = 0;
        potMax[0] = 0;
        while (checkResult)
        {
            if (tempx == 0 || tempy == 0)
            {
                potNum[0] = cl1;
                return true;
            }
            if (tempy % 2 != 0)
            {
                //猫在奇数行
                checkResult = oddCheckLeft1(tempx, tempy);
                tempy--;
            }
            else
            {
                //猫在偶数行
                checkResult = evenCheckLeft1(tempx, tempy);
                tempx--;
                tempy--;
            }
        }
        return false;
    }
    /// <summary>
    /// 奇数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool oddCheckLeft1(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x, y - 1].GetComponent<Pot1>().isClick == false)
        {
            // potNum[0]++;
            potMax[0]++;
            cl1++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 偶数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool evenCheckLeft1(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x - 1, y - 1].GetComponent<Pot1>().isClick == false)
        {
            //potNum[0]++;
            potMax[0]++;
            cl1++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 右上通路径检测
    /// </summary>
    /// <returns></returns>
    public bool CheckRight1()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[1] = 0;
        potMax[1] = 0;
        cr1 = 0;
        while (checkResult == true)
        {
            if (tempy == 0 || tempx == 8)
            {
                potNum[1] = cr1;
                return true;
            }
            if (tempy % 2 != 0)
            {
                checkResult = oddCheckRight1(tempx, tempy);
                tempx++;
                tempy--;
            }
            else
            {
                checkResult = evenCheckRight1(tempx, tempy);
                tempy--;
            }
        }
        return false;
    }
    /// <summary>
    /// 奇数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool oddCheckRight1(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x + 1, y - 1].GetComponent<Pot1>().isClick == false)
        {
            // potNum[1]++;
            potMax[1]++;
            cr1++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 偶数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool evenCheckRight1(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x, y - 1].GetComponent<Pot1>().isClick == false)
        {
            // potNum[1]++;
            potMax[1]++;
            cr1++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 左边通路检测
    /// </summary>
    /// <returns></returns>
    public bool CheckLeft2()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[2] = 0;
        potMax[2] = 0;
        cl2 = 0;
        while (checkResult == true)
        {
            if (tempx == 0)
            {
                potNum[2] = cl2;
                return true;
            }
            if (manager.GetComponent<StartGame>().pots[tempx - 1, tempy].GetComponent<Pot1>().isClick == false)
            {
                checkResult = true;
                tempx--;
                // potNum[2]++;
                potMax[2]++;
                cl2++;
            }
            else
                checkResult = false;
        }
        return false;
    }
    /// <summary>
    /// 右边通路检测
    /// </summary>
    /// <returns></returns>
    public bool CheckRight2()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[3] = 0;
        potMax[3] = 0;
        cr2 = 0;
        while (checkResult == true)
        {
            if (tempx == 8)
            {
                potNum[3] = cr2;
                return true;
            }
            if (manager.GetComponent<StartGame>().pots[tempx + 1, tempy].GetComponent<Pot1>().isClick == false)
            {
                checkResult = true;
                tempx++;
                // potNum[3]++;
                potMax[3]++;
                cr2++;
            }
            else
                checkResult = false;
        }
        return false;
    }

    /// <summary>
    /// 左下通路径检测
    /// </summary>
    /// <returns></returns>
    public bool CheckLeft3()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[4] = 0;
        potMax[4] = 0;
        cl3 = 0;
        while (checkResult)
        {
            if (tempx == 0 || tempy == 8)
            {
                potNum[4] = cl3;
                return true;
            }
            if (tempy % 2 != 0)
            {
                //猫在奇数行
                checkResult = oddCheckLeft3(tempx, tempy);
                tempy++;
            }
            else
            {
                //猫在偶数行
                checkResult = evenCheckLeft3(tempx, tempy);
                tempx--;
                tempy++;
            }

        }
        return false;
    }
    /// <summary>
    /// 奇数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool oddCheckLeft3(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x, y + 1].GetComponent<Pot1>().isClick == false)
        {
            // potNum[4] = 0;
            potMax[4]++;
            cl3++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 偶数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool evenCheckLeft3(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x - 1, y + 1].GetComponent<Pot1>().isClick == false)
        {
            //potNum[4]++;
            potMax[4]++;
            cl3++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 右下通路径检测
    /// </summary>
    /// <returns></returns>
    public bool CheckRight3()
    {
        int tempx = cat.GetComponent<CatMove>().x;
        int tempy = cat.GetComponent<CatMove>().y;
        bool checkResult = true;
        potNum[5] = 0;
        potMax[5] = 0;
        cr3 = 0;
        while (checkResult == true)
        {
            if (tempy == 8 || tempx == 8)
            {
                potNum[5] = cr3;
                return true;
            }
            if (tempy % 2 != 0)
            {
                checkResult = oddCheckRight3(tempx, tempy);
                tempx++;
                tempy++;
            }
            else
            {
                checkResult = evenCheckRight3(tempx, tempy);
                tempy++;
            }
        }
        return false;
    }
    /// <summary>
    /// 奇数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool oddCheckRight3(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x + 1, y + 1].GetComponent<Pot1>().isClick == false)
        {
            //potNum[5]++;
            potMax[5]++;
            cr3++;
            return true;
        }
        else
            return false;
    }

    /// <summary>
    /// 偶数行检测
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public bool evenCheckRight3(int x, int y)
    {
        if (manager.GetComponent<StartGame>().pots[x, y + 1].GetComponent<Pot1>().isClick == false)
        {
            //potNum[5]++;
            potMax[5]++;
            cr3++;
            return true;
        }
        else
            return false;
    }

}
时间: 2024-10-12 15:18:34

《围住神经猫》的逃跑路径算法的相关文章

路网最优路径算法总结

前段时间,关于路网最优路径算法的专题我做了一次内部分享,感兴趣的朋友可以进行查看与下载,     链接如下: http://files.cnblogs.com/files/gisorange/%E8%B7%AF%E7%BD%91%E6%9C%80%E4%BC%98%E8%B7%AF%E5%BE%84%E7%AE%97%E6%B3%95%E6%A6%82%E8%BF%B0-2015-9-22.pdf

【算法日记】路径算法

此算法适合带有负边权的和无负边权的有向图.算法会计算出所有可能的路径和每个路径的长度 1 ways={ 2 "A":{ 3 "B":5, 4 "C":2 5 }, 6 "B":{ 7 "C":4 8 }, 9 "C":{ 10 "D":5, 11 }, 12 "D":None 13 } 14 15 def findWay(ways,start,en

&lt;路径算法&gt;哈密顿路径变种问题(2016华为软件精英挑战赛初赛)

原创博客,转载请联系博主! 前言:几天前华为的这个软件精英(算法外包)挑战赛初赛刚刚落幕,其实这次是我第二次参加,只不过去年只入围到了64强(32强是复赛线),最后搞到了一个华为的一顶帽子(感谢交大某妹纸快递寄过来!),今年小较了一把真,幸运地闯进了排行榜.(第17位的就是我们Team噢!耶鲁顾神很给力!)    所以呢,回到正题首先来看一下初赛赛题吧! 初赛赛题要求 已知有向图G的拓扑(结点V,边E)和V的一个子图V’,在G内求一条从start结点到end结点的路径,要求经过V’的所有结点并且

路网最优路径算法之一分层搜索

1 背景 前面介绍了关于双向及启发式的搜索,它们均可以实现了效率的倍增.但是应用到长距离(例如武汉——杭州大于500公里)的搜索时,平均效率存在100ms级甚至s级的耗时,显然这样一个面对广大用户群的互联网服务引擎效率是不可接受的,那么有没有优化的方向可以实现数量级的提升?      但人类对效率与正确的极致追求也是不止境的.关于双向及启发式搜索,它们的优化初衷均是一致的:缩短搜索范围.有人想到另一个路网搜索优化的方向:稀疏搜索路网密度——分层算法. 2 分层算法 假设有个长距离路径搜索的cas

Cocos2d-x《雷电大战》(6) 智能敌机AI来袭--飞行路径算法设计与实现(上)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文要实现飞机类游戏中的一连串飞机的跟随出和和并行出出.而网上找了一些Cocos2dx开发的飞行类游戏,都只找到一些简单的智能敌机.基本上没什么AI,这样游戏玩起来就太没意思了.然后又去找敌机飞行路径的相关资料,发现相关的也很少.想想还是自己来设计吧! 飞机类游戏设计中,智机的飞行路径设计和智能子弹的设计绝对一个飞行类游戏好坏是的核心.敌机智能也是分级别的.BOSS机就不说了,而飞行游戏由于

我的学习路径算法

大约 严格来说.本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口--况且CS中的 ArticleId=14124707" width="1" height="1" >算法往往暗指数据结构和算法(比如算法导论指的实际上是数据结构和算法导论),所以我觉得本文题目是合理的. 这篇文章讲了什么? 我这些年学习数据结构和算法的总结. 一些不错的算法书籍和教程. 算法的重要性. 初学 第一次接触数据结构是在大二下学期的数据结构课程.然而这门课程并没

sdut oj 3058 路线冲突问题(BFS+记录路径算法,回溯路径 )

路线冲突问题 题目描述 给出一张地图,地图上有n个点,任意两点之间有且仅有一条路.点的编号从1到n. 现在兵团A要从s1到e1,兵团B要从s2到e2,问两条路线是否会有交点,若有则输出交点个数,否出输出”success”. 输入 多组输入. 对于每组输入. 第一行输入n(1 <= n <= 100000),代表点的个数. 接下来的n-1行,每行包含两个整数u,v(1 <= u,v <= n),代表u,v之间有一条相连. 再接下里的一行包含四个整数s1,e1,s2,e2(1 <

[Python] 弗洛伊德(Floyd)算法求图的直径并记录路径

相关概念 对于一个图G=(V, E),求图中两点u, v间最短路径长度,称为图的最短路径问题.最短路径中最长的称为图的直径. 其中,求图中确定的某两点的最短路径算法,称为单源最短路径算法.求图中任意两点间的最短路径算法,称为多源最短路径算法. 常用的路径算法有: Dijkstra算法 SPFA算法\Bellman-Ford算法 Floyd算法\Floyd-Warshall算法 Johnson算法 其中最经典的是Dijkstra算法和Floyd算法.Floyd算法是多源最短路径算法,可以直接求出图

小橙书阅读指南(十二)——无向图、深度优先搜索和路径查找算法

在计算机应用中,我们把一系列相连接的节点组成的数据结构,叫做图.今天我们将要介绍它的一种形式--无向图,以及针对这种结构的深度优先搜索和路径查找算法. 一.无向图数据结构 接口: /** * 图论接口 */ public interface Graph { /** * 顶点数 * * @return */ int vertexNum(); /** * 边数 * * @return */ int edgeNum(); /** * 向图中添加一条v-w的边 * * @param v * @param