[...] The first phase of the contest was about implementing an autonomous player for 4 different versions of Pong. The games ran in a server, which would provide the status of the game in ascii, and accept commands via an URL with arguments.
All this stuff suggests a collaboration of multiple Smalltalk processes. [...] the strategy, which encapsulates the perception process [...] and the action process [...]
[...] the eyes, which take the latest raw status from the perception process and reify objects like balls, bats, the field, the scorecard, etc. [...]
[...] the strategy. It pulls the objects reified by the eyes and produces objectives based on the kind of game and whatever relationships it can perceive between the objects in play. The strategy then pushes objectives for the hands to meet [...]
[...] raw commands are queued by the hands at the interface by means of pushing. The action process pulls these raw commands out of the queue and pushes them to the game server.
All this is great except that the server was designed to not answer a status request until the next frame would start. This means that VW would lock until there was a new status [...]
Since the process scheduler and the processes themselves were nicely written, I changed the inner workings from 5 concurrent Smalltalk threads into 1 by reimplementing one method. Immediately, things started working much better. [...]
Since VW was quite fast even on this slow machine, I could bring up the server and fork off two players. Thus, I could see them play against themselves. I debugged the implementation by looking at the server display. Not the most time efficient manner, but it had to do.
[...]
We had 2 hours to implement this, but I had two Super Pong players competing against each other in about 30 minutes. Overall, I had created a strategy class with a few methods, an objective class with one method, and I had also pushed up a method in the strategy hierarchy. I spent quite a bit of time making sure they would not crash. And the final phase of the contest came to an end.