Video games have long captured the imaginations of computer users both young and old. Let us now hearken back to the early days of computer gaming, when the TV was the monitor, the "game paddle" was the latest input device, and pixels were the size of Cap'n Crunch cereal. Nowadays, the marketing gurus of the computer companies worldwide have decreed that if a game isn't 3-D and first-person1, it just won't sell. True gaming aficionados, however, know that video games originated from much humbler2 beginnings. Enter Pong, a simple 2-D black-and-white affair in which two paddles knock a ball about until it flies off the edge of the screen.
Although the rec.games.video FAQ is quick to point out that Pong was not truly the first arcade game, this pointed clarification is a clue to the historical importance of the game. 'Tis odd indeed to imagine a white square as a ball, a white line as a paddle, and hordes of people clustered around their home televisions staring at said graphics in amazement. Yet stare they did, and as the money flowed, so too did the ball continue to bounce endlessly to and fro3.
As Moore's Law dictates, technology progressed and computer games grew in complexity as well. Yet the time-honored tradition of ball-bouncing and paddle-sliding never dissipated completely, for nearly every computing platform since the early days has had its own implementations of Pong available. As one might expect, the recent influx of Java in the computer industry has spawned a multitude of Pong imitations, clones and lookalikes. Amazingly, none of these imitations have yet begun to approach the true look and feel4 of the classic arcade game.
The lack of a quality Java Pong implementation is particularly disheartening considering that "those who do not learn from history are doomed to repeat it." Interpreted literally5, this could be taken to mean that Java programmers are fated to produce one inferior Pong clone after another, never quite attaining the pinnacle of success celebrated by Pong itself in the late 1970s. This vicious cycle will undoubtedly continue until such time as an implementation sufficiently reminiscent of the original classic appears. In the interest of furthering the viability of the Java computing platform, I have taken it upon myself to rectify the situation. I present to you "Pang," in full glowing monochromatic color.
No Pang, No Gain
My version of Pong is christened Pang for two simple reasons6. First,
I would like to believe that the past tense of Pong is Pang, rather than
"Ponged." Second, experienced Pong players will undoubtedly
experience a pang of remorse for the golden age of computers while
playing. Insofar as possible, Pang is replete with the original
idiosyncracies we all grew to know and love. Born before the days of color,
Pong grew, lived and died in an era which forced early adopters to fiddle
endlessly with their RF adapters in a vain attempt to clarify the television
picture. Best of all, use of the Pong unit always seemed to result in the appearance of
lingering vertical hold7 lines in the midst of the display. Such drama!
The mouse is used to control the left paddle during game play, as true game paddles have fallen into disfavor of late. A simple mouse click toggles between demo mode and game play. As in the original, the player embodies the heart, mind and soul of a simple paddle. Scheming and conniving is fruitless when confronted with such simple complexity, as the astute reader will quickly observe. To succeed, the player must transcend the paddle and become one with the ball itself. Players would be wise to recall the words of Chevy Chase in the movie Caddy Shack: "Be the ball, Billy. Be the ball."
I have simulated in the game above the mind-cleansing "full vertical roll" those lucky few with older televisions experienced. Note also the "5 A.M. undead pixels dancing before your eyes," seen here in the background twitching perpetually back and forth . The V-Hold line mentioned previously appears now and again, and the wonderfully archaic computerized sound effects are sure to bring smiles to the faces of all true Pangers. As parents are wont to say on their child's 18th birthday, "Go nuts."
For those idealists in the audience, I also offer a look at Pang in Utopia, free of the pleasantries described above.
Pangs a Lot
Presented with Pang in all its glory, nervous game historians, venture
capitalists, and Java commentators the world over can now rest peacefully on
their haunches, aglow with satisfaction at this ultimate demonstration of
Java's maturity. Hedonistic game players are invited to while away the wee
hours of the night in mortal combat with their screen's pixels. Programmers
are welcome to peruse the complete 100% Pure Java source code to Pang,
available below. For those seeking Java projects, Pang yearns for a myriad of
additions and modifications, such as background music, a score-keeper, and
playing-field obstacles.
At some point in history, Pong was nothing but a gleam in a programmer's eye, much as Pang was in mine mere days ago. As Pong was carried forward through the ages, other classics such as Pac-Man and Frogger followed in its footsteps. Similarly, my hope is that Pang will set the stage for a multitude of more advanced, equally respectable and wholly entertaining Java game creations. The burgeoning crowds of Java programmers must rush to fill the void of quality cross-platform computer gaming, else they be doomed to repeat past failures until they learn from their mistakes. It is paradoxes such as these which prompted me to create Pang in the first place, and which leave me wondering whether I have in fact created a worthy successor. Perhaps I have simply repeated the mistakes made by the original programmer of Pong?
Enjoying oneself can be such a shameful thing, after all.
-- Walter <shaper@cerf.net> is presently working on the next version of the game to be released under the title "Beer Pang."
Source code to the applets written for this article (in
alphabetical order):
Ball.java,
Bouncer.java,
Paddle.java,
Pang.java,
PangText.java,
SillyBall.java,
SimplePang.java,
VHoldLine.java,
or grab the whole shebang as an archive.