Skip to content
Snippets Groups Projects
Commit 5bfc21f4 authored by mcmlxxix's avatar mcmlxxix
Browse files

AI players can now forfeit in a sure-loss situation

organized AI attack functions
parent d204b461
No related branches found
No related tags found
No related merge requests found
load("funclib.js");
var game_number=argv[0]; var game_number=argv[0];
var game_dir=argv[1]; var game_dir=argv[1];
load(game_dir+"maps.js"); load(game_dir+"maps.js");
...@@ -203,10 +202,23 @@ function singleAttackQuantity(tlen) ...@@ -203,10 +202,23 @@ function singleAttackQuantity(tlen)
} }
/* Attack functions */ /* Attack functions */
function takeTurn() function main()
{
while(map.players[map.turn].AI && map.in_progress) {
takeTurn();
if(countActivePlayers(map)==2 && countTiles(map,map.turn)<map.tiles.length*.4) {
forfeit();
} else {
reinforce();
updateStatus(map);
nextTurn(map);
}
game_data.saveData(map);
}
}
function attack()
{ {
var computer=map.players[map.turn]; var computer=map.players[map.turn];
debug("computer taking turn: " + computer.name);
var territories=getPlayerTiles(map,map.turn); var territories=getPlayerTiles(map,map.turn);
var attacks=[]; var attacks=[];
...@@ -256,12 +268,17 @@ function takeTurn() ...@@ -256,12 +268,17 @@ function takeTurn()
var roll=random(6)+1; var roll=random(6)+1;
d.roll(roll); d.roll(roll);
} }
var data=new Data("battle"); var data=new Packet("battle");
data.a=a; data.a=a;
data.d=d; data.d=d;
stream.send(data); stream.send(data);
if(a.total>d.total) { if(a.total>d.total) {
if(countTiles(map,defending.owner)==1) {
players.scoreKill(map.players[attacking.owner].name);
players.scoreLoss(map.players[defending.owner].name);
map.players[defending.owner].active=false;
}
defending.assign(attacking.owner,attacking.dice-1); defending.assign(attacking.owner,attacking.dice-1);
} }
attacking.dice=1; attacking.dice=1;
...@@ -275,15 +292,36 @@ function takeTurn() ...@@ -275,15 +292,36 @@ function takeTurn()
computer.AI.turns++; computer.AI.turns++;
return true; return true;
} }
function takeTurn()
{
while(map.in_progress) {
if(!attack()) break;
updateStatus(map);
mswait(500);
}
}
function forfeit()
{
map.in_progress=false;
map.players[map.turn].active=false;
var data=new Packet("activity");
data.activity=("\1n\1y" + map.players[map.turn].name + " forfeits");
stream.send(data);
players.scoreLoss(map.players[map.turn].name);
}
function reinforce() function reinforce()
{ {
var player_tiles=getPlayerTiles(map,map.turn); var player_tiles=getPlayerTiles(map,map.turn);
var reinforcements=countConnected(map,player_tiles,map.turn); var reinforcements=countConnected(map,player_tiles,map.turn);
var placed=placeReinforcements(map,player_tiles,reinforcements); var placed=placeReinforcements(map,player_tiles,reinforcements);
var reserved=placeReserves(map,reinforcements-placed.length); var total=0;
var data=new Data("activity"); for(var p in placed) {
if(placed.length>0) { total+=placed[p];
data.activity=("\1n\1y" + map.players[map.turn].name + " placed " + placed.length + " dice"); }
var reserved=placeReserves(map,reinforcements-total);
var data=new Packet("activity");
if(total>0) {
data.activity=("\1n\1y" + map.players[map.turn].name + " placed " + total + " dice");
stream.send(data); stream.send(data);
} }
if(reserved>0) { if(reserved>0) {
...@@ -292,16 +330,4 @@ function reinforce() ...@@ -292,16 +330,4 @@ function reinforce()
} }
} }
while(map.players[map.turn].AI && map.in_progress) { main();
while(1) { \ No newline at end of file
if(!takeTurn()) {
updateStatus(map);
break;
}
updateStatus(map);
}
reinforce();
nextTurn(map);
map.attacking=map.turn;
game_data.saveData(map);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment