#side Not Quite Wise #author Warren #date Started 11/29/02 #color 999 One-type theotroph. Keeps track of a location to drift towards, and a drift priority. ToDo: -Wandering when no food -food sharing -trapped in corners -offense -missiles (Devon 20030327) No longer flees stationary shots (i.e. syphons). #type It Runs Away #color 999 #hardware constructor 1 eater 1.9 solar-cells 0.02 food-sensor 15 1 energy 500 50 armor 200 processor 15 engine 0.05 grenades 15 9 20 robot-sensor 9 1 repair-rate 0.03 shot-sensor 10 1 #code #vector better-place #var migration-priority construct: 1 constructor-type! energy 200 > constructor-max-rate 0 ifev constructor-rate! return defend: energy armor > max-repair-rate 0 ifev repair-rate! shot-sensor-time time 20 - < energy 30 > and if fire-shot-sensor sync #const shot-run-distance 10 shot-found if shot-velocity or and-if shot-run-distance shot-velocity -100 vs* shot-position position v- v+ vnegate angle polar-to-rect better-place v+ 5 restrict-position^ better-place! migration-priority 10 armor 50 / - + migration-priority! then then return fight: robot-sensor-time time 20 - < energy 40 > and if fire-robot-sensor sync robot-found if #const robot-run-distance 8 robot-run-distance robot-velocity -10 vs* robot-position position v- v+ vnegate angle polar-to-rect better-place v+ 5 restrict-position^ better-place! 4 shot-found 2 0 ifev + armor 50 / - 0 max migration-priority + migration-priority! 1 robot-direction polar-to-rect robot-velocity dot 0.01 < shot-found or if robot-position robot-velocity velocity v- robot-distance grenades-speed / vs* v+ position v- rect-to-polar fire-grenade then ;closing or firing then ;found then ;time-to-fire return think: ; better-place position v- rect-to-polar fire-grenade migration-priority 0.98 * migration-priority! better-place 0.99 vs* position 0.01 vs* v+ 0.1 random-angle polar-to-rect v+ 5 restrict-position better-place! return #var border restrict-position: ;x y border -> x' y' border! border max world-height border - min swap border max world-width border - min swap return #start position 10 random-angle polar-to-rect v+ 5 restrict-position^ better-place! 0 migration-priority! #var meal-ready Begin-browsing: 0 meal-ready! Loop: food-sensor-time time 30 - < meal-ready not and if better-place position v- rect-to-polar food-sensor-focus-direction! food-sensor-focus-distance! fire-food-sensor sync food-found if 1 meal-ready! then then meal-ready if food-position seek-location food-position position dist radius 0.1 + < eaten not and if 0 meal-ready! then else 0 engine-power! then think^ defend^ fight^ construct^ migration-priority 15 > better-place position dist 10 > and if Begin-running& jump else Loop& jump then Begin-running: Run-loop: better-place position v- 0.05 vs* engine-velocity! engine-max-power engine-power! think^ defend^ fight^ construct^ better-place position dist 5 < migration-priority 10 < or if Begin-browsing& jump else Run-loop& jump then #end