| @@ -5,26 +5,31 @@ breed [bullets bullet] | |||||
| bullets-own [ | bullets-own [ | ||||
| max-travel-distance | max-travel-distance | ||||
| shooter | |||||
| speed | speed | ||||
| travel-distance | travel-distance | ||||
| ] | ] | ||||
| to fire | |||||
| hatch-bullets 1 [ | |||||
| set max-travel-distance 8 | |||||
| set speed 1 | |||||
| set travel-distance 0 | |||||
| set color white | |||||
| set shape "bullet" | |||||
| set size 0.5 | |||||
| ] | |||||
| end | |||||
| to do-bullet-logic | to do-bullet-logic | ||||
| fd speed | fd speed | ||||
| set travel-distance travel-distance + speed | set travel-distance travel-distance + speed | ||||
| if travel-distance > max-travel-distance [ | if travel-distance > max-travel-distance [ | ||||
| die | |||||
| die | |||||
| ] | |||||
| let mxcor xcor | |||||
| let mycor ycor | |||||
| let is-close-enough false | |||||
| let target min-one-of (turtles-here with [breed = tanks]) [distancexy mxcor mycor] | |||||
| if target != nobody [ | |||||
| ask target [ | |||||
| if distancexy mxcor mycor < 0.65 [ | |||||
| set is-close-enough true | |||||
| shot-at myself | |||||
| ] | |||||
| ] | |||||
| ] | |||||
| if is-close-enough [ | |||||
| die | |||||
| ] | ] | ||||
| end | end | ||||
| @@ -20,6 +20,8 @@ globals [ | |||||
| mouse-was-down? | mouse-was-down? | ||||
| player | player | ||||
| player-accelerate-for | player-accelerate-for | ||||
| player-deaths | |||||
| player-kills | |||||
| ] | ] | ||||
| ;; =========================== | ;; =========================== | ||||
| @@ -34,6 +36,7 @@ to setup | |||||
| set pcolor (random 3) - 5 + green | set pcolor (random 3) - 5 + green | ||||
| ] | ] | ||||
| spawn-player | spawn-player | ||||
| spawn-tank 1 | |||||
| render | render | ||||
| set last-tick-time timer | set last-tick-time timer | ||||
| end | end | ||||
| @@ -48,6 +51,7 @@ to go | |||||
| ask bullets [ | ask bullets [ | ||||
| do-bullet-logic | do-bullet-logic | ||||
| ] | ] | ||||
| show-crosshair | |||||
| render | render | ||||
| keep-time | keep-time | ||||
| end | end | ||||
| @@ -56,12 +60,45 @@ end | |||||
| ;; Other procedures | ;; Other procedures | ||||
| ;; ================ | ;; ================ | ||||
| to debug [action msg] | |||||
| output-print (word (round timer) ": " action ": " msg) | |||||
| end | |||||
| to setup-defaults | to setup-defaults | ||||
| set-patch-size 30 | set-patch-size 30 | ||||
| resize-world -8 8 -8 8 | resize-world -8 8 -8 8 | ||||
| set max-fps 30 | set max-fps 30 | ||||
| set mouse-was-down? false | set mouse-was-down? false | ||||
| set player-accelerate-for 0 | set player-accelerate-for 0 | ||||
| set player-deaths 0 | |||||
| set player-kills 0 | |||||
| end | |||||
| to show-crosshair | |||||
| clear-drawing | |||||
| if mouse-inside? [ | |||||
| ask patch mouse-xcor mouse-ycor [ | |||||
| sprout 1 [ | |||||
| set color white | |||||
| set heading 0 | |||||
| make-square | |||||
| die | |||||
| ] | |||||
| ] | |||||
| ] | |||||
| end | |||||
| to make-square | |||||
| fd 0.5 | |||||
| pd | |||||
| rt 90 | |||||
| fd 0.5 | |||||
| repeat 3 [ | |||||
| rt 90 | |||||
| fd 1 | |||||
| ] | |||||
| rt 90 | |||||
| fd 0.5 | |||||
| end | end | ||||
| to render | to render | ||||
| @@ -78,9 +115,9 @@ to keep-time | |||||
| end | end | ||||
| @#$#@#$#@ | @#$#@#$#@ | ||||
| GRAPHICS-WINDOW | GRAPHICS-WINDOW | ||||
| 475 | |||||
| 452 | |||||
| 10 | 10 | ||||
| 995 | |||||
| 972 | |||||
| 551 | 551 | ||||
| 8 | 8 | ||||
| 8 | 8 | ||||
| @@ -104,9 +141,9 @@ GRAPHICS-WINDOW | |||||
| ticks | ticks | ||||
| BUTTON | BUTTON | ||||
| 66 | |||||
| 43 | |||||
| 100 | 100 | ||||
| 161 | |||||
| 138 | |||||
| 133 | 133 | ||||
| New Game | New Game | ||||
| setup | setup | ||||
| @@ -120,9 +157,9 @@ NIL | |||||
| NIL | NIL | ||||
| BUTTON | BUTTON | ||||
| 313 | |||||
| 290 | |||||
| 99 | 99 | ||||
| 407 | |||||
| 384 | |||||
| 132 | 132 | ||||
| Play Game | Play Game | ||||
| go | go | ||||
| @@ -136,21 +173,21 @@ NIL | |||||
| NIL | NIL | ||||
| MONITOR | MONITOR | ||||
| 297 | |||||
| 382 | |||||
| 410 | |||||
| 427 | |||||
| 269 | |||||
| 290 | |||||
| 389 | |||||
| 339 | |||||
| Player Speed | Player Speed | ||||
| [speed] of player | [speed] of player | ||||
| 8 | 8 | ||||
| 1 | 1 | ||||
| 11 | |||||
| 12 | |||||
| BUTTON | BUTTON | ||||
| 108 | |||||
| 176 | |||||
| 285 | |||||
| 252 | |||||
| 148 | |||||
| 181 | |||||
| 269 | |||||
| 233 | |||||
| FIRE! | FIRE! | ||||
| player-fire | player-fire | ||||
| NIL | NIL | ||||
| @@ -163,15 +200,66 @@ NIL | |||||
| NIL | NIL | ||||
| MONITOR | MONITOR | ||||
| 296 | |||||
| 433 | |||||
| 410 | |||||
| 478 | |||||
| 270 | |||||
| 350 | |||||
| 389 | |||||
| 399 | |||||
| Player Accel Time | Player Accel Time | ||||
| player-accelerate-for | player-accelerate-for | ||||
| 5 | 5 | ||||
| 1 | 1 | ||||
| 11 | |||||
| 12 | |||||
| OUTPUT | |||||
| 998 | |||||
| 30 | |||||
| 1375 | |||||
| 521 | |||||
| 12 | |||||
| MONITOR | |||||
| 55 | |||||
| 290 | |||||
| 149 | |||||
| 339 | |||||
| Player Deaths | |||||
| player-deaths | |||||
| 17 | |||||
| 1 | |||||
| 12 | |||||
| MONITOR | |||||
| 55 | |||||
| 350 | |||||
| 148 | |||||
| 399 | |||||
| Player Kills | |||||
| player-kills | |||||
| 17 | |||||
| 1 | |||||
| 12 | |||||
| MONITOR | |||||
| 160 | |||||
| 290 | |||||
| 261 | |||||
| 339 | |||||
| Player Ammo | |||||
| [ammunition] of player | |||||
| 17 | |||||
| 1 | |||||
| 12 | |||||
| MONITOR | |||||
| 160 | |||||
| 350 | |||||
| 260 | |||||
| 399 | |||||
| Player Armor | |||||
| [armor] of player | |||||
| 17 | |||||
| 1 | |||||
| 12 | |||||
| @#$#@#$#@ | @#$#@#$#@ | ||||
| WHAT IS IT? | WHAT IS IT? | ||||
| @@ -5,6 +5,8 @@ breed [tanks tank] | |||||
| tanks-own [ | tanks-own [ | ||||
| acceleration | acceleration | ||||
| ammunition | |||||
| armor | |||||
| friction | friction | ||||
| is-accelerating? | is-accelerating? | ||||
| is-player? | is-player? | ||||
| @@ -14,8 +16,16 @@ tanks-own [ | |||||
| team | team | ||||
| ] | ] | ||||
| to spawn-tank [tank-team] | |||||
| create-tanks 1 [ | |||||
| set-tank-vars tank-team false | |||||
| ] | |||||
| end | |||||
| to set-tank-vars [tank-team player-tank?] | to set-tank-vars [tank-team player-tank?] | ||||
| set acceleration 0.03 | set acceleration 0.03 | ||||
| set ammunition 20 | |||||
| set armor 8 | |||||
| set friction 0.0075 | set friction 0.0075 | ||||
| set is-accelerating? false | set is-accelerating? false | ||||
| set is-player? player-tank? | set is-player? player-tank? | ||||
| @@ -52,6 +62,30 @@ to decelerate [amount] | |||||
| ] | ] | ||||
| end | end | ||||
| to fire | |||||
| if ammunition > 0 [ | |||||
| set ammunition ammunition - 1 | |||||
| hatch-bullets 1 [ | |||||
| set max-travel-distance 8 | |||||
| set shooter [who] of myself | |||||
| set speed 1 | |||||
| set travel-distance 0 | |||||
| set color white | |||||
| set shape "bullet" | |||||
| set size 0.5 | |||||
| ] | |||||
| ] | |||||
| end | |||||
| to shot-at [bullet] | |||||
| debug "SHOT" (word ([shooter] of myself) " -> " who) | |||||
| set armor armor - 1 | |||||
| if armor = 0 [ | |||||
| die | |||||
| ] | |||||
| end | |||||
| to-report get-tank-color | to-report get-tank-color | ||||
| if is-player? [ report black ] | if is-player? [ report black ] | ||||
| if team = 0 [ report green ] | if team = 0 [ report green ] | ||||