예제 #1
0
    public void AddCalcToken(int value, MathBall.eFunction function)
    {
        CalcToken newToken = new CalcToken();

        newToken.key      = "k" + keyIndex;
        newToken.value    = value;
        newToken.function = function;

        //Debug.Log ("Token : key = " + newToken.key + " value = " + newToken.value.ToString() + " function = " + (MathBall.eFunction)newToken.function);

        CalcTokens.Add(newToken);

        keyIndex++;
    }
예제 #2
0
    public void AddCalcToken(int value, MathBall.eFunction function)
    {
        CalcToken newToken = new CalcToken ();

        newToken.key = "k"+keyIndex;
        newToken.value = value;
        newToken.function = function;

        //Debug.Log ("Token : key = " + newToken.key + " value = " + newToken.value.ToString() + " function = " + (MathBall.eFunction)newToken.function);

        CalcTokens.Add(newToken);

        keyIndex++;
    }
예제 #3
0
    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);
    }