You might have noticed that the programming projects links from the landing website all take you to this same spot. This is because the introductory students and the AP Computer Science (APCS) students have choices on their projects and can choose to do many of the same projects. This does not mean that APCS students should just redo their introductory projects using java. I would suggest not doing that. What it means is that students have a wide array of options to choose from. And if there is something you would like to do that is not on the list of projects, talk to me about it. I may or may not allow it, and it may or may not make the list for current and/or future students.
All of the projects require using variables and/or constants, Input/Output (I/O), branching, and looping. A column of skills gives you an idea of other skills that are probably needed to do the project. (If looping is listed, then the previously mentioned skills should suffice to do the program.) Skills listed in parentheses are probably needed although you might be able to get by without them. And just because a skill (like using functions) is not listed, does not mean that you cannot use that skill or technique.
Intro students must incorporate code from 2 unique goal sheet problems in each project they turn in to me. The unique part just means that students cannot just keep incorporating the same goal sheet problems in each project they complete.
I may or may not get to updating the rubric right away, so I must make a note of importance here. Students must be able to explain their code. If they cannot explain their code to me, they are will not be able to get full points. If the code works, they can get 25/40 as a minimum. When explaining code, students should be able to change code from what they have to something more in line with what they know. This necessity to explain code has always been there, but it has become necessary to formalize it. Students should use resources to help them code, but they should not just take code from websites or get help from articifial intelligence (ChatGPT or CoPilot) or even other coders without understanding what they are writing. Too many coders copy and paste or take dictation without understanding what they are writing. You want to know what you are writing and how it works. That way, you can not only explain it, but you can more easily change the code in the future.
[Note: Projects that are too similar may not be counted as separate projects. For instance, the mastermind game and mastermind solver, maze creator and maze follower, path creator and path follower, and the two Levenshtein problems cannot be done as pairs and count separately. These pairs of programs may be done together, but will not count separately. There may be other programs than those listed that fit this category, so check to see.]
The Excel file rubric can be downloaded and used as a self-evaluation tool. It is more detailed than the rubric page. You may download it and use it as a self-check and self-evaluation of your project. Fill it out, print it, staple it to the front of your printed code, and turn it in.
The Game and App Development class uses a different evaluation tool. (It and some example write-ups can be found here.)
| Project | Description | Skills | Intro | APCS | Game & App | Semester |
|---|---|---|---|---|---|---|
| Goal Sheet Assignments 1 | Complete 9 assignment programs from Goal Sheets 2, 3, 4 (minimum of 2 per goal sheet) | I/O, variables, math, branching, looping | X | 1 | ||
| Goal Sheet Assignments 2 | Complete 8 assignment programs from Goal Sheets 6, 7 (minimum of 3 per goal sheet) | enum, classes | X | 1 | ||
| Etchasketch | Draw on the screen like an Etchasketch would | I/O, branching, looping | X | X | 1 | |
| Rock, Paper, Scissors | Play the game against the computer | I/O, branching, looping | X | X | X | 1 |
| Hangman | Implement the Hangman game | (arrays/lists) | X | Must read from a file | X | 1 |
| Maze | Create a text maze (graphic or not) of at least 25 rooms | looping (classes) | X | X | X | 1 |
| Adventure | Choose Your Own Adventure (extensive) | looping | X | X | X | 1 |
| RPG | Create a Role Playing Game (RPG) | looping (classes) | X | X | X | 1 |
| Typing speed tester | Test how many words per minute somebody can type | strings | X | X | X | 1 |
| Snake | Eat the characters while growing longer | classes, arrays/lists | X | X | 1 | |
| Pong | See if you can recreate the old Pong game (against the computer) | looping | X | X | 1 | |
| Packman | Play the old arcade game | strings, arrays/lists | X | X | 1 | |
| Goal Sheet Assignments 3 | Complete 8 assignment programs from Goal Sheets 10, 11 (minimum of 3 per goal sheet) | lists, files | X | 2 | ||
| Recursion Goal Sheet plus | Complete assignment programs from Goal Sheets 11, problem GS10-02 (writeSquares), problem GS10-04 (merge sort) 10, problem GS14-02 (isReverse), problem GS14-03 (anagrams) 14 | recursion | R | 2 | ||
| War (cards) | Play the card game War | classes, lists | X | X | X | 2 |
| Solitaire | There are many solitaire card games that you can implement | classes, lists | X | X | 2 | |
| Minesweeper | Create your own implementation of the classic computer game | classes, lists | X | X | 2 | |
| Pokemon | Another card game to play against the computer | classes, lists, files | X | X | X | 2 |
| Mancala | This might be a tough one to implement with text | classes, lists | X | X | X | 2 |
| Conway's Game of Life | Implement the classic computer simulation - Wikipedia article here | arrays/lists | X | X | X | 2 |
| Periodic Table from GS11. Use the given data file of comma separated values. | Find elements in periodic table | files, lists | X | X | 2 | |
| Wordle | Implement the game. Use the file with the legal words. (Note: If you do some investigation, you will note that not all the legal words are words that can be the target. See if you can implement this notion of two lists of words into your program.) | files, lists | X | X | X | 2 |
| Notes application | Create, save, edit text documents | files | X | X | X | 2 |
| Mastermind (must have scoring function that achieves 100% success) | Implement the classic game of breaking the code - More description here - Testing code Java Testing Code C# | lists, files | X | X | X | 2 |
| Mastermind player | Optimize the guesses to break the code the quickest (see if you can implement Knuth's algorithm) | lists, files | X | X | X | 2 |
| Levenshtein | Find paths between words - More description here | lists, files, recursion | R | X | 2 | |
| Levenshtein shortest paths | Find all shortest paths between words | lists, files, recursion | 2X | X | 2 | |
| Maze generation | Create mazes that have only one way out | lists, files | X | X | X | 2 |
| Maze Solving / Path Finding | Solve mazes with programming algorithms | lists, files, recursion | X | X | 2 | |
| Path Following | Follow a path | recursion | X | X | 2 | |
| War Game simulation (i.e. Axis and Allies) | Implement a tabletop war game | files, lists | X | X | X | 2 |
| Sudoku solver | Solve a given a sudoku puzzzle | lists, files, (recursion) | X | X | X | 2 |
| Other card games | Implement or create a card game | classes, lists | X | X | X | 2 |
| Williams Game Engine | Complete the Williams Game Engine Tutorial see this repo | all skills | R | 2 | ||
| Graphical Game | Create your own game using Williams Game Engine or Unity | all skills | R | 2 |
Legend:
X means that you can do this program in this particular class. No X does not mean that you cannot do it, but you will probably have more problems than you can handle. Mostly because of the Java interface. I know that this might prove to be a challenge to some people.
NX means that the project can be used for N projects. In other words, if you are required to do four projects and you decide to do a project with a 2X, you only need to do three projects total (unless you do another 2X project).
R means required. More than just Levenshtein may be required in the future.
The semester is a suggestion for introductory students. Not that introductory students cannot do second semester suggested projects, they will just need to learn more than the first semester content to do so.
Notes:
This list of projects is not comprehensive. It is a list of ideas. You can come up with your own projects, within reason. There are specific competencies or skills that you need to develop when learning to program. If you a project you suggest does not help you develop those skills, you will probably not be allowed to do it. At least not without some modifications. And if you come up with a good project that ought to be added to the list, I will do so. There are many good projects out there that are not listed here.
There are several projects (like Levenshtein) that would require introductory students to learn topics beyond their required course of study, like recursion. This does not mean that students cannot do the project.