Adios, Amoebas!: Technical stuff

This game has pretty much the same structure as most of my other Java games. There is a single thread that controls all the animation and updates the screen once every 75 milliseconds or so. It's only the structure of the offscreen image buffer that really needs an explanation.

As you may know, there are two ways of drawing "chunks" of graphics in Java. The most common one is drawImage. The other one is copyArea. While the latter is less powerful, does not preserve pixel transparency and can only copy from one place to another within the same image, it is also slightly faster. It's the speed advantage that motivated its use in this game.

All the image "building blocks" which don't need transparency (unlike the player and the moving amoebas), have been placed at the bottom of this image buffer (area number 3). There are 27 building blocks altogether. The playing field is built and updated by having such blocks copied onto area number 2 when needed. In each animation loop, the entire area 2 is itself copied onto area number 1, on which possible moving objects are drawn. That area is then drawn on the screen. This creates smooth animation at a relatively low cost. (Of course, the small size of the applet area also helps.)

To keep track of what's going on in the field is an array of integers. The lowest 8 bits contain information about objects and such. (If bit 0 is set, the player is (at least partly) standing on the corresponding tile. If bit 1 is set, there's an amoeba on it. Bit 2 means a moving weight. Bit 3 means the tile is flipping around, etc.) This is used for, among other things, determining where to flip objects in or out. A counter variable sweeps the board one tile per animation cycle. If it finds an empty tile (no object, amoeba or player), a random number is within a given range and a few other conditions are satisfied, a new object gets flipped in.

The top bits contain, where applicable, information about when the player was last standing on that tile, and in which direction he left. This works as a "scent trace" the amoebas can use to "smell" where the player is going. If the player has been on an amoeba's tile less than approximately 5 seconds ago and a random number falls within a specific range, the amoeba will follow this trace. The higher the level, the more likely this is to happen, and the more intelligent the amoebas will appear.

Amoebas can also change directions if they find a clear, horizontal or vertical path to the player. This too is more likely to happen on higher levels.