Added a bit more advanced function for weighing height.

This commit is contained in:
Robert Kolner committed 2012-03-27 11:27:26 +02:00
1 parent df3d67a454
commit a29d150cb3
1 file changed
+27 -3
+27 -3
View File
@@ -6,7 +6,7 @@ var ACTION_DROP = 4;
var game;
function getAllPossibleDropLocations(brickId) {
var dropLocations = [[game.width/2,game.height+1,0]];
var dropLocations = [];
// Go as far down as possible:
var goDown = function(x, y, rot) {
@@ -63,17 +63,41 @@ function getBoundsOfABrick(brickId, brickLoc, brickRot) {
return [leftTop, rightTop];
}
function rankHeight(brickId, dropLocation) {
var shape = game.brickShape(brickId, dropLocation[2]);
// find the lowest point:
var lowest = shape[0][1] + dropLocation[1];
var highest = shape[0][1] + dropLocation[1];
for (var i = 1; i < 4; i++) {
lowest = Math.min(lowest, shape[i][1]+dropLocation[1]);
highest = Math.max(highest, shape[i][1]+dropLocation[1]);
}
// if highest is invalid, then return a very low rank:
if (highest >= game.height) {
return -1000;
}
return game.height - (Math.pow(lowest, 2) / game.height);
}
function chooseDropLocation(brickId) {
var dropLocations = getAllPossibleDropLocations(brickId);
var bestRank = 0;
var bestId = 0;
var bestId = -1;
for (var i = 0; i < dropLocations.length; i++) {
var rank = 0;
if (dropLocations[i][1] < dropLocations[bestId][1]) {
rank += rankHeight(brickId, dropLocations[i]);
/* Check if the rank is better than current best: */
if (bestId == -1 || rank > bestRank) {
bestId = i;
bestRank = rank;
}
}