Description of the 1991 IEEE CS National Programming Contest
Many people have asked for either a description or a copy of the
contest driver from last year. Unfortunately, the master tape was
corrupted and its immediate backup was stored incorrectly. For some
time, we have been unable to locate the automatic backup, however, we
recently found it. Included here is a description of the game "Gobble"
which was used as the virtual world in the 1991 National Programming
Contest. It bears few technical resemblances to the 1993 NPC, but the
"team effort" aspect of the game is important to note and will be
At present, we are very busy trying to finish the 1993 NPC code to meet
our deadline of January 30th for a mock contest needed to playtest the
world, and we do not have time to massage the 1991 NPC program and
release it. We are sorry about the inconvenience and hope that this
description will serve to illustrate how the contest driver worked.
npc.ece's internet address has recently changed to 22.214.171.124 .
Mails that were sent to npc on Dec. 18 may have bounced. Please mail
them again. We apologize for any inconvenience.
1993 NPC Chair
The game contestants had to create players for was called "Gobble".
It was basically a capture-the-flag game. The object was to get one
of your players to the middle of the screen, pick up the turkey, and
return it to your side. On each team were three players, Ma, Pa, and
Squirt. Ma was very strong and was armed with a frying pan which could
be swung very quickly but had a short range, and she moved slowly. Pa
was almost as strong as Ma, but he was armed with a hoe which has a
slightly longer reach but less power than a frying pan; he was slightly
faster than Ma. Squirt is the weakest but fastest player, armed with a
slingshot which takes a long time to shoot but has an infinite range.
If a player is hit enough times (depending on his strength), he or she
will pass out temporarily and recuperate his/her strength. There is no
way to kill another player permanently, and the turkey could not be
killed. Furthermore, the person carrying the turkey cannot shoot and
moves at half speed.
The world looked like this:
| BB |
| BBBB |
| BB |
| ______ _______ |
| | | |
|___ | | ___|
|p | | | | p|
|o M| O O |M o|
|r P| O T O |P r|
|c S| O O |S c|
|h | | | | h|
|___| | | |___|
| |______ _______| |
| BB |
| BBBB |
| BB |
M = "Ma" starting position
P = "Pa" starting position
S = "Squirt" starting position
T = Turkey starting position
O = Window- can see through but not walk through or attack through
B = Bush- can walk through and attack through but not see through
| or _ = Wall- can not walk through, see through, or attack through
The characters (Ma, Pa, Squirt, Turkey), the bushes, and the weapons'
areas of effect were modeled as circles. The walls of the house,
windows, and the porch areas were modeled as rectangles. The world
coordinates were 2D "floating point"- it was not a matrix-based game.
A point reflected a pixel position on a Sun workstation (resolution =
1152x900) for convenience.
Each character had a specified attack range, attack rate, attack
strength, "hit points", and movement rate. The players wrote
individual clients which controlled each player on their team. The
game processes (in UNIX) were laid out as follows.
.------+--------+------------> \______/ <---------+------+---------.
| | | | | |
v v v | | v v v
____ ____ ________ | | ____ ____ ________
/Ma 1\ /Pa 1\ /Squirt 1\ .----' '----. /Ma 2\ /Pa 2\ /Squirt 2\
\____/ \____/ \________/ | | \____/ \____/ \________/
The heartbeat process provided ticks to the server and served to time
the rate at which the game turns were processed. The sound and
graphics servers were given the complete state of the world so that
they could illustrate it and do the sound effects on workstations
separate from the ones with the character processes to give them all
the CPU. The server sent different information to each client,
depending on what it could see in the game. It also took commands from
the clients such as "move to X,Y", "attack at X,Y", and "pick up/drop
All communications was through TCP/IP sockets to insure that data was
not lost and to enable a game to be played on four machines with the
clients of one team on one machine, the clients of another on the
second, the graphics and sound on a third, and the server and heartbeat
on a fourth. Although the original intent was simply to spread the
load around, this provided an interesting side-effect. If one of the
processes on one team used too much CPU time, the other processes on
the team suffered, providing a potentially useful balance in the game.
All code was written in C, and the client interfaces were in C. The
graphics used the Sun pixrect library, using the full screen as the
playing field (256-color), and the sound used the Sun's internal 8kHz
speaker. The socket communications were in ASCII and used the
fprintf() and fscanf() functions to communicate. The background tiles,
animation tiles, texture maps, and starting/ending movies were all
drawn by hand and digitized. All artwork was scanned in on a Microtek
flatbed scanner on a Macintosh and were retouched using Adobe
Photoshop. The sounds were digitized from several sound effects CD's.
The music was performed live and digitized.