Final Project

Due Thu, Jun 22, 2017 at Start of Class

Choose one: Make either a Turtle game or a text-based data analysis utility. This project should combine most if not all of the knowledge you’ve learned this semester, and, armed with your preferred skills and knowledge, should serve as a testament to your new abilities as a coder! Lift-off here we come! :rocket:

Requirements

Both project types must use:

  • External data files. For Turtle, this can be game settings, character data, or etc. For the data tool, this should be your data.
  • Dictionaries
  • Custom modules
  • definite (for) loops
  • Custom functions
  • Custom classes - Extended or created from scratch.
  • Trinket

Both must be:

  • readably coded
  • well commented
  • well organized
  • idiomatic
  • error-free
  • (largely) bug free. That is, your core use cases should work. Small bugs are OK but the quality level for the final should be higher than previous projects.

Both must have an extensive (1500 word+) reflection. In it, discuss the program you chose, your process, the skills and attitudes you used, and anything else that will help me evaluate what you’ve done.

Turtle games must:

  • Have a graphical user interface, responding to key and click events
  • Have a constantly available help dialog. This can take many forms but should allow the user to learn what they can do in the program at any time.
  • Display information about the program’s state such as score or level
  • Have at least 3 levels, increasing in difficulty
  • Extend a custom Turtle Class
  • Have a ‘win’ screen
  • Have an iterative interface. That is, the user should be able to perform any number of supported actions (such as playing the game over and over)
  • Use one or more custom images

For Turtle projects, I recommend building major improvements into your Game App (or reworking it). In your reflection, make sure to note your major improvements.

Data analysis projects must:

  • Include more than one data file in the trinket
  • Have help text available somehow. For instance, if the user types ‘Help’, explain what they program can do.
  • have an iterative interface. That is, the user should be able to perform any number of supported actions and then exit the program.
  • Visualize data via text printouts. For instance:
# Raw data:

{'Fri': 20, 'Sat': 1, 'Thu': 6}

# Visualized:

Mon
Tue
Wed
Thu    ******
Fri    ********************
Sat    *
Sun
  • (optional) Use a web-bazed API like Google’s Maps API to retrieve and display extra information

For data analysis projects I recommend building an exploratory data analysis tool that will let users construct and print histograms and summary statistics (max, min, mean, etc) of data sets like the ones we’ve used. Email logs are one example, as is transaction data. You can re-use code and concepts from many of our homeworks to do this. When you generalize your program to work on many types of data, you will need to learn from the user which columns map to what kind of data.

Note: If you’d like to get creative and make a text-based game, you may do so if it satisfies all of the requirements above. i.e. a text-based game should read from data files, visualize information, etc. The data files may be level descriptions or save game files, for instance, and the data visualized could be score, inventory, or game state.

Do not use help from classmates on this assignment. Document/cite any help you use that is not me, our class notes, or our text.

Criteria

Beyond the requirements, here are the main things I’m looking for when I assign grades:

  • Completion of intermetiate milestone assignments (to be assigned)
  • Code style
  • Code correctness (i.e. free of errors & bugs)
  • Trajectory of improvement over the semester
  • Usefulness and/or Fun of program
  • Overall ability to make a Python program that does something useful and/or cool

What to Turn in

Submit a pull request with your reflection and your program. Please do not be late!

Code Talk

During our final examination period, give a 5-8 minute presentation of your program, descirption of your process/milestones, and reflection on what you’ve learned over the course of the semester.

Elliott Hauser is a PhD Student in information science at UNC Chapel Hill. He's hacking education as one of the cofounders of Trinket.io. Find Elliott Hauser on Twitter, Github, and on the web.