Пример #1
0
    void InitCubeMatrix()
    {
        int   dim        = config.matrixDim;
        float cubeOffset = config.cubeSize;
        float scale      = config.cubeSize;

        for (int i = 0; i < dim + 2; i++)
        {
            for (int j = 0; j < dim + 2; j++)
            {
                for (int k = 0; k < dim + 2; k++)
                {
                    if (((i - 1) * (j - 1) * (k - 1) * (dim - i) * (dim - j) * (dim - k) == 0) && (i > 0 && i < dim + 1 && j > 0 && j < dim + 1 && k > 0 && k < dim + 1))
                    {
                        // fixed cubes as ground for snake to move

                        float     x = i * cubeOffset;
                        float     y = j * cubeOffset;
                        float     z = k * cubeOffset;
                        FixedCube f = Instantiate(fixedCube, new Vector3(0, 0, 0), Quaternion.Euler(new Vector3(0, 0, 0))) as FixedCube;
                        f.transform.localScale    = new Vector3(scale, scale, scale);
                        f.transform.parent        = GameObject.Find("BasePoint").transform;
                        f.transform.localPosition = new Vector3(x, y, z);
                    }

                    else if (i * j * k * (dim + 1 - i) * (dim + 1 - j) * (dim + 1 - k) == 0)
                    {
                        // positions that food will appear


                        if (
                            (i == 0 || i == dim + 1) &&
                            (j == 0 || j == dim + 1) &&
                            (k == 0 || k == dim + 1))
                        {
                            // 8 positions that snake cant reach
                            continue;
                        }
                        CubePos cp  = new CubePos(i, j, k);
                        int     key = cp.GetIndex();
                        // Debug.Log (key.ToString() + "-----" + i.ToString() + " " + j.ToString() + " "+ k.ToString() + " ");
                        cubePosEmpty.Add(key, true);
                    }
                }
            }
        }

        // Debug.Log (cubePosEmpty.Count.ToString());

        FixedCube main = Instantiate(fixedCube, new Vector3(0, 0, 0), Quaternion.Euler(new Vector3(0, 0, 0))) as FixedCube;

        scale = cubeOffset * dim;
        main.transform.localScale = new Vector3(scale, scale, scale);
        main.transform.parent     = GameObject.Find("BasePoint").transform;
        float position = cubeOffset * (dim + 1) / 2;

        main.transform.localPosition = new Vector3(position, position, position);
    }
Пример #2
0
    public void Init(CubePos cp, CubePos dcp, float cd, float mt, int md, FaceIndex cfi)
    {
        cubePos          = cp;
        deltaCubePos     = dcp;
        cubeDistance     = cd;
        moveTime         = mt;
        moveDim          = md;
        currentFaceIndex = cfi;

        nextCubePos = cubePos;
        targetPos   = nextCubePos.ToVec3();
    }
Пример #3
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if (CheckMoveTimer())
        {
            CubePos cpToBeEmpty = snakeCubes [snakeCubes.Count - 1].GetCubePos();
            cubePosEmpty [cpToBeEmpty.GetIndex()] = true;

            foreach (SnakeCube sc in snakeCubes)
            {
                sc.PreMove();
            }

            CubePos nextHeadPos = snakeCubeHead.CheckHead();



            if (snakeCubeHead.WillGrow())
            {
                AddSnakeCube();
                labelSnakeLength.text = ("Length:" + (snakeCubes.Count + 1).ToString());
                ResetFood();
            }


            if (CheckCrash(nextHeadPos))
            {
                CubePos cpToBeFull = snakeCubeHead.GetNextCubePos();
                cubePosEmpty [cpToBeFull.GetIndex()] = false;

                snakeCubeHead.Move();
                foreach (SnakeCube sc in snakeCubes)
                {
                    sc.Move();
                }
            }
            else
            {
                GameOver();
            }
        }
    }
Пример #4
0
    CubePos HandleOperation()
    {
        Vector3 deltaVec3 = new Vector3();

        if (snakeChangeDirection == SnakeChangeDirection.left)
        {
            rotateAngle = 90f;
            rotateBase  = left_bottom.position;
            rotateAxis  = left_bottom.position - left_top.position;
            deltaVec3   = left_bottom.position - right_bottom.position;
        }
        else if (snakeChangeDirection == SnakeChangeDirection.right)
        {
            rotateAngle = 90f;
            rotateBase  = right_bottom.position;
            rotateAxis  = right_top.position - right_bottom.position;
            deltaVec3   = right_bottom.position - left_bottom.position;
        }

        snakeChangeDirection = SnakeChangeDirection.none;

        deltaCubePos = new CubePos(deltaVec3);

        //Debug.Log (deltaCubePos.x.ToString() + "," + deltaCubePos.y.ToString() + "," + deltaCubePos.z.ToString());


        willRotate       = true;
        willRotateCamera = false;


        transform.RotateAround(rotateBase, rotateAxis, rotateAngle);
        targetRot = transform.eulerAngles;
        transform.RotateAround(rotateBase, rotateAxis, -rotateAngle);


        nextCubePos = nextCubePos + deltaCubePos;
        CheckFood();

        return(nextCubePos);
    }
Пример #5
0
    void AddSnakeCube()
    {
        float   cubeOffset = config.cubeSize;
        float   scale      = config.cubeSize;
        CubePos cp         = snakeCubes [snakeCubes.Count - 1].GetCubePos();
        float   moveTime   = 0.9f * config.moveInterval;

        SnakeCube sc = Instantiate(snakeCube) as SnakeCube;

        sc.transform.localScale    = new Vector3(scale, scale, scale);
        sc.transform.parent        = GameObject.Find("BasePoint").transform;
        sc.transform.localPosition = cp.ToVec3();
        sc.SetMovePara(cubeOffset, moveTime);
        sc.SetCubePos(cp);
        // Debug.Log ("-----" + cp.x.ToString() + " " + cp.y.ToString() + " "+ cp.z.ToString() + " ");
        cubePosEmpty [cp.GetIndex()] = false;

        sc.SetNextSnakeCube(snakeCubes[snakeCubes.Count - 1]);
        //sc.PreMove ();

        snakeCubes.Add(sc);
    }
Пример #6
0
    void InitFood()
    {
        int     dim   = config.matrixDim;
        float   scale = config.cubeSize;
        CubePos cp    = new CubePos(0, dim, 0);

        if (dim % 2 == 0)
        {
            cp.x = dim / 2;
        }
        else
        {
            cp.x = (dim + 1) / 2;
        }

        food = Instantiate(food) as Food;
        food.transform.localScale = new Vector3(scale, scale, scale);
        food.transform.parent     = GameObject.Find("BasePoint").transform;
        //food.transform.localPosition = cp.ToVec3 (cubeOffset);

        food.SetCubePos(cp);

        snakeCubeHead.InitFood(food);
    }
Пример #7
0
    void InitSnake()
    {
        int     dim        = config.matrixDim;
        float   cubeOffset = config.cubeSize;
        float   scale      = config.cubeSize;
        CubePos cp         = new CubePos(0, 4, 0);
        float   moveTime   = 0.9f * config.moveInterval;

        if (dim % 2 == 0)
        {
            cp.x = dim / 2;
        }
        else
        {
            cp.x = (dim + 1) / 2;
        }

        float x = cp.x * cubeOffset;
        float y = cp.y * cubeOffset;
        float z = cp.z * cubeOffset;

        CubePos deltaCubePos = new CubePos(0, 1, 0);

        snakeCubeHead = Instantiate(snakeCubeHead) as SnakeCubeHead;
        snakeCubeHead.transform.localScale    = new Vector3(scale, scale, scale);
        snakeCubeHead.transform.parent        = GameObject.Find("BasePoint").transform;
        snakeCubeHead.transform.localPosition = new Vector3(x, y, z);
        snakeCubeHead.Init(cp, deltaCubePos, cubeOffset, moveTime, config.matrixDim + 1, FaceIndex.z_neg);
        cubePosEmpty [cp.GetIndex()] = false;

        InputController ic = GameObject.Find("InputController").GetComponent <InputController>();

        ic.snakeCubeHead = snakeCubeHead;


        for (int i = 3; i > 0; i--)
        {
            y = i * cubeOffset;
            SnakeCube sc = Instantiate(snakeCube) as SnakeCube;
            sc.transform.localScale    = new Vector3(scale, scale, scale);
            sc.transform.parent        = GameObject.Find("BasePoint").transform;
            sc.transform.localPosition = new Vector3(x, y, z);
            sc.SetMovePara(cubeOffset, moveTime);
            CubePos thisCubePos = new CubePos(cp.x, cp.y - 4 + i, cp.z);
            sc.SetCubePos(thisCubePos);
            sc.SetReadyToMove();
            cubePosEmpty [thisCubePos.GetIndex()] = false;


            if (snakeCubes.Count == 0)
            {
                sc.SetNextSnakeCube(snakeCubeHead);
            }
            else
            {
                sc.SetNextSnakeCube(snakeCubes[snakeCubes.Count - 1]);
            }

            snakeCubes.Add(sc);
        }
    }
Пример #8
0
 bool CheckCrash(CubePos headPos)
 {
     return(cubePosEmpty[headPos.GetIndex()]);
 }
Пример #9
0
 public void SetCubePos(CubePos cp)
 {
     cubePos = cp;
     transform.localPosition = cp.ToVec3();
 }
Пример #10
0
 public void SetDeltaCubePos(CubePos delta)
 {
     deltaCubePos = delta;
 }
Пример #11
0
 public void SetCubePos(CubePos cp)
 {
     cubePos = cp;
 }