HtDP Exercise: A Fire-Plane Game

© Kathi Fisler, 2007

Your job is to write a simple interactive game in which the player drops water from a plane onto fires on the ground; the goal of the game is to put out all of the fires by dropping enough water on them. A sample appears to the right.

The plane is always moving across the screen. The player can change the direction of the plane by pressing the left and right arrow keys. The player can also drop water from the plane by pressing the down arrow key. Each fire has an intensity: when a drop of water hits a fire, the intensity decreases. If a fire burns without water hitting it, its intensity increases. A fire is extinguished when its intensity reaches zero.

You will build this game using the same teachpack. Work in the "Beginner with List Abbreviations" language level.

To write this game, you will need to provide at least the following:

Once you have these functions, you will run your game using the commands:

(big-bang WIDTH HEIGHT (/ 1.0 28) INITWORLD)
(on-redraw draw-world)
(on-key-event process-keys)
(on-tick-event update-world)
where WIDTH, HEIGHT, and INITWORLD are constants you define for the size of the game window and the initial configuration of the game.

Implement the game in stages, not all at once. Start with a simple version that lets the user change the direction of the plane's movement, but has no fires or water. Once you have that working, add the water drops and get them to fall. Once that is working, add the fires. Get the fires to decrease in intensity when water hits them, then get them to increase in intensity when no water falls on them. A fully-working solution to part of the game is better than a non-working solution to the whole game.

Hints and Tips

Our Images

Use the "insert image" option under the "special" menu to load an image into your DrScheme file; you can use define to give an image a name. We used the circle operator (defined in to get images for the water drops.

small fire medium fire large fire plane

Icons are from (fire) and (plane).