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++; }
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++; }
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); }