all repos — uStrat @ 633bd8d5719c999e92bbc71ccfb9f93d96a76c63

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

took a stab at AI movement path generation
Iris Lightshard nilix@nilfm.cc
PGP Signature
-----BEGIN PGP SIGNATURE-----

iQJDBAABCAAtFiEEkFh6dA+k/6CXFXU4O3+8IhROY5gFAl1F/38PHG5pbGl4QG5p
bGZtLmNjAAoJEDt/vCIUTmOYLhQP/10cZ+zaBvRiN7oHfNypX/HUOt+ZUlXUJUyQ
6PQ+gKy/sxTetqm3SVhvfX6DaNslxfr7kSe4hJBvsa3o6fzlNTEDKoMJLl2fVXEr
z4/Kdl+OXg/yYwSjAE7lN4mGgF38st5fL7rdBjjzv9FG/AWaiQk0SA1IkW3Cw1WD
tyWnLIhVZO3ovXUXF5wfAMY1HA5QuvHjnvRE0sLF6xotIn0lqaYb6Q231AEyeAQ7
c0mGa62/ZMwqO2jTk/f80AnLpQ2NBBD6viR6vDNstoEuUv0fo2RqYLvSZ5dX8g7m
nRt+PPyg2s6Ozs23JFCZ6CVCU19MOQ9SEVAF0tAyCdOkRqExEaSx2wTuEHo2uXjS
gjeVAhwhaLNjSfE1bDPMbvSpVTWxpnhKMv6g9qlce1ramkRYk/svxzl33E6YDJ0u
xghKZ4QBxJcpFiujRXMLHj2Hdy5RQuDGbA2xGL1zjo87oz3CLA5TxBc8oQFP5IM7
omJBaNO7/uhjO/HSeXWc/OiLC3WIg0u6Dxx/Qdhwh8s7Jn/+jn/naEleviLm0piq
OadIk4yK9s48UkIc9xWLaSbWtqNTgQYo+u9QUByDrXGeqA6jR0S7mZW821pALWbX
pZvypFbvbBX3MbEv2XAWt7jrXRFL8MENQooCdnkeRIAO1tMz+O+RE1Z3lwN6OqOj
rejQG+Vk
=kXtD
-----END PGP SIGNATURE-----
commit

633bd8d5719c999e92bbc71ccfb9f93d96a76c63

parent

e626a1251b56cb0abbb3043031ba813cd10c475a

1 files changed, 105 insertions(+), 11 deletions(-)

jump to
M AI.jsAI.js

@@ -1,8 +1,9 @@

AI = {}; -AI.threats = {}; -AI.morale = {}; -AI.losses = 0; -AI.priorities = new Array(); +AI.animCounter = 0; +AI.fCounter = 0; +AI.Q = {} +AI.moveOptions = new Array(4); +AI.focus = {}; AI.rand = function(i)

@@ -15,9 +16,8 @@ {

self.target = target; } -AI.getBearingOfTarget = function(self) +AI.getBearing = function(self, target) { - var target = self.target; var w, z, d; var bearing = ""; w = self.x - target.x;

@@ -42,9 +42,105 @@ }

return bearing; } -AI.chainPath = function(self) +AI.oppositeDir = function(d) { - switch + switch (d) + { + case "n": + return "s"; + case "s": + return "n"; + case "e": + return "w"; + case "w": + return "e"; + case "": + return ""; + } +} + + +AI.generatePath = function(u) +{ + movement.init(u); + console.log("AI movement init"); + var i, j, k, b, w, x, y, z, q, last; + z = "nsew"; + last = ""; + console.log(" trial run " + i); + for (;;) + { + b = getBearing(movement.chain[movement.chain.length -1], movement.unit.target); + do { + console.log(" trying to go directly to target"); + j = AI.rand(b.length()); + k = b[j]; + x = movement.chain[movement.chain.length - 1].x; + y = movement.chain[movement.chain.length - 1].y; + } while (k == AI.oppositeDir(last)); + switch (k) + { + case 'n': + w = map.data[x][y + 1]; + break; + case 's': + w = map.data[x][y - 1]; + break; + case 'e': + w = map.data[x + 1][y]; + break; + case 'w': + w = map.data[x - 1][y]; + break; + } + while (w.agiMod + 1 >= 2*Math.sqrt(dist(movement.chain[movement.chain.length - 1], movement.unit.target || !isEmptyObject(w.unit)) + { + console.log(" going directly to target not ideal"); + do + { + console.log(" trying to go another way"); + q = z[rand(4)]; + } while (q == k || q == AI.oppositeDir(last)); + switch (q) + { + case 'n': + w = map.data[x][y + 1]; + break; + case 's': + w = map.data[x][y - 1]; + break; + case 'e': + w = map.data[x + 1][y]; + break; + case 'w': + w = map.data[x - 1][y]; + break; + } + } + if (q != "") + { last = q; + q = ""; + } + else { last = k; } + if (movement.unit.name == "cpu BattleAngel") + { + if (movement.pool >= 1) + { + movement.pool -= 1; + movement.chain.push(new Coords(w.x, w.y)); + } + else return; + } + else + { + if (movement.pool >= w.agiMod + 1) + { + movement.pool -= w.agiMod + 1; + movement.chain.push(new Coords(w.x, w.y)); + } + else return; + } + } } AI.countStructs = function(str)

@@ -318,10 +414,8 @@ }

} } -AI.animCounter = 0; -AI.fCounter = 0; + AI.actions = [ AI.cycleThruFactories, AI.buildStruct, AI.cycleThruFactories ]; -AI.Q = {} AI.animLoop = function() {