From 731930ffb6ba68df2adbfe9c514fde8da8b88ee0 Mon Sep 17 00:00:00 2001 From: Ben Kurtovic Date: Sat, 24 Dec 2011 23:41:53 -0500 Subject: [PATCH] Bullets can hit tanks; crosshairs; ammunition and armor --- bullet.nls | 31 ++++++++------- lobo.nlogo | 128 +++++++++++++++++++++++++++++++++++++++++++++++++++---------- tank.nls | 34 ++++++++++++++++ 3 files changed, 160 insertions(+), 33 deletions(-) diff --git a/bullet.nls b/bullet.nls index d5f8e76..141a948 100644 --- a/bullet.nls +++ b/bullet.nls @@ -5,26 +5,31 @@ breed [bullets bullet] bullets-own [ max-travel-distance + shooter speed 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 fd speed set travel-distance travel-distance + speed 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 diff --git a/lobo.nlogo b/lobo.nlogo index 979db38..6746fb5 100644 --- a/lobo.nlogo +++ b/lobo.nlogo @@ -20,6 +20,8 @@ globals [ mouse-was-down? player player-accelerate-for + player-deaths + player-kills ] ;; =========================== @@ -34,6 +36,7 @@ to setup set pcolor (random 3) - 5 + green ] spawn-player + spawn-tank 1 render set last-tick-time timer end @@ -48,6 +51,7 @@ to go ask bullets [ do-bullet-logic ] + show-crosshair render keep-time end @@ -56,12 +60,45 @@ end ;; Other procedures ;; ================ +to debug [action msg] + output-print (word (round timer) ": " action ": " msg) +end + to setup-defaults set-patch-size 30 resize-world -8 8 -8 8 set max-fps 30 set mouse-was-down? false 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 to render @@ -78,9 +115,9 @@ to keep-time end @#$#@#$#@ GRAPHICS-WINDOW -475 +452 10 -995 +972 551 8 8 @@ -104,9 +141,9 @@ GRAPHICS-WINDOW ticks BUTTON -66 +43 100 -161 +138 133 New Game setup @@ -120,9 +157,9 @@ NIL NIL BUTTON -313 +290 99 -407 +384 132 Play Game go @@ -136,21 +173,21 @@ NIL NIL MONITOR -297 -382 -410 -427 +269 +290 +389 +339 Player Speed [speed] of player 8 1 -11 +12 BUTTON -108 -176 -285 -252 +148 +181 +269 +233 FIRE! player-fire NIL @@ -163,15 +200,66 @@ NIL NIL MONITOR -296 -433 -410 -478 +270 +350 +389 +399 Player Accel Time player-accelerate-for 5 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? diff --git a/tank.nls b/tank.nls index bacef89..ecd8792 100644 --- a/tank.nls +++ b/tank.nls @@ -5,6 +5,8 @@ breed [tanks tank] tanks-own [ acceleration + ammunition + armor friction is-accelerating? is-player? @@ -14,8 +16,16 @@ tanks-own [ team ] +to spawn-tank [tank-team] + create-tanks 1 [ + set-tank-vars tank-team false + ] +end + to set-tank-vars [tank-team player-tank?] set acceleration 0.03 + set ammunition 20 + set armor 8 set friction 0.0075 set is-accelerating? false set is-player? player-tank? @@ -52,6 +62,30 @@ to decelerate [amount] ] 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 if is-player? [ report black ] if team = 0 [ report green ]