For the final project in this class, you will design and implement a program that uses many of the concepts we’ve learned over the semester. There are suggested project ideas below, but you’ll also have the option to come up with a project of your own design (as long as it meets all of the requirements). You can work in groups of up to three students on the project, but you can also choose to work individually if you prefer. We will have multiple days of class reserved to work on projects, but you will need to find time to work on your project outside of class as well.
You’re welcome to develop your own project ideas, but here are a few suggested topics you might consider:
Tetris: This classic block stacking game should meet all of the project requirements, even if you leave out some of the block shapes or skip features like rotating blocks.
Snake: This game seems very close to the lightcycle game you already implemented, but with some added complexity. The game generates apples randomly on the board, and the snake grows longer each time it eats an apple.
Asteroids: This is another classic game that might be a bit more of a challenge, since everything in the game moves and can collide.
Getting this game to display with ncurses could be difficult, so you may need to use an actual graphics library (we’ll see one soon).
Platformer: You could implement a classic 2D platformer for the project, as long as you have at least some moving elements other than the player.
All of these suggested projects are classic games, but your final project doesn’t have to be a game. A physics simulation, mathematical demonstration, or some other kind of interactive software could all be acceptable projects as long as they meet the requirements below. The best project is one that you’re excited about, as long as it meets the requirements and is appropriate scale for the time we have available.
You are welcome to choose any of the suggested projects above, but if you are interested in doing something a little different that is also an option. Whatever your chosen topic, your project must have all of these elements:
ncurses beyond just displaying lines of text would qualify as “graphical.”structs, enums, or unions.
Your project must use at least two of these elements.malloc and free.
This could be a changing number of objects in a game, an algorithm that requires variable size state, or something else.You can probably think of a project that covers all of these elements but doesn’t align with the expected scope or difficulty for an end-of-course project. To be accepted, your project must have an actual need for each of the elements above and must make non-trivial use of each element. The instructor will make the final decision about whether a proposed project meets these requirements.
There are other requirements for your project laid out in the grading section below, but any acceptable project should be able to meet them. Make sure you review all the graded elements of the project at least briefly before you commit to a project to be sure you can satisfy them.
In addition to implementing something for your project, you’ll present it to the rest of the class during finals week. Your presentation will need to include a live demo of your project, so make sure you prioritize building something you can run and show to the class by the scheduled presentation time.
Each group will have ten minutes to present their final project, plus a minute or two for Q&A while we switch between groups.
What did you plan to build? (1–2 minutes)
Give us a quick overview of the program you’ve planned to create.
What have you built so far? (3–5 minutes)
Give a live demo of your project as it stands right now.
It’s okay if not everything is working, but you should prioritize your implementation work so you have something to demonstrate for us.
How does your project work? (2–3 minutes)
Give us a tour of your design, and highlight one significant challenge you’ve encountered.
You can show us some code if necessary, but focus on higher level design.
What is left to do? (1–2 minutes)
Tell us about the work you’re still planning to do on the project and, if there’s time, a few details about how you plan solve any remaining problems.
Your projects will be worth the equivalent of two homework assignments. To receive full credit, your project must meet all of the following requirements:
README file that explains what the program does, how to use it, and gives some detail about how it works.
You must also include a Makefile that compiles the project from source.You are welcome to use any concepts we have covered in class on your project. If you find a C language feature, a library, or some other tool you would like to use as part of your project that may be okay. Just make sure to discuss it with the instructor before you incorporate it into your project.
The project deadline is the latest time that work can be accepted during the semester. Late work can only be accepted if you have an approved incomplete from the registrar. If this is something you need, make sure you pay close attention to the registrar’s deadlines and discuss the possibility of an incomplete with the instructor.
As with all work you do in this course, the academic honesty policy applies to your work on this homework assignment. Unlike individual assignments, you are welcome to discuss any aspect of your project with your project group. You are also welcome to discuss your project with students who are not in your group. However, you may not share project code with anyone outside your group. Academic honesty violations will be reported to the committee on academic standing, and can result in penalties for your grade on this assignment or the entire course if you are found responsible for the violation.