diff --git a/lobo.nlogo b/lobo.nlogo index 1cbf8d5..beccf61 100644 --- a/lobo.nlogo +++ b/lobo.nlogo @@ -9,18 +9,27 @@ ;; ============ globals [ + bullet-speed last-tick-time + max-acceleration + max-bullet-travel-distance max-fps max-tank-speed player - player-turn-speed + turn-speed ] breed [bullets bullet] +breed [crosshairs crosshair] breed [tanks tank] +bullets-own [ + travel-distance +] + tanks-own [ speed + team ] ;; =========================== @@ -28,52 +37,52 @@ tanks-own [ ;; =========================== 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 [ 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 end to go - do-physics + do-tank-physics + do-bullet-physics + do-player-logic keep-time end -to player-go-forward +to player-speed-up 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 to player-slow-down ask player [ - if speed > 0 [ - set speed speed - 1 + set speed speed - max-acceleration + if speed < 0 [ + set speed 0 ] ] end to player-turn-left ask player [ - lt player-turn-speed + lt turn-speed ] end to player-turn-right ask player [ - rt player-turn-speed + rt turn-speed ] end @@ -87,28 +96,102 @@ end ;; 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 hatch-bullets 1 [ set color white + set size 1 + set travel-distance 0 ] end -to do-physics +to do-tank-physics ask tanks [ - fd speed / 40 + fd speed ] +end + +to do-bullet-physics 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 +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 + display + no-display let time-since-last-tick timer - last-tick-time let wait-time (1 / max-fps) - time-since-last-tick wait wait-time tick set last-tick-time timer 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 475 @@ -139,9 +222,9 @@ ticks BUTTON 66 100 -140 +161 133 -Setup +New Game setup NIL 1 @@ -153,11 +236,11 @@ NIL NIL BUTTON -331 +313 99 -394 +407 132 -Go +Play Game go T 1 @@ -173,8 +256,8 @@ BUTTON 174 282 207 -Forward -player-go-forward +Speed Up +player-speed-up NIL 1 T @@ -238,8 +321,8 @@ MONITOR 414 486 Player Speed -[speed] of player -17 +player-speed +5 1 11