High-level Design


Our goal was to create a game as close to Duck Hunt as feasibly possible on this microcontroller.  We found that there were several limitations placed upon us with this restriction which we will discuss later. 


The game starts with several introduction screens that display the name of the game the creators, and an explanation of how to use the menu system.  The user then has the choice between playing with one duck or two, as in the original Duck Hunt.  However due to hardware limitations we were not able to make two ducks fly simultaneously.  This was because we were only able to check whether the light gun had detected a hit once a line.  Therefore if we had two ducks on the same line we would have been unable to determine which had been hit.  In order to implement the two duck option we simply had them appear consecutively instead of simultaneously.  In either the one duck or two duck game you only get 3 shots per round, making the two duck game significantly harder.  The user can toggle between which game they want by shooting off the screen and then shooting the screen to select the option they want.


The user then has the option to select between three difficulty levels, easy, medium, and hard.  On easy the duck moves around at a normal speed, and the target area is larger than normal (see the program/hardware section for details on how the gun works).  On medium the duck moves at the normal speed, but the target size is not enlarged.  On hard the duck moves much faster, but the target is enlarged as in the easy case.  We found that these difficulties seemed fair, and made the game much more challenging.  Additionally, more points were given for shooting ducks on the harder settings. 


In either game type the were a total of 10 ducks per level, meaning 10 rounds in the one duck case, and 5 rounds in the two duck case.  After each level the user was told whether he had shot enough ducks to proceed to the next round.  The number of ducks needed increased as the levels increased. 


The movement of the duck was determined by a very simple algorithm that simply made the duck appear to bounce off of the walls of the screen.  We found that when the duck would change directions randomly, the game was too difficult to enjoy.  We found that this was a good balance, because while you could better anticipate where the duck was going, you could not wait too long or the duck would fly away. 


We tried to implement some background to the game, but ran into several hardware limitations.  For this to have worked we would have needed to clear the background on every trigger pull, however we found that with even a small amount of lines drawn on the screen this process would take too long, and created screen artifacts that ruined the game. 


Our final touch on the game was to add sound.  During the introduction screens you get to listen to our version of the Cornell Alma Mater.  Whenever a duck is killed, a falling sound is made.  When a duck flies away a flapping sound is made.