A bot used for https://code-your-snake.codingmaster398.repl.co/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.8 KiB
79 lines
1.8 KiB
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Convert the `map` files into json
|
|
*
|
|
* All maps begin with the lines:
|
|
*
|
|
* type octile
|
|
* height x
|
|
* width y
|
|
* map
|
|
*
|
|
* where x and y are the repsective height and width of the map.
|
|
*
|
|
* The map data is store as an ASCII grid. The following characters are possible:
|
|
*
|
|
* . - passable terrain
|
|
* G - passable terrain
|
|
* @ - out of bounds
|
|
* O - out of bounds
|
|
* T - trees (unpassable)
|
|
* S - swamp (passable from regular terrain)
|
|
* W - water (traversable, but not passable from terrain)
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* Implementation note:
|
|
* For convenience, only '.' and 'G' are interpreted as walkable.
|
|
*/
|
|
|
|
var fs = require('fs');
|
|
var endOfLine = require('os').EOL;
|
|
|
|
function parse(filename) {
|
|
var content = fs.readFileSync(filename).toString();
|
|
var lines = content.split(endOfLine);
|
|
return {
|
|
height : parseInt(lines[1].split(' ')[1]),
|
|
width : parseInt(lines[2].split(' ')[1]),
|
|
grid : parseGrid(lines.slice(4)),
|
|
};
|
|
}
|
|
exports.parse = parse;
|
|
|
|
function parseGrid(lines) {
|
|
var grid = [];
|
|
lines.forEach(function(line) {
|
|
if (!line.length) {
|
|
return;
|
|
}
|
|
var row = [];
|
|
line.split('').forEach(function(char) {
|
|
row.push(char in { '.': 1, 'G': 1 } ? 0 : 1);
|
|
});
|
|
grid.push(row);
|
|
});
|
|
return grid;
|
|
}
|
|
|
|
function splitext(filename) {
|
|
var index = filename.lastIndexOf('.');
|
|
if (index < 0) {
|
|
return [filename, ''];
|
|
} else {
|
|
return [filename.substr(0, index), filename.substr(index)];
|
|
}
|
|
}
|
|
|
|
function main(argv) {
|
|
var filename = argv[2];
|
|
var obj = parse(filename);
|
|
var root = splitext(filename)[0];
|
|
fs.writeFileSync(root + '.json', JSON.stringify(obj));
|
|
}
|
|
|
|
if (!module.parent) {
|
|
main(process.argv);
|
|
}
|
|
|