예제 #1
0
    public void Slide(List <PuzzleSlide.Block> current, PuzzleSlide.Block b, int dir)
    {
        List <PuzzleSlide.Block> newState = new List <PuzzleSlide.Block>(current);

        PuzzleSlide.Block newBlock = new PuzzleSlide.Block(b);
        PuzzleSlide.Block oldBlock = b;
        while (CheckMove(newState, oldBlock, dir))
        {
            newState.Remove(oldBlock);

            if (oldBlock.rotation)
            {
                newBlock.ypos += dir;
            }
            else
            {
                newBlock.xpos += dir;
            }
            newState.Add(newBlock);
            Propose(newState, current);
            newState = new List <PuzzleSlide.Block>(newState);
            oldBlock = newBlock;
            newBlock = new PuzzleSlide.Block(oldBlock);
        }
    }
예제 #2
0
    public void CreateBlock(PuzzleSlide.Block block, RectTransform pos, bool target = false)
    {
        Color borderColour = Color.yellow;
        Color bgColour     = new Color(0.6f, 0.6f, 0f, 1f);

        // Create object
        GameObject blockGO = new GameObject("puzzleBlock");

        if (block.target)
        {
            borderColour = Color.red;
            bgColour     = new Color(0.8f, 0.0f, 0f, 1f);
        }
        blockGO.tag = Game.DIALOG;

        //Game game = Game.Get();
        blockGO.transform.SetParent(pos);

        RectTransform transBg = blockGO.AddComponent <RectTransform>();

        transBg.pivot = Vector2.up;
        transBg.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, (block.ypos * 3f * UIScaler.GetPixelsPerUnit()) + 0.1f, ((block.ylen + 1) * 3f * UIScaler.GetPixelsPerUnit()) - 0.2f);
        transBg.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, (block.xpos * 3f * UIScaler.GetPixelsPerUnit()) + 0.1f, ((block.xlen + 1) * 3f * UIScaler.GetPixelsPerUnit()) - 0.2f);
        blockGO.AddComponent <CanvasRenderer>();

        new UIElementBorder(blockGO.transform, transBg, Game.DIALOG, borderColour);

        UnityEngine.UI.Image uiImage = blockGO.AddComponent <UnityEngine.UI.Image>();
        uiImage.color = bgColour;

        BlockSlider slider = blockGO.AddComponent <BlockSlider>();

        slider.block = block;
        slider.win   = this;
    }
예제 #3
0
    public bool CheckMove(List <PuzzleSlide.Block> state, PuzzleSlide.Block b, int dir)
    {
        Vector2 target = b.GetMove(dir);

        return(PuzzleSlide.Empty(state, Mathf.RoundToInt(target.x), Mathf.RoundToInt(target.y)));
    }