コード例 #1
0
    public bool Is_Same_Type(s_Tiles otherShape)
    {
        if (otherShape == null || !(otherShape is s_Tiles))
        {
            throw new ArgumentException("otherShape");
        }

        return(string.Compare(this.Type, (otherShape as s_Tiles).Type) == 0);
    }
コード例 #2
0
    public static void Change_Column_Row(s_Tiles a, s_Tiles b)
    {
        int tempRow = a.row;

        a.row = b.row;
        b.row = tempRow;

        int tempColumn = a.column;

        a.column = b.column;
        b.column = tempColumn;
    }
コード例 #3
0
    private IEnumerator Find_Matches_And_Collapse(RaycastHit2D hit2)
    {
        var hitTileTwo = hit2.collider.gameObject;

        tiles.Swap(hitTile, hitTileTwo);

        hitTile.transform.positionTo(s_Constants.animationTime, hitTileTwo.transform.position);
        hitTileTwo.transform.positionTo(s_Constants.animationTime, hitTile.transform.position);
        yield return(new WaitForSeconds(s_Constants.animationTime));

        var hitGomatchesInfo  = tiles.Get_Matches(hitTile);
        var hitGo2matchesInfo = tiles.Get_Matches(hitTileTwo);

        var totalMatches = hitGomatchesInfo.Matched_Tiles.Union(hitGo2matchesInfo.Matched_Tiles).Distinct();

        if (totalMatches.Count() < s_Constants.minTilesToMatch)
        {
            hitTile.transform.positionTo(s_Constants.animationTime, hitTileTwo.transform.position);
            hitTileTwo.transform.positionTo(s_Constants.animationTime, hitTile.transform.position);
            yield return(new WaitForSeconds(s_Constants.animationTime));

            tiles.Undo_Swap();
        }

        // bool addBonus = totalMatches.Count() >= s_Constants.minTilesToBonusMatch &&
        //!s_Card_Utilities.Includes_Remove_Whole_Row_Column(hitGomatchesInfo.Card_Contained) &&
        //!s_Card_Utilities.Includes_Remove_Whole_Row_Column(hitGo2matchesInfo.Card_Contained);

        s_Tiles hitGoCache = null;

        /*if (addBonus)
         * {
         *  var sameTypeGo = hitGomatchesInfo.Matched_Tiles.Count() > 0 ? hitTile : hitTileTwo;
         *  hitGoCache = sameTypeGo.GetComponent<s_Tiles>();
         * }*/

        int timesRun = 1;

        while (totalMatches.Count() >= s_Constants.minTilesToMatch)
        {
            Increase_Score((totalMatches.Count() - 2) * s_Constants.scoreBasicMatch);

            if (timesRun >= 2)
            {
                Increase_Score(s_Constants.scoreSubsequentMatch);
            }

            foreach (var item in totalMatches)
            {
                tiles.Remove(item);
                Remove_From_Scene(item);
            }

            /* if (addBonus)
             * {
             *   Create_Bonus(hitGoCache);
             * }*/

            // addBonus = false;

            var columns = totalMatches.Select(go => go.GetComponent <s_Tiles>().column).Distinct();

            var collapsedTileInfo = tiles.Collapse(columns);

            var newTileInfo = Create_New_Tile_In_Specific_Columns(columns);

            int maxDistance = Mathf.Max(collapsedTileInfo.maxMoveDistance, newTileInfo.maxMoveDistance);

            Move_And_Animate(newTileInfo.Moved_Tile, maxDistance);
            Move_And_Animate(collapsedTileInfo.Moved_Tile, maxDistance);

            yield return(new WaitForSeconds(s_Constants.minMovingAnimTime * maxDistance));

            totalMatches = tiles.Get_Matches(collapsedTileInfo.Moved_Tile).Union(tiles.Get_Matches(newTileInfo.Moved_Tile)).Distinct();

            timesRun++;
        }

        state = GameState.None;
        Start_Check_For_Potential_Matches();
    }
コード例 #4
0
 public static bool Neighbour_Alignment(s_Tiles tileOne, s_Tiles tileTwo)
 {
     return((tileOne.column == tileTwo.column || tileOne.row == tileTwo.row) &&
            Mathf.Abs(tileOne.column - tileTwo.column) <= 1 &&
            Mathf.Abs(tileOne.row - tileTwo.row) <= 1);
 }