Project 11: Something Interactive
The purpose of the last assignment is to do something fun with your physics engine and user interaction. You can design a simple game or try simulating something interesting.
- Design Your Program
the first task is to design out your program. Your design should contain the following elements.
- Start Screen
The program must have a start screen. This does not have to have any moving parts, but it can. It should tell the user how to begin the main phase of the program.
- Main Phase
The program must have a main phase. The main phase should have some moving parts, respond to user input, and be something interesting. A pinball game would be a simple choice. Asteroids would be a more complex choice, but not too bad. Keeping it simple with very few moving parts is a good idea.
- Final Screen
The program must have a final screen. This does not have to have any moving parts, and it does not have to allow the user to replay the main phase. It can simply exit when the user provides the right input. Ideally, you want to tell the user something about their experience in the main phase, such as a final score.
The first required part of your report is your design.
Your design can be a written description, hand-drawn or computer-generated figures, or an algorithmic outline, or some combination. It must be legible and clearly specify what you plan to do and how you plan to do it. As part of your design, indicate how many static and moving obstacles are part of the design and which of those items can collide with one another. Also indicate all user interactions to which the program will respond.
- Start Screen
- Implement Your Design
The second task is to implement your design. Stick with the simulation design patterns we have used so far, such as having objects correspond to classes. If you find it useful to create additional parent and child classes, do so.
As you implement your design, think about places where you can test pieces of your implementation before you have to put lots of things together, any one of which might have bugs.
The second required part of your report is a discussion of your implementation, including at least one example of testing part of your implementation before combining it with other elements.
Do not include Python code in your discussion. Pseudo-code (Python-like code) is fine, but avoid having lines of Python in your report.
- Test Your Design
The third task is to test out your implementation. For this task, try to partner with someone and test each other's implementations. Discuss how to improve your programs to make them more responsive or interesting or fun.
The third required part of your report is a summary of your overall testing and any modifications you made to the program after having someone else try to use it.
No one writes perfect code the first time. If you change nothing after someone else uses your program, you aren't listening.
- Demonstrate Your Design
Show off your work. Have your friends try out your program. Take some screen videos of it in action. Take some still screen shots.
The fourth required element of your report is a screen video of your program in action and three still images--one image for each phase: start, main, end.
Extensions are your opportunity to customize your project, learn something else of interest to you, and improve your grade. The following are some suggested extensions, but you are free to choose your own. Be sure to describe any extensions you complete in your report.
- Make your program replayable so the user can return to the start screen from the final screen and replay the main phase.
- Make your program/game have more than one level.
- Spend time making your program visually interesting. Document this.
- Spend time making your program more fun. Document this and talk about the testing procedure you used (which should probably include other people).
- Two-player. Enough said.
- Simulate a new phenomena such as magnetism, orbital mechanics, or springs and dampers.
- The collision code does not take into account masses. A challenging extension would be to modify the collision code so that when two things collide the velocity changes take into account the masses. (Conservation of momentum, energy, and geometry.)
Submit your code
Turn in your code (all files ending with .py) by putting it in a directory in the Courses server. On the Courses server, you should have access to a directory called CS152, and within that, a directory with your user name. Within this directory is a directory named Private. Files that you put into that private directory you can edit, read, and write, and the professor can edit, read, and write, but no one else. To hand in your code and other materials, create a new directory, such as project6, and then copy your code into the project directory for that week. Please submit only code that you want to be graded.
When submitting your code, double check the following.
- Is your name at the top of each code file?
- Does every function have a comment or docstring specifying what it does?
- Is your handin project directory inside your Private folder on Courses?
Write your project report
For CS 152 please use Google Docs to write your report. Create a new doc for each project. Start the doc with a title and your name. Attach the doc to your project on Google classroom. Make sure you click submit when you are done. The graders cannot provide feedback unless you click submit.
Your intended audience for your report is your peers not in the class. From week to week you can assume your audience has read your prior reports. Your goal should be to be able to use it to explain to friends what you accomplished in this project and to give them a sense of how you did it.
Your project report should contain the following elements.
A brief summary of the project, in your own words. This should be no more than a few sentences. Give the reader context and identify the key purpose of the assignment.
Writing an effective abstract is an important skill. Consider the following questions while writing it.
- Does it describe the CS concepts of the project (e.g. writing well-organized and efficient code)?
- Does it describe the specific project application?
- Does it describe your the solution or how it was developed (e.g. what code did you write)?
- Does it describe the results or outputs (e.g. did your code work as expected)?
- Is it concise?
- Are all of the terms well-defined?
- Does it read logically and in the proper order?
- A description of your solution to the tasks, including any text output or images you created (including the required images/videos mentioned above). This should be a description of the form and functionality of your final code. Note any unique computational solutions you developed or any insights you gained from your code's output.
- A description of any extensions you undertook, including text output or images demonstrating those extensions. If you added any modules, functions, or other design components, note their structure and the algorithms you used.
- The answers to any follow-up questions (there will be 3-4 for each project).
- A brief description (1-3 sentences) of what you learned. Think about the answer to this question in terms of the stated purpose of the project. What are some specific things you had to learn or discover in order to complete the project?
- A list of people you worked with, including TAs and professors. Include in that list anyone whose code you may have seen, such as those of friends who have taken the course in a previous semester.