🚀 when ready, each person can submit their final project here ⬅️
For your final project in this class, you will code a C++ project from scratch (outside of zyBooks!). You have a few options for this assignment, and you'll need to choose 1 of the following:
There are specific requirements for each option, but all of your final projects will require:
-
Work in pairs. Collaboration and pair programming is an important skill to learn! Choose someone in your same Friday lab section (either CC1 or CC2) so that you can use that time and space to work together.
-
Create code in the Replit environment, so that you can collaborate with your project partner and so that your code can be easily compiled and shared at the end of the semester.
-
Each person will need to write a short (400 word) statement about the division of labor between you and your partner, and some brief reflections on how the project synthesizes what you have learned in this class.
-
Your code will be evaluated on the specific requirements for each project, as well as style: is your code legible? Do you have some comments that help your fellow programmers understand your work? Do you use loops to avoid repetition, efficient
if/elsestatements, vectors or linked lists when necessary, and multiple files when you are writing classes? Have you developed a unique and efficient way of solving the problem or creating the project?
Create a text-based game, in the style of Colossal Cave Adventure. You will need to create your own storyline, write text-based prompts for your user to navigate the game, and write an ending (or multiple endings) for your user's character.
This is a very open-ended project, but your code must include the following:
- at least 5 functions that you write, outside of
main - at least 2 classes, and multiple instances of creating objects of those classes
- at least 1 game-within-a-game, where your user must play a game or complete a task using
rand(), the psuedo-random number generator - at least 1 variable that changes with your user throughout the gameplay (for example: a score; an inventory of things they are holding; etc.) - and we should have the option to see an output of this score, inventory, etc.
- at least 1 instance of ASCII art
- at least 10 "locations," or decision/branch points, for your users to navigate *
*The game does not have to be as long as Colossal Cave Adventure (there are 140 map "locations" in that game, when the user gets a chance to make a decision!), but this game should be an involved, significant experience to build and to play; it should take us more than 5 minutes to get through the action. Stretch yourself!
A few examples: your user is an astronaut exploring Mars, and she finds a locked safe in a crater and needs to crack the combination to open the safe as part of the mission; OR your user gets a new job counting rats in NYC subway tunnels, and needs to guess which train is coming first to avoid danger; OR your user is a student studying in the CCNY library, who finds a book with a note in it, which leads them to a party where they have to play Blackjack, or at the door in order to get in; OR your user is starting a garden, and they have to respond to random acts of weather by choosing the right tools and actions; OR your user is shipwrecked and they have to find their way home, including picking up items on an island and guessing a password in order to stow away on a pirate ship; etc. etc ... this is a chance to be creative and explore a story that you enjoy.
Create a program that analyzes spatial data. Being able to determine the frequency and distance between points has all kinds of applications, from computer graphics to machine learning. In this project, the spatial data will be given to you in the form of points, either 2D (x, y) or 3D (x, y, z) - and you will need to receive the data input by uploading a file.
You can download the file that you'll need to add to your program here.
How to do you begin and read this file in your project?
- Create your project on Replit
- Upload the .txt file to the file system (on the left) of your project
- You can look at zyBooks Chapter 9.5 for further instructions on how to read data from an external txt file. Also, you can check out this example code: https://replit.com/@mab253/read-file-example#main.cpp
After the file upload, your program will need to analyze and output the following:
- Count the number of 2D points in the uploaded file
- Count the number of 3D points in the uploaded file
- Count the frequency of 2D points - how many points in the dataset have the same (x, y)?
- Count the frequency of 3D points - how many points in the dataset have the same (x, y, z)?
- Calculate the farthest distance between two 2D points in the dataset
- Calculate the farthest distance between two 3D points in the dataset
- Write at least 6 functions outside of
mainto accomplish these tasks
Do you have a project idea that you and your partner really want to build? (Maybe something with openFrameworks, maybe something with cryptography?) You can send me your idea via e-mail or Discord by May 3rd, and I will either approve it or suggest changes in scope/difficulty.
-
First milestone: choose your project (1, 2, or your own idea) and your partner from your lab section by May 5th. You will need to fill out this form to share your project choice and your partner by 11:59pm on May 5th.
-
Final project delivery, including short reflection texts and code via the Replit platform, due May 19th @ 11:59pm.
-
🚀 when ready, each person can submit their final project here ⬅️
- No late work accepted for final projects. If you have an accomodation, you need to tell me this beforehand.
- Academic honesty, as always, applies to this assignment - even more so as this should represent your own work, as this is not a lab/practice problem. Violations of the academic honesty policy will have serious consequences, including but not limited to failing this course. Do not plagiarize writing or code!