Example #1
0
    private WordTile setTileBlastDirection(List <Tile> tiles)
    {
        WordTile t        = (WordTile)tiles[tiles.Count - 1];
        WordTile lastTile = (WordTile)tiles[tiles.Count - 2];

        if (Mathf.Abs(lastTile.getRow() - t.getRow()) + Math.Abs(lastTile.getCol() - t.getCol()) > 1)
        {
            if (tiles.Count == 5)
            {
                if ((lastTile.getRow() - t.getRow() == 1 && (lastTile.getCol() - t.getCol() == 1)) || (lastTile.getRow() - t.getRow() == -1 && (lastTile.getCol() - t.getCol() == -1)))
                {
                    t.blasterDirection = 3;
                }
                else
                {
                    t.blasterDirection = 4;
                }
            }
            else if (tiles.Count == 6)
            {
                t.blasterDirection = 6;
            }
            else
            {
                t.blasterDirection = 7;
            }
        }
        else
        {
            if (tiles.Count == 5)
            {
                if (Mathf.Abs(lastTile.getRow() - t.getRow()) > 0)
                {
                    t.blasterDirection = 2;
                }
                else
                {
                    t.blasterDirection = 1;
                }
            }
            else if (tiles.Count == 6)
            {
                t.blasterDirection = 5;
            }
            else
            {
                t.blasterDirection = 7;
            }
        }
        return(t);
    }
Example #2
0
    private void consumeCrown(WordTile tile)
    {
        if (tile.crown)
        {
            List <Anchor> anchors      = getAnchors();
            List <Ice>    ice          = getIce();
            Ice           iceAboveTile = (Ice)getIceTile(tile.getRow(), tile.getCol());

            if (ice.Count > 0 && iceAboveTile != null)
            {
                ice.Remove(iceAboveTile);
            }

            if (anchors.Count > 0) // pop Tile below anchor
            {
                Anchor pickedAnchor = (anchors[UnityEngine.Random.Range(0, anchors.Count)]);
                for (int n = 0; n < pickedAnchor.getRow(); n++)
                {
                    Tile t = getTile(n, pickedAnchor.getCol());
                    if (t is WordTile && t != tile)
                    {
                        popCrown(tile, t);
                        break;
                    }
                }
            }
            else if (ice.Count > 0) //pop tile with ice
            {
                int      random      = UnityEngine.Random.Range(0, ice.Count);
                Ice      pickedIce   = (ice[random]);
                WordTile abovePicked = (WordTile)getTile(pickedIce.getRow(), pickedIce.getCol());
                popCrown(tile, abovePicked);
            }
            else //pop random tile
            {
                List <WordTile> wordTilesList = getWordTiles();
                for (int a = 0; a < wordTilesList.Count; a++)
                {
                    Tile t = wordTilesList[UnityEngine.Random.Range(0, wordTilesList.Count())];
                    if (t is WordTile && t != tile)
                    {
                        popCrown(tile, t);
                        break;
                    }
                }
            }
        }
    }
Example #3
0
    private void _popAndMoveDown(List <Tile> tiles) //all tiles should be wordtiles
    {
        if (tiles == null)
        {
            return;
        }

        for (int i = 0; i < tiles.Count; i++)
        {
            pop(tiles[i]);
        }

        if (tiles.Count > 4)
        {
            WordTile t = setTileBlastDirection(tiles);
            t.appear();
            setTile(t, t.getRow(), t.getCol());//put back t
        }

        bool moved = true;

        while (moved)
        {
            moved = this.moveDown();
            for (int c = 0; c < col; c++)
            {
                for (int r = row - 1; r >= 0; r--)
                {
                    if (getTile(r, c) == null)
                    {
                        float n = UnityEngine.Random.Range(0, 100 * 100) / 100;
                        Dictionary <string, object> anchorRule = level.getAnchorTargetRule();
                        if (!level.isTutorial)
                        {
                            if (anchorRule != null && getColWithoutWall().Contains(c) && n < (double)anchorRule["probability"] * 100)
                            {
                                Tile tile = Anchor.createGameObject(this.gameObject, r, c);
                                setTile(tile, r, c);
                            }
                            else
                            {
                                Tile tile = WordTile.createGameObject(this.gameObject, r, c);
                                setTile(tile, r, c);
                            }
                        }
                    }
                }
            }
        }

        for (int r = 0; r < row; r++)
        {
            for (int c = 0; c < col; c++)
            {
                Tile tile = getTile(r, c);
                if (tile)
                {
                    tile.gravity();
                }
            }
        }

        this.InvokeCallback(1.0f, () => {
            bool popped = popAnchor();
            //Debug.Log("sinkedAnchorCount: " + sinkedAnchorCount);
            if (popped)
            {
                _popAndMoveDown(new List <Tile>());
            }
            else
            {
                //finally done.
                List <WordTile> specialPop = new List <WordTile>();
                for (int i = 0; i < tilePoppedThisTurn.Count; i++)
                {
                    if (!tiles.Contains(tilePoppedThisTurn[i]))
                    {
                        specialPop.Add(tilePoppedThisTurn[i]);
                    }
                }

                int total = calculateScoreFromConnectedTiles(tiles.Cast <WordTile>().ToList()) +
                            calculateScoreFromBlastedTiles(specialPop.Cast <WordTile>().ToList());

                userScore += total;
                finishAllPopAndMoveDown(tiles.Cast <WordTile>().ToList(), specialPop.Cast <WordTile>().ToList(), total);
            }
            updateScore();
            tilePoppedThisTurn.Clear();
        });
    }
Example #4
0
    private void pop(Tile t)
    {
        if (t == null)
        {
            return;
        }

        Ice iceAboveTile = (Ice)getIceTile(t.getRow(), t.getCol());

        if (iceAboveTile != null && !iceAboveTile.isBreakable())
        {
            iceTiles[t.getRow()][t.getCol()] = null;
            iceAboveTile.pop();
            poppedIceCount += 1;
        }

        if (!(t is WordTile))
        {
            return;
        }

        if (t is RootedTile)
        {
            RootedTile tile = (RootedTile)t;
            tile.pop();
            if (!tile.isBreakable())
            {
                return;
            }
        }

        WordTile k = (WordTile)t;

        if (k.crown)
        {
            consumeCrown(k);
        }

        k.disappear();
        tilePoppedThisTurn.Add(k);
        setTile(null, k.getRow(), k.getCol());

        if (k.blasterDirection == 1) //Horizontal
        {
            k.blasterAnimation();
            for (int c = 0; c < col; c++)
            {
                pop(getTile(k.getRow(), c));
            }
        }
        else if (k.blasterDirection == 2) //Vertical
        {
            k.blasterAnimation();
            for (int r = 0; r < row; r++)
            {
                pop(getTile(r, k.getCol()));
            }
        }
        else if (k.blasterDirection == 3) //diagonalArrow1
        {
            k.blasterAnimation();
            for (int i = 0; i < row; i++)
            {
                pop(getTile((k.getRow() + i), (k.getCol() + i)));
                pop(getTile((k.getRow() - i), (k.getCol() - i)));
            }
        }
        else if (k.blasterDirection == 4) //diagonalArrow2
        {
            k.blasterAnimation();
            for (int i = 0; i < row; i++)
            {
                pop(getTile((k.getRow() + i), (k.getCol() - i)));
                pop(getTile((k.getRow() - i), (k.getCol() + i)));
            }
        }
        else if (k.blasterDirection == 5) //UpDown
        {
            k.blasterAnimation();
            for (int c = 0; c < col; c++)
            {
                pop(getTile(k.getRow(), c));
            }
            for (int r = 0; r < row; r++)
            {
                pop(getTile(r, k.getCol()));
            }
        }
        else if (k.blasterDirection == 6) //Corner
        {
            k.blasterAnimation();
            for (int i = 0; i < row; i++)
            {
                pop(getTile((k.getRow() + i), (k.getCol() - i)));
                pop(getTile((k.getRow() - i), (k.getCol() + i)));
                pop(getTile((k.getRow() + i), (k.getCol() + i)));
                pop(getTile((k.getRow() - i), (k.getCol() - i)));
            }
        }
        else if (k.blasterDirection == 7) //allDirection
        {
            k.blasterAnimation();
            for (int i = 0; i < row; i++)
            {
                pop(getTile((k.getRow() + i), (k.getCol() - i)));
                pop(getTile((k.getRow() - i), (k.getCol() + i)));
                pop(getTile((k.getRow() + i), (k.getCol() + i)));
                pop(getTile((k.getRow() - i), (k.getCol() - i)));
            }
            for (int c = 0; c < col; c++)
            {
                pop(getTile(k.getRow(), c));
            }
            for (int r = 0; r < row; r++)
            {
                pop(getTile(r, k.getCol()));
            }
        }
    }