# Final Project

Type: Group Assignment

Due: by 5:00pm on Friday, May 14, 2021

## Prologue

For the final project, you have the option of working individually or working in a group of two or three. If you choose to work in a group, be sure to review our Code of Conduct and be careful to adhere to it when working on the assignment. Keep in mind that you and all your partners must be authors of all submitted files and are strongly encouraged to only work on the assignment when you are with your partners.

## Overview

For the final project, you have three options.

### Option #1: A Simulation Environment

One of the things computers are good at is simulation of systems that evolve over time. Consider, for example, a computer model of the solar system. You can give the computer the initial positions, masses, and velocities of the largest objects in the solar system, plus a computational mechanism for simulating the effects of Newton’s law of gravitation. Then you can set the system running, and your solar system will go through its motions. You could then try adding a comet with a mouse click or two, and watch how the comet’s orbit is perturbed by close encounters with planets or asteroids. If the simulation takes relevant physical laws into account, the evolution of the system will be a good representation of the workings of the real solar system.

If you choose this project, you will simulate some time-dependent system that can be represented effectively in a rectangular display. You could show a top view of the solar system, or a side view of an aquarium, or a landscape with rain, clouds, plants, and birds. Your system will need to be animated, and there will need to be a diverse enough collection of elements to your system that the objects will have interactions of some kind. Planets, for example, interact gravitationally, big fish eat little fish, and raindrops cause plants to grow.

Your simulation may include pretty much any features you can cook up, but its minimal features must include:

• More than one type of moving object.
• “Interactions” between objects (one object causes another object to react in a certain way).
• Some feature that allows either mouse-clicks or keystrokes or some other form of user input to affect the simulation in some way (click to create a plant, set the animation speed, etc.)

### Option #2: A Computer Game

Write a game program. The game should be either fun for the user, or one in which the computer has some basic intelligence, or both. Remember that your time is limited, so pick a game that you will be able to implement between now and the end of the term.

Your game can either be graphical or text-based.

If you have questions about the suitability of a particular game, feel free to discuss it with me.

### Option #3: Data Visualization

If you choose this option, you should select the dataset of your choice and come up with some way to visualize one or more interesting aspects of the data. For instance, you could use historical climate data to determine whether average temperatures in Iowa are rising or falling, perhaps broken down by month or season. Or you could determine how many American Idol winners have gone on to have “successful” music/recording careers. Your visualization should incorporate a fairly large dataset, extract this data from the source (web, etc), process the data, and produce one or more graphs from the data, along with some explanatory text accompanying the graph. Your visualization should also be influenced by user input: for instance, the user could indicate how many years of climate data to include, or determine how many graphs to display, etc.

## Parts of the Assignment

### Part 1: Project Proposal

The project proposal describes the core aspects of your project and is submitted several weeks earlier than everything else. More details concerning the proposal and submission instructions may be found at the Project Proposal page.

### Part 2: The Project

After finishing your proposal, you should start working on the actual project itself. All files associated with your project are due before 5:00pm on Friday, May 14th (the last day of finals week). Make sure that you and your partners are clearly identified at the top of every file you have created for this assignment. All files must be turned in via to with the subject of [CS 065] Final Project.

### Part 3: Demo

During the final examination period for this course, you will be required to give a demonstration of your project to the class. Details on the demos will be distributed in class closer the end of the semester. Note that attendance at the demonstrations is required and is during our scheduled final exam period.

• Program execution.
• Does the program run? Does it run without crashing or unexpected behavior?
• Is the output unambiguous?
• For simulations, is there more than one moving object? Do objects interact? Does user input affect the simulation in a non-trivial way? Are the “rules” of the simulation followed correctly and consistently?
• For games, does the game have unambiguous and clearly-stated rules? Does the gameplay consistently follow these rules? Does the game contain some amount of computer “intelligence” and/or randomness?
• For visualizations, does the output faithfully represent the source data? Does the visualization clearly express what you are attempting to highlight? Does it incorporate user choice?
• Style/Python elements.
• Are the tasks in your code correctly divided among functions and classes?
• Are your classes well-designed, with appropriate instance variables, a well-designed constructor, and appropriate methods?
• Are your functions well-designed? Do they utilize appropriate and well-chosen parameters and return values? Do they tackle appropriately-sized tasks?
• Is your code logically organized, with proper use of whitespace and comments to indicate what the code is doing?
• Do your variables, methods, functions, and classes sport appropriate and unambiguous names? Have you followed proper naming conventions with them?
• Does your program use Python elements, such as lists, strings, other libraries, etc. appropriately?
• Complexity. You will be graded on how interesting and ambitious your project is. If two programs are equal in all other areas, the more interesting program will get the higher grade. “Interesting” includes how aesthetically pleasing/visually interesting and how “fun” the project is (does the game or simulation change slightly every time, will the user get bored or tired of playing the game, is the visualization interesting and informative, etc). For the visualization, you will also be graded on your chosen dataset—is it adequately complex and large, etc. Note that aesthetically pleasing does not always mean that you need to include graphics (except for the visualization option), and does not mean that graphics will automatically make a project aesthetically pleasing (if the graphics are poorly done, for instance). For example, a simulation of an alien world with moons, aliens, flying saucers, etc. will receive a higher grade than one with a single alien walking across the screen. On the other hand, an outstanding implementation of Bagels could earn an A.
• Project documentation. Your classes and functions should include complete docstring documentation. You are also required to include a README file with your project submission. A README file is a simple plain text file that describes your project in more detail. The README should include:
• The name of your project
• The name(s) of the project submitters
• Whether your project is a game or a simulation or visualization
• How to play the game (game rules) and/or how to run the simulation/visualization (simulation rules). This should include information such as what extra files, if any, are needed to run the program. (If your program requires extra files, such as images, please include these with your project submission.)
• If there are any known bugs or issues with the program, please indicate them here.

## Project Ideas

To get you started with project ideas, here are some examples of games that students have successfully implemented in the past in previous offerings of this course:

• Battleship (a simplified version)
• Connect Four
• Text-based adventure games. (Be careful with these—it is easy to write a bad one and tricky to write a good one. Good adventure games present different paths of play to the user, and more paths = more complexity.)
• Mastermind or Bagels (a simpler form of Mastermind)
• Memory
• “Guess who” games—guess the person the computer is thinking based on characteristics, like hair color or class year. (This is a variation of “20 questions”, essentially.)
• Fishtank simulations
• Biological simulations (diseased vs. white blood cells, change of seasons)
• Agricultural simulations (given a set of initial conditions, a choice of crop, etc, will you be able to harvest your crop and get it to market?)
• Pacman
• Minesweeper
• Data visualization of oil spills across the Americas

If you’re stuck for ideas, or have questions about the suitability of a particular game, please come and see me.

#### Acknowledgment:

Some of the text from this assignment was originally written by Amy Csizmar Dalal at Carleton College and used with permission.