In the second semester of my 2016-17 junior year in high school, I decided that I wanted to take the AP Computer Science A test. In order to teach myself the skills necessary, I designed a course based around the curriculum for AP Computer Science A. In addition, I decided to apply the programming skills learned throughout the course to design and program a game in Java.
Below are the three books I used during my course:
- Barron’s AP Computer Science A: This is a textbook by Barron’s that walks through all the skills needed for the test. This was the main way I learned the programming skills throughout the course. I did one chapter a week, including reading and exercises. It also included practice tests to track your progress. Buy it here.
- The Art of Game Design: A Book of Lenses by Jesse Schell: This is an excellent in-depth book that lays out every detail of game design. It uses small statements Schell calls “lenses” which show you how to view a game in a different way. Schell is a former Imagineer, which is a creative designer for Disney. Buy it here.
- The Nature of Code by Daniel Shiffman: This is a book that examines code in the context of “programming nature”. I used this book to teach myself some niche skills and also see useful examples of how I could apply my code to simulate real life events. Buy or read it here.
I am using three books for this year’s course. The first two are the Barron’s AP Computer Science A book and The Art of Game Design: A Book of Lenses, both of which I used last year. They were excellent books and super informative, so I think they’re a great choice. The third book I plan on using is a new one that I read this summer:
- Challenges for Game Designers by Brenda Brathwaite and Ian Schreiber: This book is similar to The Art of Game Design, but is much more interactive. The book presents a series of exercises and challenges to help build skills in game design and in collaboration. I plan to use this more as a supplement to the course rather than reading through the entire thing. Buy it here.
Here’s the official syllabus I wrote up for my teachers to evaluate.
Students will be able to demonstrate that they know and understand how to use the following programming skills and concepts:
- Console input and output
- The main() method
- Variable types and identifiers
- If statements
- Switch statements
- For loops
- For each loops
- While loops
- Javadoc comments
- Visibility modifiers
- Method overloading
- Abstract classes
- Boxing and unboxing
- Math class
- GUI building
- Creating and editing files
Students must also demonstrate that they know how to:
- Go through the steps of developing any program
- 1) Write or understand a program specification
- 2) “Translate” the specification into classes and methods to be programmed
- 3) Step by step program development (Program a class or method, test, debug, continue until class or method is finished)
- 4) Bring together all classes and methods
- 5) Test and debug
- Collaborate with other programmers to create code (for example, one student will program a class, and another must write a subclass for that class)
- Write clean and efficient code (code is readable and understandable by other programmers, uses the least amount of lines of code possible, and is not time-consuming to run)
Students will demonstrate that they understand the following concepts and how they work inside their game:
- The element of surprise
- The experience
- Intended audience
- Meaningful choices
- Reward and Punishment
- Indirect control
Here’s my current schedule for what we’re going to do in the class.
- Quarter 1: Teach basic programming skills in Java to the point where the students are ready to program a simple game.
- Quarter 2: Design and build a non-digital prototype of the game that we’ll finish at the end of the year.
- Quarter 3: Program the game in Java using the non-digital prototype as a reference.
- Quarter 4: Finish programming the game. Have other people playtest and give feedback, then improve the game to a finished, polished product based on results.
At the end of the course, our class will have produced:
- A non-digital prototype of the final game.
- A programmed version of the final game.
- A short “commercial” to pitch the game to an audience