Lunar Lander

Lunar Lander preview image

1 collaborator

Uri_dolphin3 Uri Wilensky (Author)

Tags

game 

Tagged by Reuven M. Lerner over 10 years ago

Parent of 1 model: Lunar Lander Knob and Button
Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 666 times • Downloaded 74 times • Run 0 times
Download the 'Lunar Lander' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

This model is based on the arcade game, Lunar Lander. The object of the game is to land the red lunar module on the blue landing pad on the surface of the moon without crashing or breaking the module.

The lunar module is fragile, so you have to be moving extremely slowly to prevent damage when you touch down. You have one thruster that exerts a force depending on the tilt of the module. You have the ability to tilt right and left.

HOW TO USE IT

Buttons: SETUP starts the game over by creating a new surface for you to navigate and poising your module above that surface, ready for descent. GO starts the game. Be ready; the module will start descending fairly quickly. LEFT and RIGHT tilt the module back and forth THRUST fires your rockets according to your current tilt.

Sliders: PLATFORM-WIDTH controls the width of the blue landing pad created at setup, a wider landing pad makes an easier target. TERRAIN-BUMPINESS controls the variation in the elevation of the lunar surface. More bumpiness may mean you will have large obstacles to maneuver around. THRUST-AMOUNT controls the magnitude of the force of your rockets.

THINGS TO NOTICE

When terrain-bumpiness is very high some of the randomly generated surfaces are not navigable.

THINGS TO TRY

Try to land the module with the fewest adjustments.

Increase the THRUST-AMOUNT to make the game harder.

EXTENDING THE MODEL

Add one or more plots to the model. For example, you might plot the position, velocity, and/or acceleration of the module, in the plane or just on the Y axis.

Currently, collisions with the edges of the module are not detected, so you can graze the side of a peak with the edge of the module without crashing. It would be more realistic if these crashes were detected.

Add levels to the game by continually making the terrain bumpier, the platform smaller, or by some other method of making the game more difficult, perhaps alien spaceships.

Try to write a robot pilot that will automatically land the module safely.

NETLOGO FEATURES

This model uses the random-poisson reporter to create the terrain. See its entry in the NetLogo Dictionary, and also http://mathworld.wolfram.com/PoissonDistribution.html.

The frame rate setting is used to control the speed of the game.

RELATED MODELS

  • Projectile Attack
  • Gravitation

HOW TO CITE

If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:

  • Wilensky, U. (2005). NetLogo Lunar Lander model. http://ccl.northwestern.edu/netlogo/models/LunarLander. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
  • Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.

COPYRIGHT AND LICENSE

Copyright 2005 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals [
  platform     ;; the x coordinate of the center of the platform
]

turtles-own [
  xvel yvel    ;; x and y components of the lander's velocity
]

to setup
  clear-all
  setup-terrain
  crt 1 [
    set shape "lander"
    set color red
    set size 10
    setxy (platform + max-pxcor)
          (max-pycor - size / 2)
    set heading 0
  ]
  reset-ticks
end 

to setup-terrain
  let terrain-color gray
  set platform platform-width
               + random (world-width - 2 * platform-width)
               + min-pxcor
  ;; first use a turtle to draw the surface of the moon
  ;; including the landing platform
  crt 1 [
    set color gray
    setxy min-pxcor
          floor (min-pycor / 2)
    set heading 90
    repeat world-width [
      set pcolor color
      fd 1
      ;; draw the platform in blue
      if pxcor = platform - (platform-width / 2) [
        set heading 90
        set color blue
      ]
      ;; everything else is moon surface and should be gray
      if pxcor = platform + (platform-width / 2) [
        set color gray
      ]
      ;; and if it isn't the platform it should also be
      ;; jagged so vary ycor by the terrain-bumpiness
      if color != blue [
        ;; random-poisson usually gives small variations, occasionally
        ;; larger ones
        let y ( ycor + one-of [1 -1] * random-poisson ( terrain-bumpiness ) )
        ;; prevent the drawing turtle from wrapping vertically
        ;; while contouring the terrain
          if patch-at 0 (y - ycor) != nobody
          [ set ycor y ]
      ]
    ]
    die
  ]

  ;; then use more turtles to make solid gray below the gray line
  ask patches with [pcolor != black] [
    sprout 1 [
      set heading 180
      ;; if the drawing turtle is already at the bottom it should not continue
      if not can-move? 1 [ die ]
      fd 1
      set pcolor gray
      fd 1
      while [ can-move? 1 ]
      [
        set pcolor gray
        fd 1
      ]
      set pcolor gray
      die
    ]
  ]
end 

to go
  if (not any? turtles) or ([color] of one-of turtles != red)
    [ stop ]
  ask turtles [
    ;; if the module is about to wrap vertically
    ;; stop its ascent
    ifelse ycor + yvel > max-pycor
    [ set xcor (xcor + xvel)
      set yvel 0 ]
    [ setxy (xcor + xvel) (ycor + yvel) ]
    ;; exert the force of gravity
    set yvel yvel - 0.001
    ;; detect crashes and insufficiently soft landings
    if [pcolor] of patch-at 0 -2 != black [
      ifelse (abs yvel > 0.08) or
             (abs xvel > 0.04) or
             (heading != 0) or
             ((pxcor - platform) >= platform-width / 2)
      [ game-over ]
      [ set color green - 1 ]
    ]
    ;; switch back to the shape without the thrusters on
    if shape = "lander2" and timer > 0.3
      [ set shape "lander" ]
  ]
  tick
end 

to game-over  ;; turtle procedure
  set shape "skull"
  set color white
  set heading 0
end 

to rotate-left  ;; turtle procedure
  if shape = "lander" [
    lt 5
  ]
end 

to rotate-right  ;; turtle procedure
  if shape = "lander" [
    rt 5
  ]
end 

to thrust  ;; turtle procedure
  if shape = "lander" [
    set xvel xvel + thrust-amount * dx
    set yvel yvel + thrust-amount * dy
    ;; lander2 has a visual indication that the thrusters are on
    set shape "lander2"
    reset-timer
  ]
end 


; Copyright 2005 Uri Wilensky.
; See Info tab for full copyright and license.

There are 10 versions of this model.

Uploaded by When Description Download
Uri Wilensky almost 11 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky over 11 years ago Updated version tag Download this version
Uri Wilensky over 11 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky about 12 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Model from NetLogo distribution Download this version
Uri Wilensky almost 14 years ago Lunar Lander Download this version

Attached files

File Type Description Last updated
Lunar Lander.png preview Preview for 'Lunar Lander' almost 11 years ago, by Uri Wilensky Download

This model does not have any ancestors.

Children:

Graph of models related to 'Lunar Lander'