Lab 10: Final Project
For the final lab, you will construct a program of your own design
that demonstrates what you have learned over the course of the semester.
I strongly recommend that you work in pairs for this project,
but you may work by yourself if you really prefer.
The objectives for this assignment are for you to:
Demonstrate overall competence in the C programming language.
Gain experience in designing a program from beginning to end.
Have some fun and show your creativity.
The Requirements
The program must be written in the C language.
It must compile and run correctly on the Linux machines in the CSE 20211 lab.
It must be sensibly divided up into multiple functions.
It must require the use of arrays, strings, and pointers somewhere in the program.
It must use a Makefile to build the program. (Not required since we did not cover Makefiles in time.)
It must be about twice the complexity of a normal lab.
Some Ideas
Recreate a classic video game using the gfx library:
Asteroids: a little ship maneuvers arounds and shoots at asteroids, which then break into smaller pieces. Don't get hit!
Lunar Lander: navigate a small ship onto a safe landing pad, avoiding the rocky terrain. Don't run out of fuel!
Air Traffic Control: Airplanes appear randomly at the edge of the screen. Each airplane travels in a straight line until told otherwise. Direct each one to a runway on the screen, avoiding collisions.
Create a realistic simulation of a physical process:
A fireworks show where multiple rockets shoot into the sky, then explode into little bits which fall to the ground.
A flock of birds (or bugs or horses) where every individual follows the
leader according to some simple rules. (Read about swarm intelligence.)
A billiards table where you simulate balls rolling around (with friction), bouncing off the sides, and falling into the pockets. Let the user control the simulation by shooting a cue ball from anywhere on the table.
Create a data processing application:
A graphical version of the travel agent program which displays your choices and itinerary as you build it. (Get some real airline data from open flight web site.)
Write a program to analyze data about your favorite sport. For example, if you have files containing a baseball records, process them to produce statistics about each player, records gained, and so forth.
Create a flexible graphing calculator to help with your classes. Make it easy for the user to select a basic function, add parameters, choose the range, integrate the function, and display it on the screen.
These are just ideas to get you thinking -- you are encouraged to come up with your own.
Milestones
On Wednesday, November 13th, a program proposal is due. This should be a maximum of one page, and should indicate the two members of the project team, the name of the project, how it will work from the user's perspective, and how it will make use of the required elements of arrays, strings, and pointers. Turn in a printed copy in class, and I will return some brief comments to you.
On Friday, November 22nd, a design document is due. This document should sketch out how the program will work. This should consist of a call graph indicating the names of the functions you expect to write, and how they will call each other, prototypes for each function in the call graph, and pseudo-code for the most important parts of the program. Turn in a printed copy in class, and I will return comments to you.
On Wednesday, December 11th at 5PM, the program and final report are due. Turn in your source code and a final report in the usual format.
Turning In
Please review the general instructions for lab reports.
Turn in all of your source and header files, a Makefile and report.txt. Your lab report should cover the assignment, explaning how it works from the user perspective, how the program works internally, and how you verified that the output of the program is correct.
Turn in your code to either student's dropbox directory, but not both.
In the report, clearly indicate the two authors of the project.
Both students will receive the same grade on the project.
This assignment is due on Wednesday, December 11th at 5PM. Late assignments are not accepted.