[[_5]]
== Exploring the Spacewar Example

_© Copyright 1997-2001 Xerox Corporation. All rights reserved._

_Last updated: January 10, 2001_

The code in this directory is an implementation of the classic video
game Spacewar.

The Spacewar game is intended to provide a modest-sized example of a
program that uses aspects. The code for this example is evolving, as we
add new features to AspectJ and come up with a better understanding of
how to use the features.

In order to compile and run this example, make sure to have the latest
version of AspectJ correctly installed. If you're not sure you do, try
the helloworld example first by following the instructions in
xref:../doc/primer/default.html[Primer] section Getting Started.

[[_5_1]]
=== Compiling Spacewar

* Change to the `examples` directory.
* Type `ajc -argfile spacewar/demo.lst` to compile the system.

[[_5_2]]
=== Running Spacewar

* In the examples directory, type `java spacewar.Game`

When the game starts up you will see two different displays. These are
the two built-in display aspects of the game. In each you will see a
single white ship and two red ships. The white ship is yours to control;
the red ships are an enemy robots. Your ship is controlled with the four
arrow keys to turn, thrust and stop; the spacebar fires. As you play,
the game will be displayed in both windows.

When running on a 1.4 or later VM, click in the main panel to give it
focus so that your keystrokes are recognized.

You can quit the game with ctl-Q.

[[_5_3]]
=== Exploring the Code

There is one other built-in configurations for the Spacewar game. Try it
by typing `ajc @spacewar\debug.lst`. This compiles in an elaborate
debugging aspect for the game.

We recommend you explore the Spacewar source code and look at the
aspects that it uses. You will find several of them, of different scales
and different degrees of cross-cutting. Remember that these represent
our evolving understanding of how to use AspectJ to implement Spacewar.
If you believe we should be doing something differently, then please let
us know.
