Skip to content

Commit

Permalink
cut dependency between business objects and generators
Browse files Browse the repository at this point in the history
  • Loading branch information
prevostc committed Jan 10, 2015
1 parent 63deff4 commit 9e09a5c
Show file tree
Hide file tree
Showing 9 changed files with 345 additions and 378 deletions.
4 changes: 4 additions & 0 deletions www/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
<script src="js/catan/js/tools.js"></script>
<script src="js/catan/js/ui.js"></script>
<script src="js/catan/js/position.js"></script>
<script src="js/catan/js/generator/generator.js"></script>
<script src="js/catan/js/generator/generator.land.js"></script>
<script src="js/catan/js/generator/generator.number.js"></script>
<script src="js/catan/js/generator/generator.harbor.js"></script>

<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
Expand Down
21 changes: 0 additions & 21 deletions www/js/catan/js/catan.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,5 @@ Catan = (function () {
}
};


Catan.generateMap = function (canvas, tileTrioScoreLimit) {
tileTrioScoreLimit = tileTrioScoreLimit || 12;

var lands, res, map;

do {
map = new Catan.Map(7, 7, new Catan.Position(3, 3));
do {
lands = map.generateLands();
} while (lands.length > 0);

res = map.generateNumbers(tileTrioScoreLimit);
} while (!res);

map.generateHarbors();

Catan.UI.drawMap(map, canvas);
return map;
};

return Catan;
})();
78 changes: 78 additions & 0 deletions www/js/catan/js/generator/generator.harbor.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
(function(Catan) {

Catan.Generator.Harbor = {};

Catan.Generator.Harbor.generate = function (map) {
var mod = Math.round(Math.random());
var n = 0;

// create harbors
var landHarbors = [
Catan.T.Hills, Catan.T.Forest,
Catan.T.Fields, Catan.T.Mountains, Catan.T.Pasture
];
Catan.Tools.shuffle(landHarbors);
var empties = [Catan.T.Empty, Catan.T.Empty, Catan.T.Empty, Catan.T.Empty];
var harbors = [];
for (var i = empties.length; i > 0; --i) {
harbors.push(landHarbors.pop());
harbors.push(empties.pop());
}
harbors.push(landHarbors.pop());
Catan.Tools.rotate(harbors, (Catan.Tools.randInterval(0, harbors.length - 1)));

var harborCoords = [];

// put harbors on map and index
map.eachCoast(function (i, j) {
// set oceans and harboors
if (n++ % 2 != mod) {
map.get(i, j).land = Catan.T.Ocean;
} else {
map.get(i, j).land = Catan.T.Harbor;
map.get(i, j).circle = harbors.pop();

if (map.get(i, j).circle != Catan.T.Empty) {
harborCoords.push(new Catan.Position(i, j));
}
}
});

var lands = [
Catan.T.Hills,
Catan.T.Pasture,
Catan.T.Mountains,
Catan.T.Fields,
Catan.T.Forest,
Catan.T.Desert
];

// swap harbors
var swapped = true;
for (var limit = 0; swapped && limit < 30; limit++) {
swapped = false;
Catan.Tools.shuffle(harborCoords);
for (var h = 0; h < harborCoords.length; h++) {
var currentHarbor = map.get(harborCoords[h].column, harborCoords[h].line);
var allowedLands = lands;
allowedLands = map.getAllowedLands(harborCoords[h].column, harborCoords[h].line, allowedLands);

if (!Catan.Tools.contains(allowedLands, currentHarbor.circle)) {
// find a place to go
for (var hh = 0; hh < harborCoords.length; hh++) {
allowedLands = lands;
allowedLands = map.getAllowedLands(harborCoords[hh].column, harborCoords[hh].line, allowedLands);
if (Catan.Tools.contains(allowedLands, currentHarbor.circle)) {
// do swap
var swapHarbor = map.get(harborCoords[hh].column, harborCoords[hh].line);
var cTmp = swapHarbor.circle;
swapHarbor.circle = currentHarbor.circle;
currentHarbor.circle = cTmp;
swapped = true;
}
}
}
}
}
};
})(Catan);
21 changes: 21 additions & 0 deletions www/js/catan/js/generator/generator.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,25 @@

Catan.Generator = {};

Catan.Generator.Map = {};

Catan.Generator.Map.generate = function (tileTrioScoreLimit) {
tileTrioScoreLimit = tileTrioScoreLimit || 12;

var lands, res, map;

do {
map = new Catan.Map(7, 7, new Catan.Position(3, 3));
do {
lands = Catan.Generator.Land.generate(map);
} while (lands.length > 0);

res = Catan.Generator.Number.generate(map, tileTrioScoreLimit);
} while (!res);

Catan.Generator.Harbor.generate(map);

return map;
};

})(Catan);
92 changes: 79 additions & 13 deletions www/js/catan/js/generator/generator.land.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,89 @@

Catan.Generator.Land = {};

Catan.Generator.Land.generate = function (canvas, tileTrioScoreLimit) {
tileTrioScoreLimit = tileTrioScoreLimit || 12;
Catan.Generator.Land.generate = function (map) {
var allowedLands;
// init map with random lands
var lands = [
Catan.T.Hills, Catan.T.Hills, Catan.T.Hills,
Catan.T.Pasture, Catan.T.Pasture, Catan.T.Pasture, Catan.T.Pasture,
Catan.T.Mountains, Catan.T.Mountains, Catan.T.Mountains,
Catan.T.Fields, Catan.T.Fields, Catan.T.Fields, Catan.T.Fields,
Catan.T.Forest, Catan.T.Forest, Catan.T.Forest, Catan.T.Forest,
Catan.T.Desert
];

var lands, res, map;
Catan.Tools.shuffle(lands);
map.each(function (i, j) {
map.get(i, j).land = lands.pop();
});

do {
map = new Catan.Map(7, 7, new Catan.Position(3, 3));
do {
lands = map.generateLands();
} while (lands.length > 0);
// unset same lands neighbours
var emptySpots = [];
map.each(function (i, j) {
var a;
var b;
map.eachConsecutiveNeighbour(i, j, function (a, b) {
return (a.land == b.land && a.land != Catan.T.Empty && a.land !== undefined);
}, function (ax, ay, bx, by) {
a = map.get(ax, ay);
b = map.get(bx, by);
lands.push(a.land);
a.land = undefined;
emptySpots.push(a.position);
});
});

res = map.generateNumbers(tileTrioScoreLimit);
} while (!res);
// repush as much lands as possible
var newEmptySpots = [];
Catan.Tools.shuffle(emptySpots);
Catan.Tools.shuffle(lands);

map.generateHarbors();
for (var i = 0; i < emptySpots.length; ++i) {
allowedLands = map.getAllowedLands(emptySpots[i].column, emptySpots[i].line, lands);

Catan.UI.drawMap(map, canvas);
return map;
if (allowedLands.length > 0) {
map.get(emptySpots[i].column, emptySpots[i].line).land = allowedLands[0];
lands = Catan.Tools.removeOne(lands, allowedLands[0]);
} else {
newEmptySpots.push(emptySpots[i]);
}
}
emptySpots = newEmptySpots;

// swap as much as possible
var allLands;
var swapped = false;
var eachSwapFunction = function (i, j) {
if (!swapped && !(i == ex && j == ey) && Catan.Tools.contains(allowedLands, map.get(i, j).land)) {
var currentAllowedLands = map.getAllowedLands(i, j, allLands);
for (var t = 0; t < lands.length && !swapped; t++) {
if (map.get(i, j).land != lands[t] && Catan.Tools.contains(currentAllowedLands, lands[t])) {
// set empty spot land to current.land
map.get(ex, ey).land = map.get(i, j).land;
// set current land to land[t]
map.get(i, j).land = lands[t];
// remove land[t] from land
lands = Catan.Tools.removeOne(lands, lands[t]);
// set item swapped
swapped = true;
}
}
}
};

for (var cur = 0; cur < emptySpots.length; ++cur) {
var ex = emptySpots[cur].column;
var ey = emptySpots[cur].line;
allLands = [Catan.T.Hills, Catan.T.Pasture, Catan.T.Mountains, Catan.T.Fields, Catan.T.Forest, Catan.T.Desert];
allowedLands = map.getAllowedLands(ex, ey, allLands);
// if smth is allowed
if (allowedLands.length > 0) {
swapped = false;
map.each(eachSwapFunction);
}
}

return lands;
};
})(Catan);
24 changes: 0 additions & 24 deletions www/js/catan/js/generator/generator.map.js

This file was deleted.

Loading

0 comments on commit 9e09a5c

Please sign in to comment.