Beispiel #1
0
    public void CheckBoard()
    {
        List <GameBoardSlot> connectedSlots = new List <GameBoardSlot>();

        for (int x = 0; x < rowSize; x++)
        {
            for (int y = 0; y < columnSize; y++)
            {
                GameBoardSlot tempSlot = GetSlot(x, y);
                if (tempSlot && tempSlot.isOccupied)
                {
                    CheckValidNeighbours(tempSlot, ref connectedSlots);
                    if (AnySlotsCleared(connectedSlots))
                    {
                        Debug.Log("TO DO: Score Tracking!!");
                    }

                    connectedSlots.Clear();
                }
            }
        }

        if (IsBoardBlocked())
        {
            ResetBoard();
            movOrders.Clear();
            GameManager.StartGame();
        }
    }
Beispiel #2
0
    private Vector3 GetBoardSlotBorder(GameBoardSlot slot, Types.LaneMovementType dir, bool collapse)
    {
        Vector3 startPos = slot.transform.position;
        int     dirMult  = (collapse) ? -1 : 1;

        switch (dir)
        {
        case Types.LaneMovementType.LEFT:
            startPos += new Vector3((slot.slotSprite.bounds.size.x / 2) * dirMult, 0, 0);
            break;

        case Types.LaneMovementType.RIGHT:
            startPos -= new Vector3((slot.slotSprite.bounds.size.x / 2) * dirMult, 0, 0);
            break;

        case Types.LaneMovementType.UP:
            startPos -= new Vector3(0, (slot.slotSprite.bounds.size.y / 2) * dirMult, 0);
            break;

        case Types.LaneMovementType.DOWN:
            startPos += new Vector3(0, (slot.slotSprite.bounds.size.y / 2) * dirMult, 0);
            break;

        default:
            startPos = Vector3.zero;
            break;
        }

        return(startPos);
    }
Beispiel #3
0
    private void SpawnBoardSlot(int x, int y)
    {
        GameBoardSlot newSlot = Instantiate(slotPrefab, GetWorldPosition(x + transform.position.x, y + transform.position.y), Quaternion.identity);

        newSlot.transform.parent = transform;
        newSlot.SetBoardPosition(x, y);
        boardSize[x, y] = newSlot;
    }
Beispiel #4
0
 public GameBoard(int numberOfColumns, int numberOfRows)
 {
     NumberOfColumns = numberOfColumns;
     NumberOfRows    = numberOfRows;
     validateCreationParams();
     Board = new GameBoardSlot[NumberOfColumns, NumberOfRows];
     bootstrapBoard();
 }
Beispiel #5
0
    public void CheckValidNeighbours(GameBoardSlot slotToCheck, ref List <GameBoardSlot> connectedSlots)
    {
        GameBoardSlot tempSlot;

        // Left Neighbour
        tempSlot = GetSlot(slotToCheck.slotColPos - 1, slotToCheck.slotRowPos);
        if (tempSlot && tempSlot.isOccupied)
        {
            if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType)
            {
                if (AddFoundSlot(tempSlot, ref connectedSlots))
                {
                    CheckValidNeighbours(tempSlot, ref connectedSlots);
                }
            }
        }

        // Right Neighbour
        tempSlot = GetSlot(slotToCheck.slotColPos + 1, slotToCheck.slotRowPos);
        if (tempSlot && tempSlot.isOccupied)
        {
            if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType)
            {
                if (AddFoundSlot(tempSlot, ref connectedSlots))
                {
                    CheckValidNeighbours(tempSlot, ref connectedSlots);
                }
            }
        }

        // Upper Neighbour
        tempSlot = GetSlot(slotToCheck.slotColPos, slotToCheck.slotRowPos + 1);
        if (tempSlot && tempSlot.isOccupied)
        {
            if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType)
            {
                if (AddFoundSlot(tempSlot, ref connectedSlots))
                {
                    CheckValidNeighbours(tempSlot, ref connectedSlots);
                }
            }
        }

        // Lower Neighbour
        tempSlot = GetSlot(slotToCheck.slotColPos, slotToCheck.slotRowPos - 1);
        if (tempSlot && tempSlot.isOccupied)
        {
            if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType)
            {
                if (AddFoundSlot(tempSlot, ref connectedSlots))
                {
                    CheckValidNeighbours(tempSlot, ref connectedSlots);
                }
            }
        }

        AddFoundSlot(slotToCheck, ref connectedSlots);
    }
Beispiel #6
0
 private void bootstrapBoard()
 {
     for (var i = 0; i < NumberOfColumns; i++)
     {
         for (var j = 0; j < NumberOfRows; j++)
         {
             Board[i, j] = new GameBoardSlot();
         }
     }
 }
Beispiel #7
0
    public void UncollapseTile(Types.LaneMovementType direction, GameBoardSlot transferTo, Tile tile)
    {
        Vector3 uncollapseEndPoint = GetBoardSlotBorder(transferTo, direction, false);

        tile.SetUncollapsedTile(uncollapseEndPoint, direction);

        transferTo.objInSlot  = tile.gameObject;
        transferTo.isOccupied = true;
        transferTo.objInSlot.GetComponent <Tile>().ProceedUncollapse(direction, transferTo.transform.position);
    }
Beispiel #8
0
    public void MoveTile(GameObject tile, GameBoardSlot from, GameBoardSlot to)
    {
        Tile newTile = tile.GetComponent <Tile>();

        SubscribeOnTileMovementEnded(newTile);
        newTile.SetDestination(to.transform.position);
        newTile.SetTileInMotion(true);

        to.objInSlot  = from.objInSlot;
        to.isOccupied = true;

        from.ResetSlot();
    }
Beispiel #9
0
 private bool AddFoundSlot(GameBoardSlot foundSlot, ref List <GameBoardSlot> connectedSlots)
 {
     if (!connectedSlots.Contains(foundSlot))
     {
         foundSlot.beenChecked = true;
         connectedSlots.Add(foundSlot);
         return(true);
     }
     else
     {
         return(false);
     }
 }
Beispiel #10
0
 private static void printgameBoardSlot(GameBoardSlot gameBoardSlot)
 {
     if (gameBoardSlot.IsOccupied)
     {
         if (gameBoardSlot.OccupiedBy.Color == Color.Red)
         {
             Console.Write("{  RED   }\t");
         }
         else
         {
             Console.Write("{ YELLOW }\t");
         }
     }
     else
     {
         Console.Write("{        }\t");
     }
 }
Beispiel #11
0
    private bool FindRows(ref List <int> rows)
    {
        for (int y = 0; y < columnSize; y++)
        {
            if (!IsRowOrdered(y))
            {
                for (int x = 0; x < rowSize; x++)
                {
                    GameBoardSlot temp = GetSlot(x, y);
                    if (temp.isOccupied)
                    {
                        rows.Add(y);
                        break;
                    }
                }
            }
        }

        return(rows.Count != 0);
    }
Beispiel #12
0
    private bool FindColumns(ref List <int> columns)
    {
        for (int x = 0; x < rowSize; x++)
        {
            if (!IsColumnOrdered(x))
            {
                for (int y = 0; y < columnSize; y++)
                {
                    GameBoardSlot temp = GetSlot(x, y);
                    if (temp.isOccupied)
                    {
                        columns.Add(x);
                        break;
                    }
                }
            }
        }

        return(columns.Count != 0);
    }
Beispiel #13
0
 public void SetTile(GameBoardSlot slot, Tile tile)
 {
     if (slot != null && tile != null) {
         slot.SlotTile = tile;
         slot.SlotTile.transform.SetParent(slot.transform);
         slot.SlotTile.transform.position = slot.transform.position;
     }
 }
Beispiel #14
0
    public void OnSlotTileChange(GameBoardSlot slot)
    {
        bool isFilled = true;
        foreach (var s in slots) {
            if (s.SlotTile == null) {
                isFilled = false;
                break;
            }
        }

        if (isFilled && OnGameBoardFilled != null) {
            OnGameBoardFilled();
        }
    }