コード例 #1
0
    public void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped)
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0) // 그렇지 않았을 떄
            {
                if (wasFlipped)
                {
                    FlipPieces(piece.index, flippedPiece.index, false);
                }
            }
            else // match 를 만들었을 때
            {
                foreach (Point pnt in connected) // 연결됫을 때 노드피스들 지워주기
                {
                    //점수 더해주는 부분
                    scoreMng.Score += 10;
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            flipped.Remove(flip); // 업데이트 이후 플립 삭제
            update.Remove(piece);
        }
    }
コード例 #2
0
    // Update is called once per frame
    void FixedUpdate()
    {
        GUIManager.instance.FillBar.fillAmount = Mathf.Lerp(GUIManager.instance.FillBar.fillAmount, GUIManager.instance.filledBar / GUIManager.instance.maxFill, fillSpeed);

        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) // if we flipped to make this update
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0)                                   // if we didn't make a match
            {
                if (wasFlipped)                                         // if we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); // Flip back
                }
            }
            else // if we made a match
            {
                foreach (Point pnt in connected) // Remove the node pieces connected
                {
                    //movedPiece = true;
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }
                ApplyGravityToBoard();
            }

            flipped.Remove(flip); // remove the flip after update
            update.Remove(piece);
        }
    }
コード例 #3
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < model.update.Count; i++)
        {
            NodePiece piece = model.update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            model.fills[x] = Mathf.Clamp(model.fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) //If we flipped to make this update
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)                                   //If we didn't make a match
            {
                if (wasFlipped)                                         //If we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //Flip back
                }
            }
            else //If we made a match
            {
                foreach (Point pnt in connected) //Remove the node pieces connected
                {
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        model.dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            model.flipped.Remove(flip); //Remove the flip after update
            model.update.Remove(piece);
        }
    }
コード例 #4
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = GetFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected = isConnected(piece.index, true);

            bool wasFlipped = (flip != null);
            if (wasFlipped)
            {
                flippedPiece = flip.GetOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)
            {
                if (wasFlipped)
                {
                    FlipPieces(piece.index, flippedPiece.index, false);
                }
            }
            else
            {
                foreach (Point pnt in connected)
                {
                    KillPiece(pnt);
                    Node      node      = GetNodeAtPoint(pnt);
                    NodePiece nodePiece = node.GetPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }
                ApplyGravityToBoard();
            }
            flipped.Remove(flip);
            update.Remove(piece);
        }
    }
コード例 #5
0
ファイル: Match3.cs プロジェクト: balint940729/szakdolgozat
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.updatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) // ha felcseréltük akkor hyvjuk meg az update-t
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0)                                   // Ha nincs matchünk
            {
                if (wasFlipped)                                         // Ha felcseréltük
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //Visszacserélés
                }
            }
            else                                 // Ha match van
            {
                foreach (Point pnt in connected) //Összekapcsoltakat kivesszük
                {
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (piece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }
                ApplyGravityToBoard();
            }

            flipped.Remove(flip);
            update.Remove(piece);
        }
    }
コード例 #6
0
ファイル: Match3.cs プロジェクト: eh-jogos/match3_test
    // Update is called once per frame
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < piecesToUpdate.Count; i++)
        {
            NodePiece piece = piecesToUpdate[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        foreach (NodePiece piece in finishedUpdating)
        {
            FlippedPieces flipDuo    = getFlipped(piece);
            bool          wasFlipped = (flipDuo != null);

            int x = piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Coord> connected = isConnected(piece.index, true);

            if (wasFlipped)             // If we flipped to make this update
            {
                NodePiece flippedPiece = flipDuo.getOtherPiece(piece);
                AddConnectedGems(ref connected, isConnected(flippedPiece.index, true));
                if (connected.Count == 0)                               // If we didn't make a match...
                {
                    FlipPieces(piece.index, flippedPiece.index, false); // ...flip back
                }
            }
            if (connected.Count > 0)             // if we did make a match
            {
                scoreSystem.IncrementScore(connected.Count);
                foreach (Coord coord in connected)                // Remove the node pieces connected
                {
                    KillPiece(coord);
                    Node      node      = getNodeAtCoord(coord);
                    NodePiece nodePiece = node.GetPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            piecesToFlip.Remove(flipDuo);             // Remove the flip after done
            piecesToUpdate.Remove(piece);
        }
    }
コード例 #7
0
ファイル: Match3.cs プロジェクト: FarzanZand/MatchThree
    void removeFlipped(NodePiece p)
    {
        FlippedPieces flip = null;

        for (int i = 0; i < flipped.Count; i++)
        {
            if (flipped[i].getOtherPiece(p) != null)
            {
                flip = flipped[i];
            }
        }
    }
コード例 #8
0
ファイル: Match3.cs プロジェクト: Gitenax/Match3-Game
    private void RemoveFlipped(GamePiece p)
    {
        FlippedPieces flip = null;

        for (int i = 0; i < flipped.Count; i++)
        {
            if (flipped[i].GetOtherGamePiece(p) != null)
            {
                flip = flipped[i];
                break;
            }
        }
    }
コード例 #9
0
ファイル: Match3.cs プロジェクト: FarzanZand/MatchThree
    FlippedPieces getFlipped(NodePiece p)
    {
        FlippedPieces flip = null;

        for (int i = 0; i < flipped.Count; i++)
        {
            if (flipped[i].getOtherPiece(p) != null)
            {
                flip = flipped[i];
                break;
            }
        }
        return(flip);
    }
コード例 #10
0
    //Ha a megadott piece flipelve lett nem null értékkel, visszaadjuk a párját
    FlippedPieces GetFlipped(Piece p)
    {
        FlippedPieces flip = null;

        for (int i = 0; i < flippedPieceList.Count; i++)
        {
            if (flippedPieceList[i].GetOtherPiece(p) != null)
            {
                flip = flippedPieceList[i];
                break;
            }
        }
        return(flip);
    }
コード例 #11
0
ファイル: Match3.cs プロジェクト: eh-jogos/match3_test
    FlippedPieces getFlipped(NodePiece ref_piece)
    {
        FlippedPieces flip_duo = null;

        for (int i = 0; i < piecesToFlip.Count; i++)
        {
            if (piecesToFlip[i].getOtherPiece(ref_piece) != null)
            {
                flip_duo = piecesToFlip[i];
                break;
            }
        }
        return(flip_duo);
    }
コード例 #12
0
    private FlippedPieces GetFlipped(NodePiece p)
    {
        FlippedPieces flip = null;

        for (int i = 0; i < _flipped.Count; i++)
        {
            if (_flipped[i].GetOtherPiece(p) != null)
            {
                flip = _flipped[i];
                break;
            }
        }

        return(flip);
    }
コード例 #13
0
ファイル: Match3.cs プロジェクト: Gitenax/Match3-Game
    void Update()
    {
        List <GamePiece> finishedUpdating = new List <GamePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            GamePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            GamePiece piece = finishedUpdating[i];

            FlippedPieces flip         = GetFlipped(piece);
            GamePiece     flippedPiece = null;

            int x = piece.Index.X;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = IsConnected(piece.Index, true);
            bool         wasFlipped = (flip != null);


            if (wasFlipped)
            {
                flippedPiece = flip.GetOtherGamePiece(piece);
                AddPoints(ref connected, IsConnected(flippedPiece.Index, true));
            }

            if (connected.Count == 0)             //If we didtn't make match
            {
                if (wasFlipped)
                {
                    FlipPieces(piece.Index, flippedPiece.Index, false);
                }
            }
            else             //If made a match
            {
                //Remove pieces connected
                foreach (var point in connected)
                {
                    KillPieceAtPoint(point);
                    Node      node      = GetNodeAtPoint(point);
                    GamePiece nodePiece = node.GetPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }
                ApplyGravityToBoard();
            }

            flipped.Remove(flip);
            update.Remove(piece);
        }
    }
コード例 #14
0
    void Update()
    {
        if (timer)
        {
            totalTime  += Time.deltaTime;
            score.text  = ((int)targetTime).ToString();
            targetTime -= Time.deltaTime;
            if (targetTime <= 0.0f)
            {
                timerEnded();
            }
        }

        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) //If we flipped to make this update
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)                                   //If we didn't make a match
            {
                if (wasFlipped)                                         //If we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //Flip back
                }
            }
            else //If we made a match
            {
                foreach (Point pnt in connected) //Remove the node pieces connected
                {
                    if (timer)
                    {
                        targetTime += .5f;
                    }
                    else
                    {
                        scoreCount += 1;
                        score.text  = scoreCount.ToString();
                    }
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            flipped.Remove(flip); //Remove the flip after update
            update.Remove(piece);
        }
    }
コード例 #15
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];

            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped)   //
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0)                                   //¸ø¸Â­ŸÀ»¶§
            {
                if (wasFlipped)                                         //
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //¸ø¸ÂÃá ¸ð¾çÀº ´Ù½Ã ¿ø·¡ÀÚ¸®·Î
                }
            }
            else                                 //¸Â­ŸÀ»¶§
            {
                foreach (Point pnt in connected) //¸ÂÃá ¸ð¾çÀº »èÁ¦(²ô±â)
                {
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.GetPiece();

                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece); ///////////////////////////////////////////
                    }
                    node.SetPiece(null);

                    ////////// Á¡¼öºÎ¿© : (±âº») 3¸ÅÄ¡ = 5Á¡, 4¸ÅÄ¡ = 10Á¡, 5¸ÅÄ¡ = 20Á¡, 6¸ÅÄ¡ÀÌ»ó = 40Á¡
                    if (connected.Count == 3)
                    {
                        GameObject.Find("scoreUI").GetComponent <ScoreUI>().score += 5;
                    }
                    else if (connected.Count == 4)
                    {
                        GameObject.Find("scoreUI").GetComponent <ScoreUI>().score += 10;
                    }
                    else if (connected.Count == 5)
                    {
                        GameObject.Find("scoreUI").GetComponent <ScoreUI>().score += 20;
                    }
                    else if (connected.Count > 6)
                    {
                        GameObject.Find("scoreUI").GetComponent <ScoreUI>().score += 40;
                    }
                    /////////////////////////////////
                }

                ApplyGravityToBoard();
            }

            flipped.Remove(flip); //
            update.Remove(piece);
        }
    }
コード例 #16
0
    void Update()
    {
        if (gameFinished == false)
        {
            List <NodePiece> finishedUpdating = new List <NodePiece>();

            timerText.text = "Time: " + timeRemaining.ToString();

            if (score >= targetScore)
            {
                gameFinished = true;
                CancelInvoke(nameof(UpdateMatch3Game));
                resultsPanel.SetActive(true);

                audioSource.clip = audioClips[1];
                audioSource.Play();

                Debug.Log("Game Complete - You Win!");
            }

            for (int i = 0; i < update.Count; i++)
            {
                NodePiece piece = update[i];

                if (piece.UpdatePiece() == false)
                {
                    finishedUpdating.Add(piece);
                }
            }

            for (int i = 0; i < finishedUpdating.Count; i++)
            {
                NodePiece     piece        = finishedUpdating[i];
                FlippedPieces flip         = GetFlipped(piece);
                NodePiece     flippedPiece = null;

                int x = (int)piece.index.x;
                fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

                List <Point> connected  = IsConnected(piece.index, true);
                bool         wasFlipped = (flip != null);

                // If flipped make this update
                if (wasFlipped)
                {
                    flippedPiece = flip.GetOtherPiece(piece);
                    AddPoints(ref connected, IsConnected(flippedPiece.index, true));
                }

                // If match wasn't made
                if (connected.Count == 0)
                {
                    // If flipped
                    if (wasFlipped)
                    {
                        FlipPieces(piece.index, flippedPiece.index, false); // Flip pieces back
                    }
                }
                else // If match is made
                {
                    // Remove the node pieces that are connected
                    foreach (Point p in connected)
                    {
                        KillPiece(p);
                        Node      node      = GetNodeAtPoint(p);
                        NodePiece nodePiece = node.GetPiece();

                        if (nodePiece != null)
                        {
                            nodePiece.gameObject.SetActive(false);
                            dead.Add(nodePiece);
                        }

                        node.SetPiece(null);
                    }

                    audioSource.clip = audioClips[0];
                    audioSource.Play();

                    ApplyGravityToBoard();
                }

                // Remove the flip after update
                flipped.Remove(flip);
                update.Remove(piece);
            }
        }
    }
コード例 #17
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped && flipBackAfterWrongMove) // czy bez braku matcha ma zawracac na stare miejsce czy nie
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)    // jezeli nie ma spasowania
            {
                if (wasFlipped && flipBackAfterWrongMove)
                {
                    FlipPieces(piece.index, flippedPiece.index, false);
                }
            }
            else
            {                                    // jezeli jest spasowanie
                bool counter = true;
                foreach (Point pnt in connected) // Remove the node pieces connected
                {
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (counter == true)
                    {
                        PieceToSpawn = nodePiece;
                        counter      = false;
                    }


                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }

                //Debug.Log("usuwanie z match3");

                Spawnitem(PieceToSpawn);
                ApplyGravityToBoard();
                counter = true;
            }
            //Debug.Log("piece value"+PieceToSpawn.value);
            flipped.Remove(flip);
            update.Remove(piece);
        }
    }
コード例 #18
0
    private void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < _update.Count; i++)
        {
            NodePiece piece = _update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = GetFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = piece.index.x;
            _fills[x] = Mathf.Clamp(_fills[x] - 1, 0, Width);

            List <Point> connected = IsConnected(piece.index, true);

            bool wasFlipped = flip != null;
            if (wasFlipped)
            {
                flippedPiece = flip.GetOtherPiece(piece);
                AddPoints(ref connected, IsConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)
            {
                if (wasFlipped)
                {
                    FlipPieces(piece.index, flippedPiece.index, false);
                }
            }
            else
            {
                foreach (Point p in connected)
                {
                    KillPiece(p);
                    Node      node      = GetNodeAtPoint(p);
                    NodePiece nodePiece = node.GetPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        _dead.Add(nodePiece);
                        _score             += 10;
                        highScore          -= 10;
                        scoreText.text      = _score.ToString();
                        levelScoreText.text = "Ты набрал " + _score + " очков!";

                        if (highScore <= 0)
                        {
                            gameOverPanel.SetActive(true);
                        }
                    }

                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            _flipped.Remove(flip);
            _update.Remove(piece);
        }
    }
コード例 #19
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped)
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }

            if (connected.Count == 0)
            {
                if (wasFlipped)
                {
                    FlipPieces(piece.index, flippedPiece.index, false);
                }
            }
            else
            {
                if (connected.Count != 0 && connected.Count != 4)
                {
                    List <Point> killlist  = new List <Point>();
                    List <Point> bonuslist = new List <Point>();
                    foreach (Point p in connected)
                    {
                        killlist.Add(p);
                        Node      node      = GetNodeAtPoint(p);
                        NodePiece nodePiece = node.GetPiece();

                        if (nodePiece.isBonus())
                        {
                            Bonus.AddBonusPoints(height, width, nodePiece.BonusValue(), p, killlist, bonuslist);
                        }
                    }

                    foreach (Point p in killlist)
                    {
                        KillPiece(p);
                        Node      node      = GetNodeAtPoint(p);
                        NodePiece nodePiece = node.GetPiece();


                        if (nodePiece != null)
                        {
                            nodePiece.gameObject.SetActive(false);
                            dead.Add(nodePiece);
                        }
                        node.SetPiece(null);
                    }
                }

                if (connected.Count == 4)
                {
                    Node      bnode  = GetNodeAtPoint(connected[0]);
                    NodePiece bpiece = bnode.GetPiece();
                    bnode.SetPiece(bpiece);
                    bpiece.InitializeBonus(Random.Range(1, 4), bonuses);

                    for (int j = 1; j < connected.Count; j++)
                    {
                        KillPiece(connected[j]);
                        Node      node      = GetNodeAtPoint(connected[j]);
                        NodePiece nodePiece = node.GetPiece();
                        node.SetPiece(nodePiece);

                        if (nodePiece != null)
                        {
                            nodePiece.gameObject.SetActive(false);
                            dead.Add(nodePiece);
                        }
                        node.SetPiece(null);
                    }
                }
                ApplyGravityToBoard();
            }

            flipped.Remove(flip);
            update.Remove(piece);
        }
    }
コード例 #20
0
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) //If we flipped to make this update
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0)                                   //If we didn't made a match
            {
                if (wasFlipped)                                         //if we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //flip back
                }
            }
            else //If we made a match
            {
                foreach (Point pnt in connected)//Remove the node pieces connected
                {
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                        if (connected.Count <= 3)
                        {
                            Cash.CopperCoins    += (getValueAtPoint(pnt)); // We add the value of our nodes  as money to our cash counter.
                            Points.PointsAmount += (getValueAtPoint(pnt)); // We add the value of our nodes  as points to our xp counter.
                            Debug.Log("connected 3");
                        }
                        if (connected.Count == 4)
                        {
                            Cash.CopperCoins    += (getValueAtPoint(pnt) + 6); // We add the value of our nodes  as money to our cash counter.
                            Points.PointsAmount += (getValueAtPoint(pnt) * 2); // We add the value of our nodes  as points to our xp counter.
                            Debug.Log("Congratulations you connected 4");
                        }
                        if (connected.Count >= 5)
                        {
                            Cash.CopperCoins    += (getValueAtPoint(pnt) + 20); // We add the value of our nodes  as money to our cash counter.
                            Points.PointsAmount += (getValueAtPoint(pnt) * 3);  // We add the value of our nodes  as points to our xp counter.
                            Debug.Log("WOW AAAAAMAZING JOB You connected more than 5");
                        }
                    }
                    node.SetPiece(null);
                }

                ApplyGravityToBoard();
            }

            flipped.Remove(flip);//remove the flip after update
            update.Remove(piece);
        }
    }
コード例 #21
0
    // update is called once per frame
    private void Update()
    {
        List <NodePieces> finishedUpdating = new List <NodePieces>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePieces piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }

        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePieces    piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePieces    flippedPiece = null;
            int           x            = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);
            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);
            if (wasFlipped)
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true));
            }
            if (connected.Count == 0)                                   //If we didn't make a match
            {
                if (wasFlipped)                                         // If we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); //Flip back
                }
            }
            else //Being called if we made a match
            {
                combo.combo_count += 1;

                foreach (Point pnt in connected) //Remove the node pieces when connected
                {
                    KillPiece(pnt);
                    Node       node      = getNodeAtPoint(pnt);
                    NodePieces nodePiece = node.getPiece();
                    if (node.value == 3)
                    {
                        enemy.TakeDamage(5);
                    }
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        deadPieces.Add(nodePiece);
                    }

                    node.SetPiece(null);
                }

                BoardGravity();
            }
            flipped.Remove(flip); //remove the flip after update

            update.Remove(piece);
        }
    }
コード例 #22
0
ファイル: Match3.cs プロジェクト: FarzanZand/MatchThree
    // UPDATE once per frame
    void Update()
    {
        List <NodePiece> finishedUpdating = new List <NodePiece>();

        for (int i = 0; i < update.Count; i++)
        {
            NodePiece piece = update[i];
            if (!piece.UpdatePiece())
            {
                finishedUpdating.Add(piece);
            }
        }
        for (int i = 0; i < finishedUpdating.Count; i++)
        {
            NodePiece     piece        = finishedUpdating[i];
            FlippedPieces flip         = getFlipped(piece);
            NodePiece     flippedPiece = null;

            int x = (int)piece.index.x;
            fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

            List <Point> connected  = isConnected(piece.index, true);
            bool         wasFlipped = (flip != null);

            if (wasFlipped) // if we flipped, make this update
            {
                flippedPiece = flip.getOtherPiece(piece);
                AddPoints(ref connected, isConnected(flippedPiece.index, true)); // TODO figure out Ref
            }

            // The ref keyword in C# is used for passing or returning references of values to or from Methods.
            // Basically, it means that any change made to a value that is passed by reference will reflect
            // this change since you are modifying the value at the address and not just the value.
            // Basically, it changes the value outside of the method and not only within it. (Not for global variables)

            if (connected.Count == 0)                                   // if no match
            {
                if (wasFlipped)                                         // If we flipped
                {
                    FlipPieces(piece.index, flippedPiece.index, false); // flip back
                }
            }
            else // If we made a match
            {
                foreach (Point pnt in connected) // remove nodes connected
                {
                    KillPiece(pnt);
                    Node      node      = getNodeAtPoint(pnt);
                    NodePiece nodePiece = node.getPiece();
                    if (nodePiece != null)
                    {
                        nodePiece.gameObject.SetActive(false);
                        dead.Add(nodePiece);
                    }
                    node.SetPiece(null);
                }
                ApplyGravityToBoard();
            }
            flipped.Remove(flip); // Remove the flip after update
            update.Remove(piece);
        }
    }
コード例 #23
0
    //*******Aktív fázis*******

    //Változások kezelése
    void Update()
    {
        if (battleManager.GetBattleState() == BattleState.PlayerTurn)
        {
            //Mozgások szerint a pozíciók frissítése
            List <Piece> finishedUpdatingList = new List <Piece>();
            for (int i = 0; i < updatePieceList.Count; i++)
            {
                Piece piece = updatePieceList[i];
                if (!piece.UpdatePiece())
                {
                    finishedUpdatingList.Add(piece);
                }
            }
            for (int i = 0; i < finishedUpdatingList.Count; i++)
            {
                Piece         piece        = finishedUpdatingList[i];
                FlippedPieces flip         = GetFlipped(piece);
                Piece         flippedPiece = null;

                //Simább piece esés
                int x = (int)piece.positionInGrid.x;
                fills[x] = Mathf.Clamp(fills[x] - 1, 0, width);

                List <Point> listOfConnectedPoints = IsConnected(piece.positionInGrid, true);
                bool         wasFlipped            = (flip != null);

                //Ha volt flip az update előtt megnézzük, hogy lett-e match
                if (wasFlipped)
                {
                    flippedPiece = flip.GetOtherPiece(piece);
                    IncludePoints(ref listOfConnectedPoints, IsConnected(flippedPiece.positionInGrid, true));
                }
                //Ha nem lett match
                if (listOfConnectedPoints.Count == 0)
                {
                    if (wasFlipped) //Visszacsinaljuk a flippet
                    {
                        FlipPieces(piece.positionInGrid, flippedPiece.positionInGrid, false);
                    }
                }
                //Ha match lett
                else
                {
                    //Eltávolítja a listában szereplő pontokat
                    foreach (Point pointInConnection in listOfConnectedPoints)
                    {
                        GridCell cell      = GetCellAtPoint(pointInConnection);
                        Piece    tempPiece = cell.GetPieceFromCell();

                        if (tempPiece != null)
                        {
                            tempPiece.gameObject.SetActive(false);
                            usedPieceList.Add(tempPiece);

                            //Növeljük az adott típus counterét
                            ScoreController.IncreasePoints(tempPiece.typeValue - 1);
                            battleManager.Attack(tempPiece.typeValue - 1);
                        }


                        //Kinullázzuk az adott cellához tartozó piece-t
                        cell.AddPieceToCell(null);
                        //Lyuk keletkezett, szóval hívjuk a gravitációt
                        ApplyGravityToColumn(cell.positionOfCell.x);
                    }
                    battleManager.ChangeTurn();
                }
                //Eltakarítjuk a pontokat mikor már végeztünk velük
                flippedPieceList.Remove(flip);
                updatePieceList.Remove(piece);
            }
        }

        else if (battleManager.GetBattleState() == BattleState.EnemyTurn)
        {
            int random = UnityEngine.Random.Range(1, 3);
            for (int i = 0; i < random; i++)
            {
                battleManager.Attack();
            }
            battleManager.ChangeTurn();
        }
    }