battleships-1.0.0: templates/placeships.julius
var cellSize = 40;
var nx = #{toJSON $ fst boardSize};
var ny = #{toJSON $ snd boardSize};
var map;
var safetyMargin = 1;
var shipDef = ShipDef.fromList(#{toJSON fleetShips});
var shipLenTD = {};
$(window).load(function() {
// setup canvas
var mapElem = document.getElementById("map");
map = new Map(mapElem, nx, ny, cellSize, shipDef);
map.safetyMargin = 1;
map.shipDef.onChanged.add(shipDefChanged);
// setup buttons
$("#btnReset").click(function() {
map.reset();
});
$("#btnRandom").click(function() {
placeRandom();
});
// setup table
for (var i = 0; i < shipDef.shipTypes.length; i++) {
var len = shipDef.shipTypes[i];
var td1 = $(document.createElement('td'));
var td2 = $(document.createElement('td'));
var tr = $(document.createElement('tr'));
td1.text(len);
td2.text(shipDef.shipCount(len));
shipLenTD[len] = td2;
tr.append(td1);
tr.append(td2);
$('#status tbody').append(tr);
};
shipDefChanged();
});
function placeRandom() {
$.ajax({
url: "@{PlaceShipsRndR}",
type: "POST",
dataType: "json",
data: { fleetData: JSON.stringify(map.ships) }
}).done(function(shipData) {
if (0 == shipData.length) {
alert(#{toJSON $ messageRender MsgNoPossiblePlacement});
return;
}
map.reset();
// Extract relevant data (x,y,size, orientation) from the fleet
for(var i = 0; i < shipData.length; i++) {
var ship = new Ship (
shipData[i].X,
shipData[i].Y,
shipData[i].Size,
shipData[i].Orientation);
map.ships.push(ship);
map.shipDef.takeShip(ship.Size);
}
// Fill in the form so we can use the fleet in the game, then update screen:
$("#fleetData").val(JSON.stringify(map.ships));
shipDefChanged();
map.redraw();
});
}
function shipDefChanged() {
for(var i = 0; i < shipDef.shipTypes.length; i++) {
var len = shipDef.shipTypes[i];
shipLenTD[len].text(shipDef.shipCount(len));
}
var total = shipDef.total();
$("#tdTotalShips").text(total);
if(total == 0) {
var jsonShips = JSON.stringify(map.ships);
$("#fleetData").val(jsonShips);
$("#btnSubmit").attr('disabled' , false);
} else {
$("#btnSubmit").attr('disabled' , true);
}
}