|
Source: ONLamp.com I will close 2006 with a summary of my game development course I taught at Tufts University earlier in the year. You may be wondering why I taught the course considering my background is primarily in computer security and privacy. As I wrote in the beginning of the year, students in my previous computer security, privacy, and politics course expressed interest in more technical content including programming. Moreover, the Tufts Experimental College asked students what courses they would like to see in the future, and many said a course on game development. What better way to expose students to computer programming and the different facets of Computer Science than game development. I taught the class using Java. I had a little over twenty students in my class. A number of students had strong computer programming background, while others never did any programming before. I lectured on a number of standard game development topics including user interfaces, 2D graphics, game testing, texture mapping, animation, sound, and 3D graphics. Teaching the course in Java had its strengths and drawbacks. In short: Strengths:
Rich 2D graphics and UI widgets (e.g. Swing) all part of the standard development kit The “write once, run everywhere” paradigm worked well
Weaknesses:
The bugs in Java 3D and Java sound Extremely deep library with obsolete and deprecated classes
Students and I didn’t observe any glaring performance issues in Java, contrary to popular belief. I also didn’t find the notion that Java “is too high-level” to be necessarily true, considering depth of the Java Sound API and support for input devices including joysticks. The most important aspect of my course was creating games, and did that. I created five teams, each creating a different 2D game. Each team had technical and non-technical students. It would not be right if there was a team of all programmers and another team of students with no programming experience. I asked each team to submit a proposal for a game, and once approved, a design document for the game. For your pleasure, several of the games are available for download: BattleBlocks - An arcade style game somewhere between breakout and space invaders. Available for download on SourceForge.net (JAR file).
Flauncy Space Cows - Presented by Maniacally Obese Penguins, a nifty Asteroids clone. Design document for the game is also available. Build and run the game from source.
Startrain Chronicles - Based on, and extensive modifications, to Professor Andrew Davison’s “JumpingJack “(a sidescroller), presented in his book Killer Game Programming in Java. Build and run the game from source.
The production of games was a major accomplishment in my class. The accomplishment was reflected on my course evaluations: students were pleased that they had the opportunity to implement a 2D game, and the skills that they learned (the design, programming, and teamwork skills) were valuable. Some students wished that there was more programming involved in the course, while others wished that there was less programming in the course. In addition, several students wished that there were more discussions on the gaming business and on game engines. I enjoyed teaching the course, but it was no walk-in-the-park. Is Java relevant for game development? I think it is a great language for implementing 2D games. Several students even told me to just focus on 2D games if I do teach this course again in Java. Students and I struggled with Java 3D. For 3D games and using game engines, I feel that C++ is by far more suitable. I cannot thank and commend my students enough for their incredible work, and for a tremendous course. So I close 2006. Back to teaching computer security and privacy in 2007.
Source: ONLamp.com This week on the Perl 6 mailing lists “Grrr, otta profefreed my onw righting occashionaly.”
– Larry Wall’s commit message for r13508–one typo correction of many
Language Numeric Semantics Luke Palmer wanted a clear definition of when math should use floating points and when it should be integer-based. In response, Darren Duncan highlighted a recent #perl6 discussion on the topic. He proposed distinct operators to allow users to explicitly choose the math mode. Jonathan Lang mentioned that in the one other instance where there were type-specific versions of a common operator, a third ‘generic’ version was required. Dr. Ruud suggested giving numerics multiple faces.
Parrot Porters Re: [perl #41020] [PATCH] pmc2c.pl functionality extracted into separate package Earlier, James Keenan supplied some patches which he noted were not completely functional.
This week, chromatic made a few suggestions on the style of the code. James explained that some of his choices had been dictated by the fact that this was maintenance coding.
In another subthread, James stated that he had found a good way to run the tests. They are meant to be run before make.
After Kevin Tew reported some failing tests, James requested the output with the failing tests. Will Coleda suggested that perhaps James could make the tests give a helpful error message if they are run at the wrong time. James added the suggested patch.
chromatic sent James his test results. With the newest patches, everything worked. chromatic committed them as r16345.
Building Parrot::Embed on Windows XP / Visual C++ Ron Blaschke reported two warnings he had seen from trying to build Parrot::Embed on Windows/VC8. He had some questions on how to proceed. chromatic and Ron tried to find a patch which would fix the problems. A solution was applied as r16229.
[perl #41125] [PATCH] Fix small typo in root.in Nikolay Ananiev’s patch in ticket [perl #41125] was applied as r16239.
[perl #41128] [PATCH] Fix #41122: ParrotObjects don't call init_pmc vtable In ticket [perl #41128], Matt Diephouse submitted a patch but didn’t commit it because it affected code other people are maintaining. chromatic agreed with the patch because it didn’t break any tests or modify the external interface.
Creating Keys in PIR chromatic discovered that writing tests for keyed variants is painful. He wanted to see working PIR for creating a key for a nested namespace. Bob Rogers supplied a patch and wondered if it was what chromatic had had in mind.
Re: [perl #41132] [BUG] Segfault in Parrot_call_sub_ret_int Nikolay Ananiev created ticket [perl #41132] to deliver a patch. Jonathan Worthington replied that he had applied the patch, because it was consistent with Parrot_call_sub. He asked if Nikolay could look at related code to see if similar fixes were needed. Bob Rogers explained the underlying problem as he saw it.
chromatic wondered if it would be possible to create some documentation on how contexts, interpreters and code segments work. Bob said he’d try, but that he was just learning about code segments as well.
[PATCH] make pdump's output about debug segment more consistent Lee Duhem submitted a patch to make pdump’s output more consistent. This was ticket [perl #41140]. It was applied as r16269.
GC problem in parrot_pass_args to a tailcall (r16239) Bob Rogers wrote about a segmentation fault which is triggered during argument passing after a tailcall. He gave an analysis of the problem and provided a patch. However, he hoped that there was a better option.
[PATCH] Add get_name() Method to Namespaces chromatic supplied a patch to implement get_name() as specified in PDD21. He did not check it in because it changed the API.
[perl #41141] [PATCH][Win32][VC] Minor display cleanup during compilation In ticket [perl #41141], Ron Blaschke reported a problem with compilation output on Windows. He supplied a patch to correct this.
[perl #41144] [PATCH] refresh front page of parrotcode.org Allison Randal submitted a patch as [perl #41144]. The patch cleans up the main web page at Parrotcode.org. James E Keenan wondered who applied these types of patches. Will Coleda applied the patch and gave instructions on how to acquire commit access to the website.
Mac OS X Concurrency Allison Randal gave the URL to an article on Mac OS X concurrency.
Exceedingly lightweight C embedding Allison Randal posted a link on the topic.
Users gather { if $xy.was_taken { … } } Gilbert R. Röhrbein asked if there is a way to look inside a gather-block if something was already taken. He included some example code of how he thought it would work.
Acknowlegements This summary was prepared using Mail::Summary::Tools, available on CPAN.
If you appreciate Perl, consider contributing to the Perl Foundation to help support the development of Perl.
Thank you to everyone who has pointed out mistakes and offered suggestions for improving this series. Comments on this summary can be sent to Ann Barcomb, kudra@domaintje.com.
Happy New Year!
Distribution This summary can be found in the following places:
use.perl.org The Pugs blog The perl6-announce mailing list ONLamp
See Also
Perl Foundation activities Perl 6 Development Planet Perl Six
|