-1+1393 
Game Programming

--Please Read--

I'm getting a LOT of people asking me if they can sign up to the class late, and where to find things, and all of that. Yes, you can still sign up, just turn in your homework by the regular deadline. You can find all the lessons and postings so far by just going to the course subreddit.

--Okay, back to the actual description--

This course will cover game programming from an introductory level and continue to an advanced one at a brisk pace. The course is set up to be language-agnostic, although most example code will be in Java.

Prerequisites

The course assumes basic programming competency. Early lessons will be quite easy for anyone, but later lessons will be very difficult for newbies. You should be at least familiar enough with programming to have a preferred language and set up external libraries in that language. There may be lessons that require specific languages; these will be announced at least two weeks in advance to allow you to brush up on those languages.

Syllabus

Class will start September 29th and classes will be weekly from that point onwards. The syllabus given below is highly tentative and will be stretched if I decide a topic needs more time than I've given it, or a student names a topic I should cover that I feel fits in well earlier than what I've listed.

Note with the listed homework that you only need to complete half the assignments for a full grade. Doing every assignment would be impressive, but is not necessary. Do note that some assignments depend on others, so you should probably look ahead before deciding to skip something.

Lesson 1 - Choosing a language and libraries. Introducing the bog-standard game loop. Homework - set up a game loop using any language/library pair besides Java/Java standard library.

Lesson 2 - Entities, object-orientation, collision detection and entity interaction. Homework - make a shmup.

Lesson 3 - Ways to build worlds. Tiles, objects, lines. Homework - make a platformer.

Lesson 4 - Tools programming. Level editors, level loading. Homework - make your platformer have levels.

Lesson 5 - How to make object interaction reasonably speedy. Grids and quad trees. Homework - make your Galaga clone have over 100 enemies on screen.

Lesson 7 - AI and Pathfinding. A*, state machines. Homework - do something where a pathfinder interpets the player input.

Lesson 6 - How to make menus and animation without pulling your hair out. State machines. Homework - make your last game have menus.

Lesson 8 - More pathfinding. Floyd-Warshall algorithm. Homework - Geometry Wars with terrain and pathfinding.

Lesson 9 - Procedural generation. Cellular caves, simplex noise, the Roguelike algorithm. Homework - spice up that Geometry Wars clone

Lesson 10 - Scripting. LUA. Homework - add scripts and a couple Zelda-ish puzzles to any previous project.

Lesson 11 - Physics. Box2D. Homework - do any tank-based puzzle game (Tetris, Puyo) that needs physics

Lesson 12 - Memory management. Mempools in C. Homework - make any game take advantage of a mempool and not blow up

Lesson 13 - Winter break. This lesson will be dangerously close to Christmas so it's something esoteric and the homework is extra-optional. How to program for Java4k. Homework - create a game you will enter in the Java4k competition. There will be a week off after this assignment.

Lesson 14 - Polish. Lerping, particles, camera shake, hit pause, fake lighting, idle animations. Homework - make any previous homework shinier.

Lesson 15 - 3D. Getting a basic scene to render in OpenGL. Homework - make something simple with a 3rd person camera.

Lesson 16 - More 3D. Ray casting, hit checking the mouse. Homework - make something simple with a 1st person camera.

Lesson 17 - 3D Procedural Generation. Simplex noise again. Homework - minecraft clones.

Lesson 18 - Vertex Shaders. Grass and water. Homework - make that minecraft clone prettier.

Lesson 19 - Fragment Shaders. The standard bump/normal/diffuse-specular stack. Homework - make that minecraft clone prettier.

Lesson 20 - Geometry Shaders. Particles and subdivision. Homework - make that minecraft clone even prettier.

Additional information

The course will have weekly graded homeworks. Almost all homeworks will be in the form of games - you are not expected to make completed, polished games, but you are expected to write functioning ones. You can take the class without doing the homeworks, but that, of course, also means no grades.

70% of your grade will be based on completion. You will have to complete at least half of the assignments to get the full 70%. The rest of the grade will be based on "smile points" - you get one each time you turn in homework that does something with the assignment interesting enough to make me smile. I may also give one for suggesting an especially good topic to add to the curriculum or for outstanding class participation. Each point is worth an additional 3% on your grade.

Letter grades will be assigned on a typical American scale. 90-100% is A, 80-89% is B, and so forth. If you get over 100% you can have an A+ or an S at your whim.

Teacher qualifications

I mentored Experimental Game Design at Rensselaer Polytechnic Institute for three years. I also beat Notch at a game programming competition once.

Roster
1. adnzzzzZ
2. jtjin
3. flowwolf
4. shpen
5. 16384
6. thesoundofbutthurt
7. Atiran
8. KiNGMONiR
9. fuzzypickles
10. Typicaltool
11. justj736
12. Pilgrim84
13. gullwings13
14. Planktno
15. theheyway
16. leprasmurf
17. retracell
18. CoalabeR
19. yataf
20. Gaznapiro
21. mk32
22. teknobable
23. jthomason4
24. trukin
25. thelinx
26. ilikeloudnoise
27. weros
28. porcupinetr33
29. algrym
30. yamamushi
31. lemoen88
32. nonsensoleum
33. KaiserNiko
34. charksey
35. duffius
36. wojchiech
37. davidoffbeat
38. carloshellin
39. baegolas
40. binaryatrocity
41. mangostache
42. phi
43. wizzla37
44. syathish
45. ultrapenguinx
46. lalocal305
47. herabek
48. Tyaedalis
49. Rubuler
50. sashanas
51. Ravakk
52. FlamingBrad
53. Intrebute
54. Revus
55. Bisonst
56. wwmorbodo
57. FAF00
58. Booray
59. fib
60. vexleir
61. schwede
62. joncui
63. TheMunchdown
64. RussianT34
65. kurasekai
66. Actionjaxon
67. Ideh
68. DrMon
69. Twad
70. chello
71. gloatingfiddle
72. PlasmaNuke
73. tangentstorm
74. MadDrummer
75. nydas
76. ebcube
77. Exterminator_Jeff
78. shotintheface
79. iimsmartii
80. aroberge
81. Diphoration
82. pseri097
83. Pure
84. wromleyCR
85. 64-17-5
86. Kali101
87. pun_on
88. uor70
89. ronan
90. psyphen
91. scottyah
92. alihelmy
93. ThirteenXXXVII
94. solidsnake275
95. orthod0ks
96. switchmod
97. Sam_Penfold
98. Deathwing23
99. anastas
100. mitsuharu
101. Johnny-Stu
102. Crapulam
103. niner
104. Alex2539
105. glados_v2
106. maltmaker
107. Spid3r
108. polnisch_vodka
109. LexAurum
110. timepilot
111. Vaelin
112. Whiteshizzle
113. bfizzle55
114. DarkMetroid
115. sculptedpixels
116. airwolf
117. femme-fatale
118. saucykavan
119. spencergordon
120. artswar
121. emulator3
122. Lordlipp
123. ____-____
124. Lorisidae
125. rjberry
126. kazekh
127. Walizzay
128. lessonplan
129. thesnazzle
130. faykour
131. TurplePurtle
132. Xemerau
133. heash
134. RollForReflex
135. ParaIdioma
136. atubofpudding
137. Stormageddon
138. Sux0rz
139. Bence
140. Thatoneguyyoulike
141. toma
142. pyrsquared
143. ArneZeeHappyElf
144. ostenmaker
145. darkkish
146. legodt
147. jbolduan
148. admrla
149. enb
150. DarkR
151. binaryadder
152. 4dspacewhale
153. jhc142002
154. ArcAde
155. wazzup80
156. chesterdjester
157. Shasta
158. Tankyroo
159. essbuh
160. cloudLight
161. bwochinski
162. jwwest
163. DeadlyBrad42
164. BostonTentacleParty
165. Flymypretties
166. mpsollmann
167. mementor
168. phoez
169. abcdefghijklmno
170. Hamstazilla
171. QuantaStarfire
172. roe-ur-boat
173. deimosthenes
174. MovingDiagonally
175. Qua
176. algor
177. heffaklump
178. maooi
179. FingersMckenzie
180. TheMilkMang
181. Kilo_bytes
182. rafnafaf
183. tsunilly
184. kih10
185. Flunkie
186. cocushio
187. vagrancy
188. Mr_Moe
189. ArchVince
190. breize
191. loneknifer
192. JonTerp
193. pazuzuswings
194. trevegh
195. walesmd
196. Mnemic
197. oeleboele
198. Johnste
199. sievo
200. byny
201. Hondai
202. chellmuth
203. Leffy_
204. rpdmatt
205. Flambe
206. Aeroby
207. timmahh
208. cdepatie
209. firen22
210. brcosm
211. KillTek
212. joss
213. the_nonameguy
214. andr0x
215. opatut
216. Blam
217. migu
218. unclemeow
219. mrcode925
220. zeninja
221. Bobbybobbets
222. cr4ke
223. djayp
224. feembly
225. pit9
226. HalleTheBest
227. supertopher
228. PurpleTengu
229. adamjleonard
230. eyessewnopen
231. aedan
232. BopperBen
233. bluenotesblues
234. thegrinner
235. EvilNorwegian
236. lego6245
237. Flackintosh
238. kniteli
239. TheBlueBomber
240. youlysses
241. Savvy
242. sec_goat
243. Jeraman
244. akz08
245. jawells
246. jdgbolt
247. ElectricGuillotine
248. traeler
249. rohshall
250. indenturedsmile
251. iomi
252. blu3jack
253. cubrex56
254. moebius23
255. onemoretime842
256. kslez
257. Radmobile
258. jmakie
259. callummr
260. PhaZ90771
261. mikeb21
262. Another_Engineer
263. care89
264. Shimmybot
265. szcukg
266. kdmon
267. GeekDownUnder
268. GeekDownUnder
269. krelix
270. RONNCC
271. jnesque
272. orangebot
273. iiiioooo
274. add7
275. ApolloWire
276. daivernon
277. sunburntfish
278. RealityShift
279. reparadocs
280. bobsocool
281. willurd
282. lee890211
283. Woeps
284. kilrizzy
285. Tyrone831
286. dark1knight
287. boogergobbler
288. elletom
289. Art_Vandelay
290. SilentMoose
291. jonurt
292. zecastelo
293. BackslashN
294. mycatpurrs
295. korovian
296. twynsicle
297. brisch
298. flightcrank
299. BarrionuLucas
300. Faber160
301. Rumple_Manskin
302. everblue
303. zafarmukeri
304. cambam47
305. Frietjes_met_toscaanse_saus
306. gregounech
307. longlivetoni
308. st1d
309. dustygenius
310. NetGhost03
311. CJLMan
312. wadadli24
313. maniacstudent
314. aditya.jitta
315. ricoDMT
316. shine_on
317. pridefulpropensity
318. Nyx
319. maximx
320. MrMiyagiSan
321. icelus
322. phasebeta
323. pnapieralski
324. Danimalion
325. mandyrad
326. ratbattle
327. davebrown
328. zz3599
329. shadowkilla
330. Rhyme17
331. ndoss
332. BermudaCake
333. rubenasm
334. luisbg
335. xuomo
336. Sondar
337. jackroberts9
338. PlotCitizen
339. tufyhead
340. Ter0
341. nateshake
342. mlatura
343. spiffai
344. haydenn
345. daelious
346. ThatOneCat
347. spidey1
348. panuvin
349. sabinmash
350. jimjjin
351. skirina
352. mrzero
353. matchai
354. drbanus
355. thunderbeef
356. shirishgoyal
357. Amorphic
358. thor-godofrock
359. Vorian_Atreides
360. nick426
361. Captain-Lightning
362. un3n
363. mrmcfakename
364. tactfulradio
365. partlycloudy
366. necromortalis
367. neofu50
368. tweedelee
369. fairvlad
370. Jimasd
371. aponyforeveryamerican
372. machinefetus
373. kyrugen
374. arcadiex
375. gomson
376. truth1ness
377. Beginner
378. Cucumbis
379. Madzooks
380. wonderwander
381. linkzorCT
382. ohnomellon
383. rboy518
384. Flexcash
385. filigrano
386. JollyGoose
387. Woobr
388. Masterrr
389. tobrien6
390. ducktheory
391. ducktheory
392. neop
393. xOnic