FINAL PROJECT

Each week this semester, you have been doing labs and homework assignments that emphasize specific aspects of the C++ programming language. For the last few weeks of the course, you will make use of these language skills in the context of a larger, more realistic project. The goals of this project are:

The assignment is somewhat open-ended. You may choose to write a program that plays a game, reads large data files and does a complex calculation with the data, or anything in between. Some detailed requirements are given below, so please read this document carefully.


PAIR PROGRAMMING

For this project, you may choose (not mandatory) to work with a partner using the pair programming technique. In the pair programming technique, two programmers work together on one computer. One is designated as the driver and writes the code; the other is designated as the navigator and reviews each line of code as it is typed. The two programmers switch roles frequently. For this lab, the programmers should switch roles at least every fifteen to twenty minutes.

Pair Programming is an element of a software development methodology called extreme programming, where code is being reviewed continuously by the navigator. Many companies, including Facebook, Twitter, and Groupon, sometimes use pair programming in their code development. In fact, in industry, it is more likely for a programmer to work in a pair or a team instead of alone. We encourage you to give pair programming a try!

You may choose a partner from a different section, but both of you must be able to attend the same section during the last few class meetings (as these meetings will be devoted to working on the project). Additionally, you should be sure your schedules align such that you will be able to meet outside of class three or four times over the last few weeks of the semester.

Note the requirement in the last step to include your usernames in the header comment!

Reminder: Pair programming is not the same as team programming.
Both programmers must be present at all times when working on the project. There will be a 50% penalty if the instructors discover that a pair has broken this policy.


REQUIREMENTS

Project Definition (due November 20th, in class)

Project Code (due December 9th, 8am)

Project Paper (due December 9th, 8am)

Create a text file called final.txt which contains the following sections WITH the section titles listed below. This file is submitted with your code (see Submission instructions below).


RESOURCES

While you may search on the Internet for hints as to how certain things are done in the C++ language, you should not directly copy and paste code found from resources outside our course.

That said, any resources we have used in this class from previous labs and homework assignments are fair game for use in your project. For example, if you need random numbers for your project, you are welcome to copy/paste your random number generator function (called myRand) from Lab 05A.


INCREMENTAL DEVELOPMENT

Now that you are designing and writing a large project from scratch, the "Incremental Build" model of software development is more important than ever before. This is a software development methodology where the model is designed, implemented, and tested incrementally, adding a little more functionality each time, until the product is finished. In other words, write a small amount of code to do one specific task, then run the program to be sure what you have done so far works. Only when you are satisfied with what you have so far do you move on to the next part of the program.

In short, implement and test small parts of your program as you work!


PROJECT POSSIBILITIES

There are numerous different project ideas possible. Here are a few examples:

Breakout

In the classic arcade game Breakout a layer of bricks lines the top third of the screen. A ball travels across the screen, bouncing off the top and side walls of the screen. When a brick is hit, the ball bounces away and the brick is destroyed. The player loses a turn when the ball touches the bottom of the screen. To prevent this from happening, the player has a movable paddle to bounce the ball upward, keeping it in play.

In this game, you might want to develop the following three classes: Paddle, Brick and Ball.

Frogger

Another classic arcade game, Frogger is a game in which the object is to direct frogs to their homes one by one. To do this, each frog must avoid cars while crossing a busy road and navigating a river full of hazards.

Classes such as Frog, Car, Truck, Log, Turtle, Crocodile, and others could be used in implementing this game.

Othello

The Tic Tac Toe program written for Homework 09 provides a good starting point to implement other games with two-dimensional arrays as playing areas. Possibilities include Connect Four, Reversi (aka, Othello) and Battleship.

Playing Cards

Several of you might be thinking about a program that plays a card game, such as Blackjack or Video Poker.

In this game, you might want to develop the following three classes: Card, Deck, and Player.

Non-Games

Finally, there is no requirement that your final project be a game. For example, if you are passionate about bike riding, you might create a program that calculates the optimum front and rear gears that should be selected on a bicycle, given a degree of incline and current velocity. Users select the type of bicycle, specify their speed, pain threshold, and degree of incline. The program then informs the user of the front and rear gears that should be selected.

Or maybe there is something you could write that would be useful for your major or other classes. Anything that meets the requirements of the project (see above) is fair game.

Other Ideas

If you have other ideas but need a bit of help with the design, please feel free to talk to your instructor or a tutor.


POINTS

CriteriaPoints Possible
Project behaves as expected (Frogger moves and avoids objects, Othello flips tiles properly, card games follow rules, etc.)18
Project makes appropriate use of a class 12
Project makes appropriate use of an array (or vector) 7
Project makes appropriate use of file I/O (or SFML) 7
Project makes appropriate use of functions 7
Project makes appropriate use of constants and data types 5
Project includes meaningful variable/function names and ample commenting for readability 2
Project follows our CSCI 261 style guidelines2
Project Description (due Nov 20th) 5
final.txt file (due Dec 9th) 5
Project compiles and runs - if it doesn't compile and run, it will not be graded
(It is simply unacceptable to turn in a project that does not compile or run.)
-70
Total70


SUBMISSION

Ideally, your project will consist of multiple files (e.g., class header, class implementation, main, a data file). You should place all these files in one directory (or folder) called src. You should also add your file called final.txt, which is detailed above, to the src directory. Then, zip the directory to src.zip, and submit this file.

NO late assignments will be accepted.