all repos — uStrat @ c79453a5975e719f85fb0edabc6af3a8fa4f2823

simple turn-based strategy game inspired by uCity, Super Robot Wars, C&C, Fire Emblem

AI can now search from HQ outward or map-edges inward for cell to build struct
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQJDBAABCAAtFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAl0RLggPHG5pbGl4QG5p
bGZtLmNjAAoJEDt/vCIUTmOYGvEP/2LkUJJ5am9AVbU2FpgJdhQSJI5kjAmaYBYY
SHF2Vj9bUMjt5a+REO3wop3KK4ZsFj5UQnL5NMyv0G3vbUlp7UaVlHcesXKjKvzm
cFzIeHWuw6ubCRHSgJdmfJWUBFPPxSOHjt12d4vW07nbyG82ydArr50UDAMBKSkB
mICGUQtgDpeBX42azVZL7Iw8I4NNUpfdLo4ckHni7cG/QakhorJ3abE6yJnN9cW9
S34ZCHR4LexLNcLO9GLZHNuja7ar1ACM9ERPkGdIQVyaaqigtCBeUIUndhRh5DCc
yyZ5RZKapKRhbFfcJv7QHKxLkOQSX3KXP1Ih/FM/DCyiMbIs/3HPeaQL43vVO/2w
k9JjuVbALo8W2w28EpICd3d3UP7+DjMAnt9sEFQp9LCMsYvRzw58WzKHKTvGzf0z
pfhYK4URfBlA71P4Hi0BQ53zbNVCi1G7AThwCzjA+f0Bk7J8vQgTEiJChpmI8xnc
PY5WhWBXzfCWCnzctdooFmccEKVnJWg0Vjsi8qeMl8fXz27LWNFwJQeKagt+o3P4
GauIXViUtrgsCo40hBvgjJQ0CRAuUi1myOPufMHMOmCGHk440CGhg9P3jeJ0qm4v
oemdqLqSyqpTPyIP7j79paedFTNlKY9lX53nQpY7CjA+u++knX15pj4b+7dv5asU
VvONxKc+
=PwrH
-----END PGP SIGNATURE-----
commit

c79453a5975e719f85fb0edabc6af3a8fa4f2823

parent

8aa2a016c00114dfdda8f5f94f8cf018af66dab0

1 files changed, 92 insertions(+), 4 deletions(-)

jump to
M AI.jsAI.js

@@ -10,6 +10,21 @@ {

return Math.floor(Math.random()*i); } +AI.countStructs = function(str) +{ + var i, l, n; + n = 0; + l = teams.cpu.structs.length + for (i = 0; i < l; i++) + { + if (teams.cpu.structs[i].name == str) + { + n++; + } + } + return n; +} + AI.getMorale = function() { var x, y, z;

@@ -47,7 +62,67 @@ }

} } -AI.findNewStruct = function() +AI.findNewStructClose = function() +{ + var origin = {}; + origin.x = teams.cpu.structs[0].x; + origin.y = teams.cpu.structs[0].y; + var i, j, w; + w = AI.rand(4); + switch (w) + { + case 0: + for (i = 0; i < 64; i++) + { + for (j = origin.y; j < 64; j++) + { + if (dist(origin, map.data[i][j]) < teams.cpu.energy/15 && isEmptyObject(map.data[i][j].structure)) + { + return map.data[i][j]; + } + } + } + break; + case 1: + for (i = 63; i >= 0; i--) + { + for (j = origin.y; j >= 0; j--) + { + if (dist(origin, map.data[i][j]) < teams.cpu.energy/15 && isEmptyObject(map.data[i][j].structure)) + { + return map.data[i][j]; + } + } + } + break; + case 2: + for (i = origin.x; i < 64; i++) + { + for (j = 0; j < 64; j++) + { + if (dist(origin, map.data[i][j]) < teams.cpu.energy/15 && isEmptyObject(map.data[i][j].structure)) + { + return map.data[i][j]; + } + } + } + break; + case 3: + for (i = origin.x; i >= 0; i--) + { + for (j = 63; j >= 0; j--) + { + if (dist(origin, map.data[i][j]) < teams.cpu.energy/15 && isEmptyObject(map.data[i][j].structure)) + { + return map.data[i][j]; + } + } + } + break; + } +} + +AI.findNewStructFar = function() { var origin = {}; origin.x = teams.cpu.structs[0].x;

@@ -109,7 +184,17 @@ }

AI.buildStruct = function() { - var cell = AI.findNewStruct(); + var z = AI.rand(2); + var cell = AI.findNewStructClose(); + switch (z) + { + case 0: + cell = AI.findNewStructClose(); + break; + case 1: + cell = AI.findNewStructFar(); + break; + } mapCursor.x = cell.x; mapCursor.y = cell.y; switch (cell.type)

@@ -122,7 +207,7 @@ if (teams.cpu.energy >= 40)

{ if (AI.rand(4) < 2) { - if (AI.rand(4) < 3) + if (AI.countStructs("cpu factory") <= AI.countStructs("cpu armory")) { buildFactory(); }

@@ -162,7 +247,10 @@ if (s.name == "cpu factory")

{ mapCursor.x = s.x; mapCursor.y = s.y; - AI.buildUnits(); + if (isEmptyObject(map.data[s.x][s.y].unit)) + { + AI.buildUnits(); + } } } }