コード例 #1
0
ファイル: FormulaFactory.cs プロジェクト: dqtoy/MathBucket
    //deprecated
    private int applyOperand(MathBall.eOperator operand, int inputA, int inputB)
    {
        int resultC = 0;

        switch (operand)
        {
        case MathBall.eOperator.Plus:
            resultC = inputA + inputB;
            break;

        case MathBall.eOperator.Minus:
            resultC = inputA - inputB;
            break;

        case MathBall.eOperator.Multiply:
            resultC = inputA * inputB;
            break;

        case MathBall.eOperator.Divide:
            resultC = inputA / inputB;
            break;

        case MathBall.eOperator.Power:
            resultC = inputA ^ inputB;
            break;

        case MathBall.eOperator.Modulus:
            resultC = inputA % inputB;
            break;
        }

        return(resultC);
    }
コード例 #2
0
ファイル: CentralCalculator.cs プロジェクト: dqtoy/MathBucket
    public bool AnalyseCalcTokenList()
    {
        //Debug.Log ("AnalyseCalcTokenList");
        bool result = false;

        //equation
        int eix = 0;

        int[] equation = new int[128];

        //fill equation
        int nix = 0;

        string[] numberStrings = new string[32];

        int       _index  = 0;
        string    _key    = "k" + _index;
        CalcToken _ctoken = GetCalcToken(_key);

        int pMode = 0;

        while (_ctoken != null)
        {
            MathBall.eFunction _function = _ctoken.function;
            int _value = _ctoken.value;

            if (_function == MathBall.eFunction.Digit)
            {
                numberStrings [nix] += _value.ToString();
                pMode = 1;
            }
            else if (_function == MathBall.eFunction.Operand)
            {
                if (pMode == 1)
                {
                    equation [eix] = Int32.Parse(numberStrings [nix]);
                    eix++;
                    nix++;
                    pMode = 0;
                }
                else
                {
                    //Debug.Log ("Setting errorResult in loop...");
                    errorResult = 1;
                    return(result);
                }

                equation [eix++] = (int)_value;
            }

            //get next
            _index++;
            _key    = "k" + _index;
            _ctoken = GetCalcToken(_key);
            if (_ctoken == null)
            {
                if (pMode == 1)
                {
                    equation [eix] = Int32.Parse(numberStrings [nix]);
                    eix++;
                }
            }
        }

        //evaluate the equation
        bool bothSides = false;
        int  count     = eix;
        int  leftSide  = 0;
        int  rightSide = 9999;
        int  score     = 0;

        int idx = 0;

        MathBall.eOperator currentOp = MathBall.eOperator.Plus;

        int value = equation [idx];

        idx++;
        while (idx < count)
        {
            if (idx % 2 == 0)
            {
                //number
                switch (currentOp)
                {
                case MathBall.eOperator.Plus:
                    value += equation [idx];
                    score += 4;
                    break;

                case MathBall.eOperator.Minus:
                    value -= equation [idx];
                    score += 6;
                    break;

                case MathBall.eOperator.Multiply:
                    value *= equation [idx];
                    score += 8;
                    break;

                case MathBall.eOperator.Divide:
                    value /= equation [idx];
                    score += 10;
                    break;

                case MathBall.eOperator.Power:
                    value  = (int)Math.Pow(value, equation [idx]);
                    score += 12;
                    break;

                case MathBall.eOperator.Modulus:
                    value %= equation [idx];
                    score += 14;
                    break;
                }
            }
            else
            {
                //operand
                currentOp = (MathBall.eOperator)equation[idx];

                if (currentOp == MathBall.eOperator.Equals)
                {
                    if (bothSides == false)
                    {
                        leftSide = value;

                        idx++;
                        if (idx < count)                       //advance to right side if there is data there
                        {
                            value     = equation [idx];
                            bothSides = true;
                        }
                    }
                }
            }

            idx++;
        }

        if (bothSides == true)
        {
            rightSide = value;
        }

        //Debug.Log ("leftSide="+leftSide+":rightSide="+rightSide);

        if (bothSides == true && leftSide == rightSide)
        {
            result = true;
        }

        _calcScore = score;

        return(result);
    }