コード例 #1
0
 public override void DoProgress(BoardStat boardStat)
 {
     if (squaresNeedValue == boardStat.removedValue)
     {
         base.DoProgress(boardStat);
     }
     if (boardStat.minNumber > squaresNeedValue)
     {
         isImposible = true;
     }
 }
コード例 #2
0
    public void OnStepEnd(BoardStat boardStat)
    {
        Debug.Log(boardStat);
        if (boardStat.removedCount <= 1)
        {
            return;
        }

        if (boardStat.mode == BoardMode.NORMAL)
        {
            boardStat.score = UpdateScore(boardStat.removedCount * boardStat.removedValue);
        }

        bool targetsDone        = true;
        bool targetsIsImposible = false;

        foreach (var target in targets)
        {
            target.DoProgress(boardStat);
            if (!target.Done())
            {
                targetsDone = false;
            }
            if (target.IsImposible())
            {
                targetsIsImposible = true;
            }
        }
        game.DoProgress(boardStat);
        gameStat.score             = score;
        gameStat.resoursesUsedRate = game.ResoursesUsedRate();

        if (targetsDone)
        {
            OnWin();
        }

        if (targetsIsImposible)
        {
            OnGameOver(GameOverReason.targetImpossible);
        }

        if (!board.HasSteps())
        {
            OnGameOver(GameOverReason.noStepsOnBoard);
        }

        if (game.IsLoose())
        {
            OnGameOver(game.gameOverReason);
        }
    }
コード例 #3
0
    public override void DoProgress(BoardStat boardStat)
    {
        base.DoProgress(boardStat);

        if (boardStat.mode == BoardMode.NORMAL)
        {
            leftSteps -= 1;
        }
        if (boardStat.IsReleased())
        {
            leftSteps += stepsForRelease;
        }
        if (boardStat.removedCount >= bonusSquaresCount)
        {
            leftSteps += stepsForSquares * boardStat.removedCount / bonusSquaresCount;
        }
        isLoose = leftSteps <= 0;
    }
コード例 #4
0
 public override void DoProgress(BoardStat boardStat)
 {
     done = needMinValue <= boardStat.minNumber;
 }
コード例 #5
0
 public override void DoProgress(BoardStat boardStat)
 {
     squaresNumber += boardStat.removedCount;
     done           = squaresNumber >= squaresNeedNumber;
 }
コード例 #6
0
 public override void DoProgress(BoardStat boardStat)
 {
     done = needMinScore <= boardStat.score;
 }
コード例 #7
0
ファイル: Game.cs プロジェクト: ildan95/unity-numbers-game
 public virtual void DoProgress(BoardStat boardStat)
 {
 }
コード例 #8
0
    public void OnClick(int i, int j, int v)
    {
        if (mode == BoardMode.GAMEOVER)
        {
            return;
        }

        BoardStat boardStat    = new BoardStat(minNumber, maxNumber);
        int       removedCount = 0;

        if (mode == BoardMode.NORMAL)
        {
            Dictionary <int, Square> taken = new Dictionary <int, Square>();
            NearSameSquares(ref taken, i, j);
            removedCount = taken.Count;
            if (removedCount > 1)
            {
                int sum = Mathf.FloorToInt(Mathf.Log(removedCount, 2)) + v;
                foreach (KeyValuePair <int, Square> keyValue in taken)
                {
                    //Square s = keyValue.Value;
                    //s.DestroyAfterMoveTo(dest).ParallelCoroutinesGroup(this, "DestroyAfterMoveTo");

                    //StartCoroutine(s.DestroyAfterMoveTo(dest));
                    squares[keyValue.Key / countX, keyValue.Key % countX] = null;
                }
                CreateSquare(i, j, sum);
                CheckFree();
                CorrectMinMax();
                int[] shifting = CreateSquaresForFree();

                ActionAnimations(taken, i, j, shifting).ParallelCoroutinesGroup(this, "actionAnim" + actionAnimId + 1);
            }
        }
        else if (mode == BoardMode.X2)
        {
            removedCount = 1;
            DestroyImmediate(squares[i, j].gameObject);
            CreateSquare(i, j, v + 1);
            if (v + 1 > maxNumber)
            {
                maxNumber = v + 1;
            }
        }
        else if (mode == BoardMode.D2)
        {
            if (v != 1)
            {
                removedCount = 1;
                DestroyImmediate(squares[i, j].gameObject);
                CreateSquare(i, j, v - 1);
                if (v - 1 < minNumber)
                {
                    maxNumber = v - 1;
                }
            }
        }
        else if (mode == BoardMode.DEL)
        {
            removedCount = 1;
            DestroyImmediate(squares[i, j].gameObject);
            CheckFree();
            CorrectMinMax();
            CreateSquaresForFree();
        }

        boardStat.SetInfo(minNumber, maxNumber, v, removedCount, mode);
        mode = BoardMode.NORMAL;
        gameController.OnStepEnd(boardStat);
    }