Example #1
0
    void Detect()
    {
        if (nowG == 0)
        {
            escape();
        }
        memory += 1;
        stack.Push(nowG, memory);
        if (memory > 4)
        {
            for (int i = 4; i < memory; i++)
            {
                if (r.Next(0, 7) < 2)
                {
                    memory = i;
                    break;
                }
            }
        }
        int  l = gameController.gELen[nowG];
        int  m;
        bool b;

        bool[] visit = new bool[l];
        if (memory > 0)
        {
            int[] a = new int[memory];
            for (int i = 0; i < memory; i++)
            {
                a[i] = stack.Pop(memory);
            }
            for (int i = memory - 1; i > -1; i--)
            {
                stack.Push(a[i], memory);
            }
            m = 0;
            for (int i = 0; i < l; i++)
            {
                b = true;
                for (int j = 0; j < memory; j++)
                {
                    if (a[j] == gameController.gEdge[nowG][i])
                    {
                        visit[i] = false;
                        b        = false;
                        break;
                    }
                }
                if (b)
                {
                    visit[i] = true;
                    m++;
                }
            }
        }
        else
        {
            m = l;
            for (int i = 0; i < l; i++)
            {
                visit[i] = true;
            }
        }
        b = false;
        if (m == 0)
        {
            b = true;
            m = l;
        }
        int k = r.Next(m);

        for (int i = 0; i < l; i++)
        {
            if (visit[i] || b)
            {
                if (k == 0)
                {
                    nowG = gameController.gEdge[nowG][i];
                    aimX = gameController.gCordx[nowG];
                    aimZ = gameController.gCordz[nowG];
                    if (aimX - transform.position.x > epsilon)
                    {
                        aimRot = 90;
                    }
                    else if (aimX - transform.position.x < -epsilon)
                    {
                        aimRot = -90;
                    }
                    else if (aimZ - transform.position.z > epsilon)
                    {
                        aimRot = 0;
                    }
                    else
                    {
                        aimRot = 180;
                    }
                    return;
                }
                k--;
            }
        }
    }