Logo Bolo: a re-envisioning of the classic tank game by Stuart Cheshire in NetLogo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
1.8 KiB

  1. ;; lobo: Logo Bolo
  2. ;; (c) Ben Kurtovic, 2011-2012
  3. globals [
  4. player
  5. player-death-time
  6. player-deaths
  7. player-has-target?
  8. player-kills
  9. player-target-xcor
  10. player-target-ycor
  11. ]
  12. ;; ==========
  13. ;; Procedures
  14. ;; ==========
  15. to spawn-player [tank-xcor tank-ycor tank-heading]
  16. create-tanks 1 [
  17. set player tank who
  18. set-tank-vars true 0 tank-xcor tank-ycor tank-heading
  19. ]
  20. end
  21. to do-player-logic
  22. ifelse player = nobody [
  23. if timer - player-death-time > 1.5 [
  24. spawn-player 0 0 0
  25. ]
  26. ] [
  27. ask player [
  28. do-player-movement
  29. ]
  30. ]
  31. end
  32. to do-player-movement
  33. if mouse-inside? [
  34. if mouse-down? and not mouse-was-down? [
  35. let txcor round mouse-xcor
  36. let tycor round mouse-ycor
  37. ifelse player-has-target? and player-target-xcor = txcor and player-target-ycor = tycor [
  38. cancel-target
  39. ] [
  40. set is-accelerating? true
  41. set player-has-target? true
  42. set player-target-xcor txcor
  43. set player-target-ycor tycor
  44. ]
  45. ]
  46. set mouse-was-down? mouse-down?
  47. ]
  48. ifelse player-has-target? [
  49. tank-facexy player-target-xcor player-target-ycor
  50. let dist distancexy player-target-xcor player-target-ycor
  51. if dist < 2 and speed > 0.075 [
  52. ; Turn on "brakes" if we're getting
  53. ; close and we're moving fast:
  54. decelerate friction * 5
  55. ]
  56. if dist < 0.1 [
  57. cancel-target
  58. ]
  59. ] [
  60. tank-facexy mouse-xcor mouse-ycor
  61. ]
  62. end
  63. to player-fire
  64. if player != nobody [
  65. ask player [
  66. fire
  67. ]
  68. ]
  69. end
  70. to player-place-pill
  71. if player != nobody [
  72. ask player [
  73. place-pill
  74. ]
  75. ]
  76. end
  77. to player-cancel-order
  78. if player != nobody [
  79. ask player [
  80. if player-has-target? [
  81. cancel-target
  82. ]
  83. ]
  84. ]
  85. end
  86. to cancel-target
  87. set is-accelerating? false
  88. set player-has-target? false
  89. set speed speed / 2
  90. end