/** * Checks if a combo exists in this numberList. * @param startIndex the index to check from * @param target the target to reach * @return true if combo exists, false otherwise. */ public bool CheckForComboAt(int startIndex, int target) { RefreshArray(); // SumList objects store a sum and the index they're found on. SumList sumListLeft = new SumList(), sumListRight = new SumList(); sumListLeft.Add(0, -1); sumListRight.Add(0, -1); /** * Disregard all the numbers that cannot be part of the combo and return * the shorter array with numbers that can. */ ShortList sl = FindShortList(startIndex, target); NumberNode[] shortList = sl.array; // Set the index to start counting from for counting towards // left and counting towards right. int leftStartIndex = sl.GetStartIndex(); int rightStartIndex = sl.GetStartIndex() + 1; // Create a temporary sum. int sum = 0; // Go over all numbers in the short list left of (and including) the start index for (int i = leftStartIndex; i > -1; i--) { // Increase the sum by the current value sum += shortList[i].value; // Store the sum and at what index in the shortList the sum occured sumListLeft.Add(sum, i); } // Reset the temporary sum. sum = 0; // Go over all numbers in the short list right of (and excluding) the start index for (int i = rightStartIndex; i < shortList.Length; i++) { // Increase the sum by the current value sum += shortList[i].value; // Store the sum and at what index in the shortList the sum occured sumListRight.Add(sum, i); } // For both sumlists... for (int sumListLeftIndex = 0; sumListLeftIndex < sumListLeft.sumList.Count; sumListLeftIndex++) { for (int sumListRightIndex = 0; sumListRightIndex < sumListRight.sumList.Count; sumListRightIndex++) { // Get the value of the currently selected sums added together int current_sum = sumListLeft.sumList[sumListLeftIndex] + sumListRight.sumList[sumListRightIndex]; if (current_sum == target) { // Found a combo! // Kill all nodes that make up this combination. for (int k = 0; k < sumListLeftIndex + 1; k++) { int index = sumListLeft.indexList[k]; if (index > -1) { shortList[index].Kill(); } } for (int k = 0; k < sumListRightIndex + 1; k++) { int index = sumListRight.indexList[k]; if (index > -1) { shortList[index].Kill(); } } return(true); } // If the combined sum is above it's target, no combo can be found, so // stop looking any further. else if (current_sum > target) { return(false); } } } return(false); }