int Solver::score(std::vector<Move> a) { int res = 0; for (int i = 1; i < (int) a.size(); i++) res+= getSpace(a, i) * 100; res+= floatingScore(a) * 1000; int unstableCounter = 0; std::vector<Block> c = std::vector<Block>(); for (int i = 0; i < (int) a.size(); i++) { if (a[i].left != Move::NO_BLOCK) c.push_back(blocks[a[i].left]); if (a[i].right != Move::NO_BLOCK) c.push_back(blocks[a[i].right]); if (!checkStability(c)) { if (a[i].mode == Move::TWO_HANDS) unstableCounter++; unstableCounter++; } } res+= unstableCounter * 1000; for (int i = 0; i < (int) a.size(); i++) { if (a[i].mode == Move::TWO_HANDS) { res+= 5; if (blocks[a[i].left].isOn(blocks[a[i].right]) || blocks[a[i].right].isOn(blocks[a[i].left])) res+= 1000; if (blocks[a[i].right].x < blocks[a[i].left].x) { res+= 1000; } } } int counter = 0; for (int i = 0; i < (int) a.size(); i++) { if (a[i].left != Move::NO_BLOCK) counter++; if (a[i].right != Move::NO_BLOCK) counter--; } counter = counter < 0 ? -counter : counter; res+= counter * 5; return -res; }
void Text::floatingScore(int x, int y, int score) { int size = 1; int divisor = 1; while (score / (10 * divisor) != 0) { divisor *= 10; size++; } int temp = score; char *charScore = new char[size + 1]; for (int i = 0; i < size; i++) { charScore[i] = (char)(temp / divisor) + 48; if (temp / divisor != 0) temp %= divisor; divisor /= 10; } charScore[size] = '\0'; // end of array floatingScore(x, y, charScore); }