Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}