Game Programming CS233G / Winter 2012 / PCC Portland Community College Sylvania Campus, Technology Classroom Building (TCB) room 310 Instructor: Phillip Kerman Telephone/Messages: 503-449-6701 Email: teacher@phillipkerman.com 6:00pm 8:50pm, Tuesdays 10 th 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) Don't just read the notes. That is, do read the notes but don t read only the notes. 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 maintain
a 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. 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.) 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). 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. 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. 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. 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 or
even 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: Gravity Grading 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. Required A backup system such as a flash media drive or web storage. Better yet use an off site version control software such as GIT or subversion. "The file got deleted" is not an acceptable excuse for missing an assignment. Plus, you should want to keep some of your files. Find additional resources at: www.phillipkerman.com/pcc/games