Add javascript bot
This commit is contained in:
parent
9a33ad42fc
commit
51712bf07e
1 changed files with 81 additions and 0 deletions
81
client/simple.js
Normal file
81
client/simple.js
Normal file
|
@ -0,0 +1,81 @@
|
|||
const fs = require('fs')
|
||||
const readline = require('readline');
|
||||
const rl = readline.createInterface({input: process.stdin, output: process.stdout});
|
||||
|
||||
const MY_PLAYER_NUMBER = 1
|
||||
|
||||
function move(moves) {
|
||||
let record = {'moves': moves}
|
||||
console.error(JSON.stringify(record))
|
||||
console.log(JSON.stringify(record))
|
||||
}
|
||||
|
||||
function find_max_with_key(array, key) {
|
||||
return array.reduce((item1, item2) => {
|
||||
let val1 = item1[key];
|
||||
let val2 = item2[key];
|
||||
return (val1 > val2 ? item1 : item2);
|
||||
});
|
||||
}
|
||||
|
||||
function find_min_with_key(array, key) {
|
||||
return array.reduce((item1, item2) => {
|
||||
let val1 = item1[key];
|
||||
let val2 = item2[key];
|
||||
return (val1 < val2 ? item1 : item2);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* De main code van de bot
|
||||
*/
|
||||
function run_bot(state) {
|
||||
// Maak een lijst van mijn eigen planeten
|
||||
let my_planets = state["planets"].filter((planet) => {
|
||||
return planet['owner'] === MY_PLAYER_NUMBER
|
||||
})
|
||||
|
||||
// Maak een lijst van de planeten van de tegenstander
|
||||
let other_planets = state["planets"].filter((planet) => {
|
||||
return planet['owner'] !== MY_PLAYER_NUMBER
|
||||
})
|
||||
|
||||
if (my_planets.length === 0 || other_planets.length === 0) {
|
||||
// Als er al een speler dood is moet ik niets meer doen
|
||||
move([])
|
||||
} else {
|
||||
// Stuur alle schepen behalve 1 van mijn planeet met meeste schepen
|
||||
// naar die van de andere speler met zijn minste schepen
|
||||
let planet = find_max_with_key(my_planets, 'ship_count');
|
||||
let dest = find_min_with_key(other_planets, 'ship_count');
|
||||
|
||||
if (planet !== undefined && dest !== undefined) {
|
||||
move([{
|
||||
'origin': planet['name'],
|
||||
'destination': dest['name'],
|
||||
'ship_count': planet['ship_count'] - 1
|
||||
}])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function main() {
|
||||
// Je kunt als 2de argument een file meegeven. De bot gaat deze dan gebruiken als input voor de ronde
|
||||
if (process.argv.length > 2) {
|
||||
try {
|
||||
const data = fs.readFileSync(process.argv[2], 'utf8')
|
||||
run_bot(JSON.parse(data))
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
}
|
||||
} else {
|
||||
// Anders gaan we stdin lezen
|
||||
rl.on('line', (data) => {
|
||||
run_bot(JSON.parse(data))
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
let _ = main();
|
||||
|
Loading…
Reference in a new issue