Game Programming CS233G / Winter 2012 / PCC
Portland Community CollegeSylvania Campus, Technology Classroom Building (TCB) room 310 Instructor: Phillip Kerman
Telephone/Messages: 503-449-6701 Email: [email protected]
6:00pm – 8:50pm, Tuesdays 10th of January through 20th of March Web Site – http://www.phillipkerman.com/pcc/games
(where you’ll find--among other things--a PDF version of this syllabus) NOTE: Don't just read the notes. That is, do read the notes but don’t read only the notes. NOTE: The Course Content and Outcome Guide (CCOG) for this course currently online was written for a different course and is therefore out of date: http://www.pcc.edu/ccog/default.cfm?fa=ccog&subject=CS&course=233G
Course Content
Even though the course you'll be attending is not far from the CCOG above, I'd still prefer you consider the following as the actual content and intended outcomes for this course: Object‐oriented architectures and software design patterns used for game production. Students use ActionScript 3 to solve a variety of programming challenges facing game programmers, including: ‐‐designing and using data structures for user tracking/restoring as well as time/date maneuvers, ‐‐graphical APIs (Application Programming Interfaces) for dynamic vector and raster drawing, and ‐‐appropriate and practical architectural decisions including whether to use third‐party code libraries. In addition, students will research and survey a variety of third‐party code libraries to help with things like tweening, 2D, or 3D, as well as entire game frameworks. Such research reinforces the concept of having to constantly learn new topics. Students are welcome and encouraged to also study how HTML5/CSS3/JavaScript is solving similar tasks once unique to Flash. A strong emphasis is also placed on students building code that will necessarily be re‐written (refactored) multiple times on its way to exhibit good architecture. That is, you'll have to throw away code you write as you improve it. By understanding you’ll necessarily be refactoring helps you avoid spending an inordinate amount of time planning, designing, and optimizing all in an attempt to produce perfect code which, in reality, is never finished because it can never live up to the expectations. Give yourself permission to make bad code—in fact, I require it (you’ll turn in early revisions). But then, go back and improve what you’ve made. During their exploration of game programming students will naturally encounter (and resolve) a wide variety challenges which are less "code‐based" such as language and communication. For example, I place a high value on students’ ability to discuss the subject matter. Each student is required to maintaina list of vocabulary they’ve learned during the course. Additionally, I’m grading students on their involvement during discussions(both in writing via email and the mypcc discussions for this course as well as verbally in person). Expect to look at each exercise and project from multiple perspectives. You should: ‐‐actively participate in lectures and discussions. ‐‐do some work in lab while teacher is present. ‐‐do more work outside of the class—ideally including some time working with others. ‐‐do still more work researching topics as needed. ‐‐present some assignments to entire class. ‐‐get inspired to build code beyond the exercises, projects, and assignments from class. ‐‐pretend you love the class even if you have to lie to yourself. Is this class right for you? The prerequisites for this class are general but I expect one of two types of students: 1, you’ve got some programming experience (ideally a language that’s object oriented like Java or C++ or C#) but you’ve got little or no experience with Flash/ActionScript…or, 2, you have basic Flash skills and want to become more advanced—for example, you may have taken the courses MM240 and MM241. If you’ve never done ActionScript 3.0 (AS3) then expect to get up and running very quickly. The good news is you can see results very quickly—and it’s possible to do all the coursework with 100% free software. I’ll provide additional resources and screencasts that can help you get started. You will need to get your workspace set up and this can be a bit of a chore. Skills doing Object Oriented Programming (OOP) will make the transition to AS3 very easy. If you’re here to advance your Flash skills, you might be shocked by the strong emphasis on OOP. Plus, while everyone is welcome to use “Flash Professional” (the authoring tool) the best coding tools are nearly any other tool—so we’ll spend all our coding outside Flash Professional. You might need an OOP crash course and luckily I have resources to help you too. For everyone, remember that when learning something new… anything at interestingly complex… it’s likely that you’ll feel disconnected and as if you don’t know anything… at first. That’s a normal feeling. NOTE: Because the end of this week is the last day to drop, it's important that you understand what this course is all about. I'll attempt to clearly communicate that during the first class session. I'm certainly not trying to scare you because I believe this course will be one of the most fun programming classes you’ll ever take. (I know that most of the student who completed the course last year found it very fun.) NOTE: I suggest planning on studying for 4 to 8 hours each week (in addition to the 3 hours in class). It's best to break this up into many small or medium sessions and to take a variety of approaches to the work. Perhaps invest 1 hour before each class discussing with another student. Or force yourself to research and answer one or more question you encounter every week. There are many resources that can make this interesting such as simply reading from the ActionScript 3 Language Reference. (Be careful not to
fall into the trap of spending countless hours following mediocre or just plain bad online tutorials or videos. I'll be glad to review any you find if you want my feedback.)
Course Outcomes
Upon completion of this course, students should be able to: ‐‐Assess and specify programming tasks. ‐‐Refactor code—especially your own code. ‐‐Describe and build a game framework (not so much "build a universal framework" but more "make a framework that you can use for a specific project"). ‐‐Describe and implement code related to many of the ActionScript classes and packages… most notably flash.display, flash.geom, flash.net, flash.media (and most of the top level classes—like Array and XML). ‐‐Be comfortable and able to learn any additional unfamiliar classes from the ActionScript language. ‐‐Describe and create custom datatypes or "value‐objects". ‐‐Describe and build classes that extend display objects. ‐‐Describe and build systems that load content at both runtime and build time.Course Content (Themes, Concepts, Issues and Skills)
Demonstration of instructor's work including games programmed for MSN and MSN Messenger. Listen to wisecracks and attempts at humor (mostly failing) from instructor. Take practical and realistic approaches to problem solving. Attempt a solution, re‐analyze, and then re‐build. Clearly describe problems and systematically design solutions.Schedule Overview
Course overview. AS3 basics/display options and class architecture. Designing data structures for user tracking. Scaffolding/stub code, prototyping. Common maneuvers using String, Date and Time, and Bitmap/Vector display. Specifying and scoping game projects. Dispatching custom events. Build infinite scroll, gravity features, and basic navigation. Building custom vs. leveraging others' code. Use and study tween engines and other libraries including frameworks. Explore performance enhancements. Students share framework research. Summary of course. Final project TBD (to be decided).Assignments
“3 things”—Due at beginning of class every Tuesday Before the class start time of 6pm, students must turn in (email or paper) and have available for discussion a list of three specific things they learned during the previous class session including your homework. Note: these “things” must be stated in a way that I can confirm your understand a topic. That is, don’t just say “I learned about events” because I can’t say for certain if you are correct or not. You need to state the “thing” in a way that takes a stand on a topic. Often it will be more specific. For example, you could say “I learned that events are just strings—though every event name has a static property you can use”. That’s clearly either true or false. This example happens to be correct—but it’s totally satisfactory for any or all of you “things” to be wrong (as long as they’re stated properly). Often students will leave out details or state something incorrectly. The purpose (and value) of this assignment is that I can address very early any miscommunication/misunderstanding. Homework presentations due in class as assigned (about every other session): I will periodically assign homework about which you will need to present, turn in, or complete a quiz (depending on the assignment details). NOTE: at least one assignment will involve you presenting in front of the whole class. Vocabulary: Each student will collect a list of vocabulary words acquired during the course related to ActionScript programming as well as programming generally and the games industry (or at least the casual and online game industry with which I'm most familiar—but you're welcome to expand to any corner of the industry). You must send me all the terms/words (and your definitions for each) and I will provide feedback. It’s possible that you may know many of the terms that come up in class—that’s fine. Either way, however, you’ll be prepared for the vocabulary quizzes later in the course. I doubt very much that any attentive student will find any terms to be completely unfamiliar (that is, you’ll recognize every term that I quiz you on). In‐Class Exercises: There will also be additional exercises assigned during class where I will want to review your code. Sometimes this will be as easy as letting me just see where you're headed on a task. Other times you'll have to email me the code you complete outside of class. Often I'll make you re‐do the work multiple times to improve upon your code. NOTE: it's best to attend class to learn of these assignments— however each week by midnight on Thursday (or before) I'll post all assignments to the following website. You can't pass this class without attending the sessions however the assignments will be clearly posted at www.phillipkerman.com/pcc/games. NOTE: The page above won't win any awards for visual design or even usability—however if you simply read everything you will find details for every assignment. NOTE: no student should find the workload for this class insurmountable—provided you have the interest and time to invest into this class. It's quite possible that I reduce some of the requirements oreven make up alternatives more appropriate to how our course develops. I want this document to accurately represent expectations for the class—but I'm also a very practical human and adaptable. Keep in mind, this is simply my plan. It will likely get adjusted as the course progresses.
Detailed Schedule
Weeks 1 & 2 Lecture: Class format, course overview, and "Being a Programmer" Demo: Two games I've built: Spot‐the‐Difference and Tic‐a‐Tac Poker Lecture: AS3 Overview including ways to make a .swf, ways to display content, and how to use the language reference docs. Also, I'll point to additional resources for learning OOP, ActionScript, and Flash. Exercise: Save/restore many objects. Exercise: Homemade tween Weeks 3 & 4 Lecture: Prototyping, stub code, and "The Lazy Programmer" Demo: Jigsaw and prototypes. Exercise: Timers Exercise: Strings to express numeric values. Exercise: Dynamic graphing. Weeks 5 & 6: Demo: Multi‐user projects (meeting software, cattle auction, MSN Messenger games) Demo: Randometer, HP Timeline Lecture: Dispatching custom events. Exercise: Infinite scrolling Exercise: GravityGrading Policy
My assessment of student comprehension and ability involves a variety of methods. Attendance: I take role and consider attendance to be a critical part of completing the course. "90% of success is just showing up." If you miss a little bit of class it won't necessarily cause you to fail but I doubt very much any student can learn the necessary content without attending most all the sessions. Try to avoid traffic accidents just to arrive on time—if you miss a little bit here or there you'll probably be fine. Unless you already know the subject matter from class (which would be odd because taking this class would necessarily be a waste), then do plan on attending each class. In‐class participation: I know that students who actively participate get a lot more out of my classes. Try NOT to simply look at the subject matter and determine what parts I want you to learn. Rather, try to learn all you can about what I am covering. Part of your challenge will be to decide what NOT to study. That is, only given all the time in the world can you learn "everything". We don't have all the time in the world so you'll often need to make the tough decision to stop studying (say, to sleep or move on to other topics).Written and verbal communication: Chances are none of us are savants in the field of game programming. But no matter what field you pursue in life, you'll be more successful if you can communicate to others. For me, I find the best way to judge your ability as a student is for me to consider how you talk and write about a subject. That is, you can't just turn in beautiful code with no comments and expect a good grade. Assignments, exercises, quizzes: I'll provide prompt feedback for every assignment you turn in. However, I do not have a mathematical formula whereby you can calculate your grade by adding up all your results. When grading I usually find there are three groups of students: 1) obvious A students, 2) obvious D/F students (Fs for those who aren't present), and 3) the B and C students—which are the hardest for me to grade. It is with these B and C students which I apply an arbitrary but measured system that effectively applies a "curve". That is, I take these students and find specific reasons why one should receive a C (maybe they missed an assignment) or another should receive a B (perhaps they did better on all the quizzes). You will get a better grade if you’re simply an active participant in class (participate in discussions etc.). Because I mentioned the curve—be certain that I have no problem grading every student with an A. Extra Credit and Makeup In my years of teaching I found it appropriate only once to let a student do extra credit work and don't expect to see it happen again. It's much more rare than a total eclipse of the sun.