| @@ -9,18 +9,27 @@ | |||||
| ;; ============ | ;; ============ | ||||
| globals [ | globals [ | ||||
| bullet-speed | |||||
| last-tick-time | last-tick-time | ||||
| max-acceleration | |||||
| max-bullet-travel-distance | |||||
| max-fps | max-fps | ||||
| max-tank-speed | max-tank-speed | ||||
| player | player | ||||
| player-turn-speed | |||||
| turn-speed | |||||
| ] | ] | ||||
| breed [bullets bullet] | breed [bullets bullet] | ||||
| breed [crosshairs crosshair] | |||||
| breed [tanks tank] | breed [tanks tank] | ||||
| bullets-own [ | |||||
| travel-distance | |||||
| ] | |||||
| tanks-own [ | tanks-own [ | ||||
| speed | speed | ||||
| team | |||||
| ] | ] | ||||
| ;; =========================== | ;; =========================== | ||||
| @@ -28,52 +37,52 @@ tanks-own [ | |||||
| ;; =========================== | ;; =========================== | ||||
| to setup | to setup | ||||
| ca | |||||
| set max-fps 30 | |||||
| set max-tank-speed 20 | |||||
| set player-turn-speed 10 | |||||
| clear-all | |||||
| no-display | |||||
| setup-defaults | |||||
| ask patches [ | ask patches [ | ||||
| set pcolor random 3 | set pcolor random 3 | ||||
| ] | ] | ||||
| create-ordered-tanks 1 [ | |||||
| set player (tank who) | |||||
| set color gray | |||||
| set size 2 | |||||
| set speed 0 | |||||
| ] | |||||
| spawn-player | |||||
| display | |||||
| no-display | |||||
| set last-tick-time timer | set last-tick-time timer | ||||
| end | end | ||||
| to go | to go | ||||
| do-physics | |||||
| do-tank-physics | |||||
| do-bullet-physics | |||||
| do-player-logic | |||||
| keep-time | keep-time | ||||
| end | end | ||||
| to player-go-forward | |||||
| to player-speed-up | |||||
| ask player [ | ask player [ | ||||
| if speed < max-tank-speed [ | |||||
| set speed speed + 1 | |||||
| set speed speed + max-acceleration | |||||
| if speed > max-tank-speed [ | |||||
| set speed max-tank-speed | |||||
| ] | ] | ||||
| ] | ] | ||||
| end | end | ||||
| to player-slow-down | to player-slow-down | ||||
| ask player [ | ask player [ | ||||
| if speed > 0 [ | |||||
| set speed speed - 1 | |||||
| set speed speed - max-acceleration | |||||
| if speed < 0 [ | |||||
| set speed 0 | |||||
| ] | ] | ||||
| ] | ] | ||||
| end | end | ||||
| to player-turn-left | to player-turn-left | ||||
| ask player [ | ask player [ | ||||
| lt player-turn-speed | |||||
| lt turn-speed | |||||
| ] | ] | ||||
| end | end | ||||
| to player-turn-right | to player-turn-right | ||||
| ask player [ | ask player [ | ||||
| rt player-turn-speed | |||||
| rt turn-speed | |||||
| ] | ] | ||||
| end | end | ||||
| @@ -87,28 +96,102 @@ end | |||||
| ;; Other procedures | ;; Other procedures | ||||
| ;; ================ | ;; ================ | ||||
| to setup-defaults | |||||
| set bullet-speed 2 | |||||
| set max-acceleration 0.05 | |||||
| set max-bullet-travel-distance 16 | |||||
| set max-fps 30 | |||||
| set max-tank-speed 0.3 | |||||
| set player-accel-before-slowdown 15 | |||||
| set player-since-last-accel 0 | |||||
| set player-slowdown-amount 0.01 | |||||
| set turn-speed 24 | |||||
| end | |||||
| to spawn-player | |||||
| create-ordered-tanks 1 [ | |||||
| set player (tank who) | |||||
| set color get-tank-color "player" | |||||
| set size 2 | |||||
| set speed 0 | |||||
| set team 0 | |||||
| ] | |||||
| end | |||||
| to fire | to fire | ||||
| hatch-bullets 1 [ | hatch-bullets 1 [ | ||||
| set color white | set color white | ||||
| set size 1 | |||||
| set travel-distance 0 | |||||
| ] | ] | ||||
| end | end | ||||
| to do-physics | |||||
| to do-tank-physics | |||||
| ask tanks [ | ask tanks [ | ||||
| fd speed / 40 | |||||
| fd speed | |||||
| ] | ] | ||||
| end | |||||
| to do-bullet-physics | |||||
| ask bullets [ | ask bullets [ | ||||
| fd 1 | |||||
| fd bullet-speed | |||||
| set travel-distance travel-distance + bullet-speed | |||||
| if travel-distance >= max-bullet-travel-distance [ | |||||
| die | |||||
| ] | |||||
| ] | |||||
| end | |||||
| to do-player-logic | |||||
| ask player [ | |||||
| if auto-slowdown? [ | |||||
| do-auto-slowdown | |||||
| ] | |||||
| ] | ] | ||||
| end | end | ||||
| to do-auto-slowdown | |||||
| set player-since-last-accel player-since-last-accel + 1 | |||||
| if player-since-last-accel > player-accel-before-slowdown [ | |||||
| set speed speed - player-slowdown-amount | |||||
| if speed < 0 [ | |||||
| set speed 0 | |||||
| ] | |||||
| ] | |||||
| end | |||||
| to keep-time | to keep-time | ||||
| display | |||||
| no-display | |||||
| let time-since-last-tick timer - last-tick-time | let time-since-last-tick timer - last-tick-time | ||||
| let wait-time (1 / max-fps) - time-since-last-tick | let wait-time (1 / max-fps) - time-since-last-tick | ||||
| wait wait-time | wait wait-time | ||||
| tick | tick | ||||
| set last-tick-time timer | set last-tick-time timer | ||||
| end | end | ||||
| ;; ================= | |||||
| ;; Monitor reporters | |||||
| ;; ================= | |||||
| to-report player-speed | |||||
| report [speed] of player | |||||
| end | |||||
| to-report slowdown | |||||
| report player-since-last-accel | |||||
| end | |||||
| ;; =============== | |||||
| ;; Other reporters | |||||
| ;; =============== | |||||
| to-report get-tank-color [affiliation] | |||||
| if affiliation = "player" [ report gray ] | |||||
| if affiliation = "enemy" [ report red ] | |||||
| if affiliation = "ally" [ report green ] | |||||
| report black | |||||
| end | |||||
| @#$#@#$#@ | @#$#@#$#@ | ||||
| GRAPHICS-WINDOW | GRAPHICS-WINDOW | ||||
| 475 | 475 | ||||
| @@ -139,9 +222,9 @@ ticks | |||||
| BUTTON | BUTTON | ||||
| 66 | 66 | ||||
| 100 | 100 | ||||
| 140 | |||||
| 161 | |||||
| 133 | 133 | ||||
| Setup | |||||
| New Game | |||||
| setup | setup | ||||
| NIL | NIL | ||||
| 1 | 1 | ||||
| @@ -153,11 +236,11 @@ NIL | |||||
| NIL | NIL | ||||
| BUTTON | BUTTON | ||||
| 331 | |||||
| 313 | |||||
| 99 | 99 | ||||
| 394 | |||||
| 407 | |||||
| 132 | 132 | ||||
| Go | |||||
| Play Game | |||||
| go | go | ||||
| T | T | ||||
| 1 | 1 | ||||
| @@ -173,8 +256,8 @@ BUTTON | |||||
| 174 | 174 | ||||
| 282 | 282 | ||||
| 207 | 207 | ||||
| Forward | |||||
| player-go-forward | |||||
| Speed Up | |||||
| player-speed-up | |||||
| NIL | NIL | ||||
| 1 | 1 | ||||
| T | T | ||||
| @@ -238,8 +321,8 @@ MONITOR | |||||
| 414 | 414 | ||||
| 486 | 486 | ||||
| Player Speed | Player Speed | ||||
| [speed] of player | |||||
| 17 | |||||
| player-speed | |||||
| 5 | |||||
| 1 | 1 | ||||
| 11 | 11 | ||||