📄 ---warbot.nlogo
字号:
breeds [ Explorers RocketLaunchers MyHome Missile Burgers Walls ]turtles-own [ energy carrying-food? detection-range speed waiting ]RocketLaunchers-own [ nb-missiles max-missiles target ]Missile-own [ range ]to setup ca set-default-shape MyHome "house" set-default-shape Explorers "explorer" set-default-shape RocketLaunchers "rocket launcher" set-default-shape Burgers "hamburger" set-default-shape Walls "box" new-MyHome red -20 0 new-MyHome green 20 0 ask MyHome [ new-robots ] new-walls new-burgers 50endto go if not any? turtles with [ who = 0 ][ print "Victoire des verts" stop ] if not any? turtles with [ who = 1 ][ print "Victoire des rouges" stop ] ask Explorers [ set energy energy - 0.1 mort ifelse (color = green) [ goGreenExplorers ][ goRedExplorers ] ] ask RocketLaunchers [ set energy energy - 0.1 mort if (waiting > 0) [ set waiting waiting - 1 ] ifelse (color = green) [ goGreenRocketLaunchers ][ goRedRocketLaunchers ] ] ask MyHome [ mort ifelse (color = green) [ goGreenHome ][ goRedHome ] ] ask Missile [ go-missile ] if (random 100 = 0) [ new-burgers 1 ]endto new-MyHome [ c x y ] cct-MyHome 1 [ set size 2 set color c set xcor x set ycor y set energy 12000 + 7500 * 10 set detection-range 10 set speed 0 ]endto new-robots new-Explorer 10 self new-RocketLauncher 10 selfendto new-burgers [ n ] cct-Burgers n [ set xcor ( - screen-edge-x + 1 + random (2 * (screen-edge-x - 1))) set ycor ( - screen-edge-y + 1 + random (2 * (screen-edge-y - 1))) set energy 50 + random 100 ]endto new-walls cct-Walls 100 [ set color grey set xcor screen-edge-x * -1 + random (2 * screen-edge-x) set ycor screen-edge-x * -1 + random (2 * screen-edge-x) ] let i screen-edge-x * -1 let j screen-edge-y * -1 cct-Walls 4 * (screen-edge-x + screen-edge-y) [ set color grey set xcor i set ycor j ifelse (j = screen-edge-y * -1) [ ifelse (i < screen-edge-x) [ set i i + 1 ][ set i -1 * screen-edge-x set j j + 1 ]] [ ifelse (j = screen-edge-y) [ set i i + 1 ] [ set i i * -1 if (i < 0) [ set j j + 1 ]] ] ]endto new-Explorer [ n a ] if (energy-of a > n * 1500) [ set heading random 360 ask patch-at dx dy [ sprout-Explorers n [ set size 2 set color color-of a set xcor xcor-of a - 2 + random-float 4 set ycor ycor-of a - 2 + random-float 4 set heading random 360 set energy 1000 set detection-range 10 set speed 1 ] ] set energy-of a energy-of a - n * 1500 ]endto new-RocketLauncher [ n a ] if (energy-of a > n * 6000) [ set heading random 360 ask patch-at dx dy [ sprout-RocketLaunchers n [ set size 2 set color color-of a set xcor xcor-of a - 2 + random-float 4 set ycor ycor-of a - 2 + random-float 4 set heading random 360 set energy 4000 set detection-range 5 set speed 0.25 set nb-missiles 30 set max-missiles 100 set target nobody ] ] set energy-of a energy-of a - n * 6000 ]endto mort if (energy <= 0) [ die ]endto eat [ b ] set energy energy + energy-of b ask b [ die ]endto take [ b ] set carrying-food? energy-of b ask b [ die ]endto forward-move without-interruption [ if count turtles in-cone 2 90 with [ breed != burgers ] = 1 [ fd speed ] ]endto random-move rt random 45 - random 45 forward-moveendto launch-rocket [ dir ] if (waiting = 0) [ hatch-Missile 1 [ set size 1 set range 20 set heading dir set speed 1 fd 0.5 ] set waiting 5 ]endto go-missile let t turtles in-cone-nowrap 2 90 with [ (breed != Missile) and (breed != Burgers) ] if any? t [ ask t [ set energy energy - 100 ] die ] ifelse range < 0 [ die ] [ fd speed set range range - speed ]endto new-missile [ n ] if (nb-missiles + n <= max-missiles) and (energy > 100 * n) [ set nb-missiles nb-missiles + n ]endto-report perceive-food report Burgers in-radius-nowrap detection-rangeendto-report perceive-robots [ c ] report turtles in-radius-nowrap detection-range with [ (color = c) and ((breed = Explorers) or (breed = RocketLaunchers))] endto-report perceive-home [ c ] report turtles in-radius-nowrap detection-range with [ (color = c) and (breed = MyHome) ] endto-report perceive [ c b ] report turtles in-radius-nowrap detection-range with [ (breed = b) and (color = c) ] end;; le code de l'巕uipe verteto go-and-eat let b min-one-of perceive-food [ distance self ] ifelse (b != nobody) [ ifelse (distance b) < 1.5 [ eat b ] [ set heading towards-nowrap b - 20 + random 40 if count turtles in-cone 2 90 with [ breed != burgers ] != 1 [ rt random 90 ] forward-move ] ] [ random-move ]end to call-rocket-launcher [ t ] let rl min-one-of perceive green RocketLaunchers [ distance t ] if (rl != nobody) [ set target-of rl t ]endto shoot ifelse (target != nobody) [ launch-rocket towards target set target nobody ] [ let h random-one-of perceive-home red ifelse ( h != nobody ) [ launch-rocket towards h ] [ let r random-one-of perceive-robots red if ( r != nobody ) [ launch-rocket towards r ] ] ]endto goGreenExplorers go-and-eat let h random-one-of perceive-home red ifelse ( h != nobody ) [ call-rocket-launcher h ] [ set h random-one-of perceive-home red if ( h != nobody ) [ call-rocket-launcher h ] ]endto goGreenRocketLaunchers shoot go-and-eat if ((energy > 3000) and (nb-missiles < 5)) [ new-missile 1 ]endto goGreenHome if (energy > 12000) [ new-RocketLauncher 1 self ]end;; votre code
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -