The only source we could really cite for our project idea is the 1987 CGA Broderbund computer game “The Ancient Art of War at Sea,” in which the battle screen contained two ships (you and an enemy, hopefully not Lord Admiral Nelson if you wanted to stand a chance) that would fire at each other. Our sailing game is rather different, and is designed around the specifications listed below. Details of background math and logical structure are described in the Program and Hardware Design sections.
  1. Opening screens describe the game and its rules.
  2. The wind is controlled externally by actual wind.
  3. Your speed is in part controlled by how high your sails are raised and how high the user-selected wind magnitude is.
  4. Both your ship and the pirate ship must respond in a roughly realistic manner to the wind.
  5. Both you and the pirate can fire cannons.
  6. Both ships’ cannon fire must be directed at each other, and not in a random direction on the screen.
  7. If either ship is hit by a cannonball, it sinks.
  8. The map extends to four screens, only one of which can be displayed at a time.
  9. There is land on the map.
  10. The entire map can be displayed at any time in the game, which pauses the game.
  11. If you collide with land or the pirate, you will sink.
  12. There are areas of the map that will turn on “treasure” locations when you sail over them.
  13. If you sail over treasure, you pick it up.
  14. If you collect enough treasure, you win the game.
Hardware/Software Tradeoffs
We chose to create our TV signal almost entirely through software. Alternately, we could have opted to get a hardware chip to create our TV signal. This would have simplified the programming considerably, but probably would have increased the cost of the project beyond budget. It would have opened up the possibility of creating a color game as well as displaying twice as many lines on the screen, but time spent programming these frills would have taken away from the game itself. We also chose to force the software to determine which direction the wind is blowing based on the unaltered phototransistor outputs. If we had wished to make an extremely small improvement in the processing speed, we could have used discrete gates to convert the phototransistor signals into a signal that could be directly interpreted in our programming without any sort of conversion. Naturally, we deemed this unnecessary.