aboutsummaryrefslogtreecommitdiffstats
path: root/docs/modules/ROOT/pages/examples/spacewar
diff options
context:
space:
mode:
Diffstat (limited to 'docs/modules/ROOT/pages/examples/spacewar')
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Bullet.java48
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Debug.java219
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Display.java165
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Display1.java201
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Display2.java136
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/EnergyPacket.java44
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/EnergyPacketProducer.java63
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/EnsureShipIsAlive.java35
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Game.java215
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/GameSynchronization.java54
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Makefile12
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Pilot.java44
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Player.java121
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/README.adoc56
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Registry.java126
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/RegistrySynchronization.java58
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Robot.java201
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/SWFrame.java92
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Ship.java296
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/SpaceObject.java106
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/Timer.java53
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/debug.lst2
-rw-r--r--docs/modules/ROOT/pages/examples/spacewar/demo.lst19
23 files changed, 0 insertions, 2366 deletions
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Bullet.java b/docs/modules/ROOT/pages/examples/spacewar/Bullet.java
deleted file mode 100644
index 6581dbbf7..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Bullet.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Bullet.java
-Part of the Spacewar game.
-
-*/
-
-package spacewar;
-
-class Bullet extends SpaceObject {
-
- static private final int SIZE = 3; //Can't be changed for now!!!
- static private int LIFETIME = 50;
-
- private int lifeLeft;
-
- Bullet (Game theGame, double xP, double yP, double xV, double yV) {
- super(theGame, xP, yP, xV, yV);
- lifeLeft = LIFETIME;
- }
-
- int getSize() { return SIZE; }
-
- void handleCollision(SpaceObject obj) {
- die();
- }
-
- void clockTick() {
- if (--lifeLeft == 0)
- die();
- super.clockTick();
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Debug.java b/docs/modules/ROOT/pages/examples/spacewar/Debug.java
deleted file mode 100644
index a3afb1dda..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Debug.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-Debug.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import java.awt.Menu;
-import java.awt.CheckboxMenuItem;
-import java.awt.Frame;
-import java.awt.TextArea;
-import java.awt.Dimension;
-
-/**
- * This aspect specifies debugging information to be output to the
- * information window.
- *
- * When the debug aspect is compiled in the Frame menu has several checkbox
- * items that can be used to control the amount of tracing information
- * displayed. (By default the first three are off, because they generate
- * so much information.)
- *
- * There are two reasons to gather all this debugging code into an aspect
- * like this:
- *
- * (1) It makes it easier to understand when it is all in one place.
- *
- * (2) It means that we can "plug and debug". We can enable/disable
- * the debugging code simply by weaving or not weaving this
- * aspect in.
- *
- * All in all, this is a lot better than the usual practice of writing
- * complex debugging code and then deleting it when the bug is found,
- * only to regret it a month later when a related bug surfaces. (Or even
- * the same bug!)
- *
- * This file also defines a class InfoWin, which it uses to display all the
- * debugging information.
- */
-aspect Debug {
-
- private static InfoWin infoWin = new InfoWin();
-
- private static Menu menu = new Menu("Debug");
-
- private static CheckboxMenuItem traceConstructors =
- new CheckboxMenuItem("trace constructors", false);
- private static CheckboxMenuItem traceInitializations =
- new CheckboxMenuItem("trace initializations", false);
- private static CheckboxMenuItem traceMethods =
- new CheckboxMenuItem("trace methods", false);
- private static CheckboxMenuItem traceClockTick =
- new CheckboxMenuItem("trace clock tick", false);
- private static CheckboxMenuItem traceRegistry =
- new CheckboxMenuItem("trace registry", true);
- private static CheckboxMenuItem traceFireCollideDamage =
- new CheckboxMenuItem("trace fire, collide, damage", true);
-
- after() returning (SWFrame frame): call(SWFrame+.new(..)) {
- menu.add(traceConstructors);
- menu.add(traceInitializations);
- menu.add(traceMethods);
- menu.add(traceClockTick);
- menu.add(traceRegistry);
- menu.add(traceFireCollideDamage);
- frame.getMenuBar().add(menu);
- }
-
- /*
- * all constructors
- */
- pointcut allConstructorsCut():
- call((spacewar.* && !(Debug+ || InfoWin+)).new(..));
-
- before(): allConstructorsCut() {
- if (traceConstructors.getState()) {
- infoWin.println("begin constructing " + thisJoinPoint.getSignature());
- }
- }
-
- after() returning: allConstructorsCut() {
- if (traceConstructors.getState()) {
- infoWin.println("done constructing " + thisJoinPoint.getSignature());
- }
- }
-
- /*
- * All dynamic initializations
- */
- pointcut allInitializationsCut():
- initialization((spacewar.* && !(Debug+ || InfoWin+)).new(..));
-
- before(): allInitializationsCut() {
- if (traceConstructors.getState()) {
- infoWin.println("begin initializing " + thisJoinPoint.getSignature());
- }
- }
- after() returning : allInitializationsCut() {
- if (traceConstructors.getState()) {
- infoWin.println("done initializing " + thisJoinPoint.getSignature());
- }
- }
-
- /*
- * all methods
- */
- pointcut allMethodsCut():
- execution(* (spacewar.* && !(Debug+ || InfoWin+)).*(..));
-
- before(): allMethodsCut() {
- if (traceMethods.getState()) {
- infoWin.println("entering " + thisJoinPoint.getSignature());
- }
- }
- after() returning : allMethodsCut() {
- if (traceMethods.getState()) {
- infoWin.println("exiting " + thisJoinPoint.getSignature());
- }
- }
-
- /*
- * clock ticks
- */
- after(Object obj) returning :
- (target(obj) && (target(Game) ||
- target(Registry) ||
- target(SpaceObject)))
- && call(void clockTick()) {
- if (traceClockTick.getState())
- infoWin.println("ticking " + obj);
- }
-
- /*
- * registry contents
- */
- after(Registry registry) returning :
- target(registry) && (call(void register(..)) ||
- call(void unregister(..))) {
- if (traceRegistry.getState())
- infoWin.println(registry.getTable().size() +
- " space objects in the registry.");
- }
-
- /*
- * fire, collide, damage
- */
- after() returning : call(void Ship.fire()) {
- if (traceFireCollideDamage.getState())
- infoWin.println("firing");
- }
-
- after(Ship ship, SpaceObject obj) returning :
- call(void handleCollision(SpaceObject)) && target(ship) && args(obj) {
- if (traceFireCollideDamage.getState())
- infoWin.println(ship + " collides with " + obj);
- }
-
- after(Ship shipA, Ship shipB) returning :
- execution(void Ship.bounce(Ship, Ship)) && args(shipA, shipB) {
- if (traceFireCollideDamage.getState())
- infoWin.println(shipA + " bounces with " + shipB);
- }
-
- before(Ship ship, double amount):
- call(void Ship.inflictDamage(double)) && target(ship) && args(amount) {
- if (traceFireCollideDamage.getState())
- if (amount > 0)
- infoWin.println(ship + "gets " +
- amount + " damage (" +
- ship.getDamage() + ")");
- }
-
-}
-
-class InfoWin {
- private Frame frame;
- private TextArea info;
-
- InfoWin() {
- frame = new Frame("debugging info for spacewar game");
- info = new TextArea();
- info.setEditable(false);
-
- Dimension screenSize = frame.getToolkit().getScreenSize();
- frame.setSize(250, 600);
- frame.setLocation(screenSize.width - 250, 0);
- frame.add(info);
- frame.show();
- frame.toFront();
- }
-
- void clear() {
- info.setText("");
- }
-
- void println(String line) {
- info.append(line + "\n");
- }
-
- void print(String line) {
- info.append(line);
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Display.java b/docs/modules/ROOT/pages/examples/spacewar/Display.java
deleted file mode 100644
index 4236407ee..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Display.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Display.java
-Part of the Spacewar system.
-*/
-
-package spacewar;
-
-import java.util.Vector;
-import java.util.Enumeration;
-import java.awt.Graphics;
-import java.awt.Canvas;
-import java.awt.Image;
-
-/**
- * The display aspects capture the look and feel of the Game in modular
- * pluggable units.
- *
- * The model is that constructing a concrete subclass of Display attaches that
- * kind of display to the game. It will Display the game as it goes along.
- * A game can have any number of displays. Any of the displays will accept
- * keyboard input.
- *
- */
-
-class Display extends Canvas {
-
- private static Vector DISPLAYS = new Vector(2);
- private static Vector PLAYERS = new Vector(2);
- private static Pilot pilot1, pilot2;
-
- Game game;
- SWFrame frame;
- Image offImage;
- Graphics offGraphics;
-
- Game getGame() { return game; }
- static Pilot getPilot1() { return pilot1; }
- static Pilot getPilot2() { return pilot2; }
-
- Display(Game g) {
- super();
- game = g;
-
- frame = new SWFrame(game, this);
- DISPLAYS.addElement(this);
- }
-
-
- void noticeSizeChange() {
- initializeOffImage();
- }
-
- private void initializeOffImage () {
- int w = getSize().width;
- int h = getSize().height;
- if ( w > 0 & h > 0) {
- offImage = createImage(w, h);
- offGraphics = offImage.getGraphics();
- }
- }
-
- /*
- * In our double buffering scheme, painting just means copying the buffer
- * to the screen. The Display aspect draws into the buffer.
- */
- public void paint(Graphics g) {
- if (offImage != null)
- g.drawImage(offImage, 0, 0, null);
- }
-
- public void update(Graphics g) {
- /*
- * There are 4 steps to this:
- * - clear the double buffer
- * - paint the objects into the double buffer
- * - paint the status into the double buffer
- * - paint the doublebuffer into the buffer
- */
- offGraphics.setColor(getBackground());
- offGraphics.fillRect(0, 0, getBounds().width, getBounds().height);
- paintObjects(offGraphics);
- paintStatus(offGraphics);
- g.drawImage(offImage, 0, 0, null);
- }
-
- void paintObjects(Graphics g) { }
- void paintStatus(Graphics g) {}
-
- static aspect DisplayAspect {
-
- after (String mode) returning (Game game): call(Game+.new(String)) && args(mode) {
- new Display1(game);
- new Display2(game);
-
- if ( mode.equals("1") ) {
- pilot1 = game.newPlayer(1);
- }
- else if ( mode.equals("2") ) {
- pilot1 = game.newPlayer(1);
- pilot2 = game.newPlayer(2);
- }
- else if (mode. equals("demo")) {
- pilot1 = game.newRobot(1);
- pilot2 = game.newRobot(2);
- } else {
- game.error("Invalid mode: " + mode);
- game.quit();
- }
- }
-
-
- /*
- * I'm not really sure this belongs here.
- *
- * Being here what it does is makes the Display aspect
- * responsible for having the Players couple up to it. That's
- * kind of nice, but its a bit incomplete, since Player is
- * really part of the GUI, not part of the core Game.
- *
- * In a future re-factoring this will get worked out better.
- * What will happen is that GUI will be an aspect that has the
- * core GUI. Each of the different kinds of displays will be
- * aspects that tie themselves in.
- */
- after () returning (Player player): call(Player+.new(..)) {
- Enumeration elements = DISPLAYS.elements();
- while ( elements.hasMoreElements() ) {
- Display display = (Display)elements.nextElement();
- display.addKeyListener(player);
- }
- }
-
- after() returning (Display display): call(Display+.new(..)) {
- display.noticeSizeChange();
- }
-
- after(Display display) returning (): call(void setSize(..)) && target(display) {
- display.noticeSizeChange();
- }
-
- after() returning : call(void Game.clockTick()) {
- Enumeration elements = DISPLAYS.elements();
- while ( elements.hasMoreElements() ) {
- Display display = (Display)elements.nextElement();
- display.repaint();
- }
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Display1.java b/docs/modules/ROOT/pages/examples/spacewar/Display1.java
deleted file mode 100644
index 622f7d051..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Display1.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Display1.java
-Part of the Spacewar system.
-*/
-
-package spacewar;
-
-
-import java.awt.Graphics;
-import java.awt.Color;
-import java.util.Random;
-
-/**
- * This is the standard display aspect.
- */
-class Display1 extends Display {
- /*
- * Here's the color scheme for the game. No other places in this file
- * should say Color.xxx. Instead, that color should be given a symbolic
- * name here.
- */
- private static Color backgroundColor = Color.black;
- private static Color player1ShipColor = Color.white;
- private static Color player2ShipColor = Color.gray;
- private static Color robotShipColor = new Color(0xa00000);
- private static Color flameColor = Color.red;
- private static Color shipExplosionColor = Color.red;
- private static Color bulletColor = Color.green;
- private static Color energyPacketOuterColor = Color.blue;
- private static Color energyPacketInnerColor = new Color(0x7070FF);
- private static Color statusLabelsColor = Color.white;
- private static Color statusMeterBorderColor = Color.white;
- private static Color energyStatusMeterColor = Color.blue;
- private static Color damageStatusMeterColor = Color.red;
-
-
- Display1(Game game) {
- super(game);
- frame.setLocation(20, 20);
- }
-
- void noticeSizeChange() {
- super.noticeSizeChange();
- setBackground(backgroundColor);
- }
-
- void paintObjects(Graphics g) {
- SpaceObject[] objects = game.getRegistry().getObjects();
- final int len = objects.length;
- for (int i = 0; i < len; i++) {
- objects[i].paint(g);
- }
- }
-
- static aspect SpaceObjectPainting {
-
- abstract private void SpaceObject.paint(Graphics g);
-
- /*
- * Ships are by far and away the most complex of the space Objects
- * to paint. First off, we need to set the color when the ship
- * is made.
- */
- private Color Ship.color;
-
- after(Pilot pilot) returning (Ship ship): call(Ship Game.newShip(Pilot)) && args(pilot) {
- if (pilot.getNumber() == 1)
- ship.color = player1ShipColor;
- else if (pilot.getNumber() == 2)
- ship.color = player2ShipColor;
- else
- ship.color = robotShipColor;
- }
-
- private void Ship.paint(Graphics g) {
- final double PI = Math.PI;
- int[] radius = {15, 12, -4, 12, -9, -15, -9};
- double[] angle = {0, PI * 3/4, 0, -PI * 3/4, PI/8, 0, -PI/8};
- int[] x;
- int[] y;
-
- Random random = new Random();
-
- if (this.getDamage() >= this.MAX_DAMAGE) {
- int lines = 20;
- x = new int[lines];
- y = new int[lines];
- g.setColor(shipExplosionColor);
- for (int i = 0; i < lines; i++) {
- x[i] = (int)(this.getXPos()) + random.nextInt() % 20;
- y[i] = (int)(this.getYPos()) + random.nextInt() % 20;
- }
- for (int i = 0; i < lines; i++)
- g.drawLine(x[i], y[i], x[(i + 1) % lines], y[(i + 1) % lines]);
- } else {
- x = new int[7];
- y = new int[7];
-
- g.setColor(this.color);
-
- radius[5] += random.nextInt() % 3;
- // convert coordinates from polar to cartesian
- for (int i = 0; i < 7; i++) {
- x[i] = (int)
- (this.getXPos() +
- Math.cos(this.getOrientation() + angle[i]) * radius[i]);
- y[i] = (int)
- (this.getYPos() +
- Math.sin(this.getOrientation() + angle[i]) * radius[i]);
- }
-
- // draw the body as a polygon
- g.drawPolygon(x, y, 4);
-
- // if the ship is accelerating, draw in a flame
- if (this.getRAcc() != 0) {
- g.setColor(flameColor);
- g.drawLine(x[4], y[4], x[5], y[5]);
- g.drawLine(x[5], y[5], x[6], y[6]);
- }
- }
- }
-
- /*
- * Bullets
- */
- private void Bullet.paint(Graphics g) {
- g.setColor(bulletColor);
- g.fillOval((int)this.getXPos() - 1,
- (int)this.getYPos() - 1,
- 3,
- 3);
- }
-
- /*
- * energy packets
- */
- private void EnergyPacket.paint(Graphics g) {
- g.setColor(energyPacketOuterColor);
- g.fillOval((int)this.getXPos() - 5,
- (int)this.getYPos() - 5,
- 10, 10);
- g.setColor(energyPacketInnerColor);
- g.fillOval((int)this.getXPos() - 2,
- (int)this.getYPos() - 2,
- 3, 3);
- }
- }
-
-
- void paintStatus(Graphics g) {
- int left1 = 60;
- int top1 = 0;
-
- int left2 = 200;
- int top2 = 0;
-
- g.setColor(statusLabelsColor);
- g.drawString("energy:", 5, top1 + 15);
- g.drawString("damage:", 5, top1 + 30);
-
- if (getPilot1() != null)
- paintLevels(g, getPilot1().getShip(), top1, left1);
- if (getPilot2() != null)
- paintLevels(g, getPilot2().getShip(), top2, left2);
- }
-
- static void paintLevels(Graphics g, Ship ship, int top, int left) {
- if (ship == null)
- return;
- else if (ship.isAlive()) {
- g.setColor(statusMeterBorderColor);
- g.drawRect(left, top + 6, 101, 10);
- g.drawRect(left, top + 21, 101, 10);
- g.setColor(energyStatusMeterColor);
- g.fillRect(left + 1, top + 7, (int)(ship.getEnergyLevel()*100), 9);
- g.setColor(damageStatusMeterColor);
- g.fillRect(left + 1, top + 22, (int)(ship.getDamageLevel()*100), 9);
- }
- else {
- g.setColor(damageStatusMeterColor);
- g.drawString("Ship is destroyed", left+1, top+15);
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Display2.java b/docs/modules/ROOT/pages/examples/spacewar/Display2.java
deleted file mode 100644
index 0430a1cc5..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Display2.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Display2.java
-Part of the Spacewar system.
-*/
-
-package spacewar;
-
-
-import java.awt.Graphics;
-import java.awt.Color;
-
-
-/**
- * This is the cheap Display aspect.
- */
-class Display2 extends Display {
-
- Display2(Game game) {
- super(game);
- frame.setLocation(540, 20);
- }
-
- void noticeSizeChange() {
- super.noticeSizeChange();
- setBackground(Color.darkGray);
- }
-
- void paintObjects(Graphics g) {
- SpaceObject[] objects = game.getRegistry().getObjects();
- final int len = objects.length;
- for (int i = 0; i < len; i++) {
- objects[i].paint(g);
- }
- }
-
- static aspect SpaceObjectPainting {
-
- abstract private void SpaceObject.paint(Graphics g);
-
- /*
- * Ships are by far and away the most complex of the space Objects
- * to paint.
- */
- private Color Ship.color;
-
- after(Pilot pilot) returning (Ship ship): call(Ship Game.newShip(Pilot)) && args(pilot) {
- if (pilot.getNumber() == 1)
- ship.color = Color.white;
- else if (pilot.getNumber() == 2)
- ship.color = Color.gray;
- else
- ship.color = new Color(0xa00000);
- }
-
- private void Ship.paint(Graphics g) {
- if (this.getDamage() < this.MAX_DAMAGE) {
- double x = this.getXPos();
- double y = this.getYPos();
- double sinTheta = Math.sin(this.getOrientation());
- double cosTheta = Math.cos(this.getOrientation());
-
- g.setColor(color);
- g.drawLine((int)(x + 8*cosTheta), (int)(y + 8*sinTheta),
- (int)(x - 8*cosTheta), (int)(y - 8*sinTheta));
-
- // if the ship is accelerating, draw thruster
- if (this.getRAcc() != 0) {
- g.setColor(Color.red);
- g.fillOval((int)(x - 8*cosTheta), (int)(y - 8*sinTheta), 6, 6);
- }
- }
- }
-
- private void Bullet.paint(Graphics g) {
- g.setColor(Color.green);
- g.fillOval((int)this.getXPos() - 1,
- (int)this.getYPos() - 1,
- 3,
- 3);
- }
-
- private void EnergyPacket.paint(Graphics g) {
- g.setColor(Color.white);
- g.fillOval((int)this.getXPos() - 5,
- (int)this.getYPos() - 5,
- 10,
- 10);
- }
- }
-
- void paintStatus(Graphics g) {
- int left1 = 60;
- int top1 = 0;
-
- int left2 = 200;
- int top2 = 0;
-
- g.setColor(Color.white);
- g.drawString("energy:", 5, top1 + 15);
- g.drawString("damage:", 5, top1 + 30);
-
- if (getPilot1() != null)
- paintLevels(g, getPilot1().getShip(), top1, left1);
- if (getPilot2() != null)
- paintLevels(g, getPilot2().getShip(), top2, left2);
- }
-
- void paintLevels(Graphics g, Ship ship, int top, int left) {
- if (ship == null)
- return;
- else if (ship.isAlive()) {
- g.drawString(Float.toString(ship.getEnergyLevel()*100), left+1, top+15);
- g.drawString(Float.toString(ship.getDamageLevel()*100), left+1, top+30);
- }
- else {
- g.setColor(Color.red);
- g.drawString("Ship is destroyed", left+1, top+15);
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/EnergyPacket.java b/docs/modules/ROOT/pages/examples/spacewar/EnergyPacket.java
deleted file mode 100644
index d7bc4f9ec..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/EnergyPacket.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-EnergyPacket.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-
-class EnergyPacket extends SpaceObject {
-
- static private final int SIZE = 5; //Can't be changed for now!!!
- int getSize() { return SIZE; }
-
- private double energy;
-
- double getEnergy() { return energy; }
-
- EnergyPacket(Game theGame,
- double xP, double yP, double xV, double yV, double e) {
- super(theGame, xP, yP, xV, yV);
- energy = e;
- }
-
- void handleCollision(SpaceObject obj) {
- die();
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/EnergyPacketProducer.java b/docs/modules/ROOT/pages/examples/spacewar/EnergyPacketProducer.java
deleted file mode 100644
index efd276042..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/EnergyPacketProducer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-EnergyPacketProducer.java
-Part of the Spacewar system.
-
- This implementation creates booby-trapped packets 20% of the time.
-
-*/
-
-package spacewar;
-
-
-class EnergyPacketProducer extends Thread {
- private final static int MIN = -20;
- private final static int MAX = 80;
- private final static int EXPECTEDINTERVAL = 15;
-
- private Game game;
-
- Game getGame() { return game; }
-
- EnergyPacketProducer(Game theGame) {
- super("EnergyPacketProducer");
- game = theGame;
- }
-
- public void run() {
- while(true) {
- produceAPacket();
- waitForABit();
- }
- }
-
- void waitForABit() {
- try { Thread.sleep((int)(Math.random() * EXPECTEDINTERVAL * 2000)); }
- catch (InterruptedException e) {}
- }
-
- void produceAPacket() {
- EnergyPacket pkt =
- new EnergyPacket(game,
- Math.random() * getGame().getWidth(),
- Math.random() * getGame().getHeight(),
- Math.random() * 2 - 1,
- Math.random() * 2 - 1,
- Math.random() * (MAX - MIN) + MIN);
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/EnsureShipIsAlive.java b/docs/modules/ROOT/pages/examples/spacewar/EnsureShipIsAlive.java
deleted file mode 100644
index f7b949a92..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/EnsureShipIsAlive.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-Ship.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-/**
- * This aspect makes sure that the ship is alive before performing any console
- * commands.
- *
- */
-aspect EnsureShipIsAlive {
- void around (Ship ship): Ship.helmCommandsCut(ship) {
- if ( ship.isAlive() ) {
- proceed(ship);
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Game.java b/docs/modules/ROOT/pages/examples/spacewar/Game.java
deleted file mode 100644
index 54b1bf2ac..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Game.java
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Game.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import java.awt.Dimension;
-
-/**
- * The Game class is the root of the spacewar game. To start a spacewar
- * game, you can either call the main method, or instantiate this class
- * directly.
- *
- * Synchronization is done by the GameSynchronization aspect.
- */
-public class Game extends Thread {
-
- /**
- * To run the game from top level, simply say Java Game, as usual. Passing
- * an argument makes the game run in demo mode. Without an argument it runs
- * in the normal player mode.
- */
- public static void main(String[] args) {
- if ( args.length == 0 )
- new Game("1").run();
- new Game(args[0]).run();
- }
-
-
- private Timer timer;
- private EnergyPacketProducer ePP;
-
- private Registry registry;
- private Pilot pilot1, pilot2;
-
- private Dimension screenSize = new Dimension(500, 500);
-
- Registry getRegistry() { return registry; }
- Pilot getPilot1() { return pilot1; }
- Pilot getPilot2() { return pilot2; }
-
- /** returns the width of the screen, delegating to screenSize */
- int getWidth() { return screenSize.width; }
-
- /** returns the height of the screen, delegating to screenSize */
- int getHeight() { return screenSize.height; }
-
- /**
- * To run the game, simply instantiate this class. It runs in its own
- * thread. You can instantiate multiple games at once. For the time being
- * the only way to end the game is to exit from the Java VM.
- *
- * @param mode Controls whether the game runs in demo mode or not. True
- * means it is a demo, false means it runs in normal 2 player mode.
- */
- public Game(String mode) {
- timer = new Timer(this);
- ePP = new EnergyPacketProducer(this);
- registry = new Registry(this);
- }
-
- public void run() {
- timer.start();
- ePP.start();
-
- while(true) {
- try {
- newRobot(3);
- Thread.sleep(15000);
- }
- catch (InterruptedException e) {}
- }
- }
-
-
- /**
- * add a robot to the game. This is a menu command.
- */
- void addRobot() {
- newRobot(3);
- }
-
- /**
- * resurrect the ships in the game. This is a menu command.
- */
- void resetShips() {
- Ship[] ships = registry.getShips();
-
- for (int i = 0; i < ships.length; i++) {
- Ship ship = ships[i];
- Pilot pilot = ship.getPilot();
- newShip(pilot);
- }
- }
-
- /**
- * leave the game. This is a menu command.
- */
- void quit() {
- System.exit(0);
- }
-
- void error(Object o) {
- System.err.println(o);
- }
-
-
- /**
- * returns a new player. With {@link #newRobot} and {@link
- * #newShip}, the only ways to make a Player, a Robot, or a Ship.
- * The structural invariant is that there should be no calls to
- * new of one of these three classes outside these three methods.
- */
- Player newPlayer(int number) {
- Player player = new Player(this, number);
- newShip(player);
- return player;
- }
-
- /**
- * returns a new robot. With {@link #newPlayer} and {@link
- * #newShip}, the only ways to make a Player, a Robot, or a Ship.
- * The structural invariant is that there should be no calls to
- * new of one of these three classes outside these three methods.
- */
- Robot newRobot(int number) {
- Robot robot = new Robot(this, number);
- newShip(robot);
- robot.start();
- return robot;
- }
-
- /**
- * returns a new ship. With {@link #newRobot} and {@link
- * #newPlayer}, the only ways to make a Player, a Robot, or a
- * Ship. The structural invariant is that there should be no
- * calls to new of one of these three classes outside these three
- * methods.
- */
- Ship newShip(Pilot pilot) {
- //
- // If there is an old ship (we're doing a reset), then remove it from
- // the registry.
- //
- Ship oldShip = pilot.getShip();
- if (! (oldShip == null))
- oldShip.die();
-
- Ship newShip = new Ship(this,
- Math.random() * getWidth(),
- Math.random() * getHeight(),
- Math.random() * Math.PI * 2);
- pilot.setShip(newShip);
- newShip.setPilot(pilot);
-
- return newShip;
- }
-
- void clockTick() {
- registry.clockTick();
- handleCollisions();
- }
-
- // collision detection
-
- void handleCollisions() {
- SpaceObject[] objects = registry.getObjects();
-
- SpaceObject objI, objJ;
- for (int i = 0; i < objects.length; i++) {
- objI = objects[i];
- for (int j = i + 1; j < objects.length; j++) {
- objJ = objects[j];
- if (objI instanceof Bullet && objJ instanceof Bullet)
- continue;
- if (isCollision(objI, objJ)) {
- if (objI instanceof Ship && objJ instanceof Ship)
- Ship.bounce((Ship)(objI), (Ship)(objJ));
- else {
- objI.handleCollision(objJ);
- objJ.handleCollision(objI);
- }
- }
- }
- }
- }
-
- /*
- * Is the distance between the two centers less than the sum of the two
- * radii. This is a cheap and dirty (i.e. wrong) implementation of this.
- */
- static boolean isCollision(SpaceObject a, SpaceObject b) {
- return (Math.abs(a.getXPos() - b.getXPos()) +
- Math.abs(a.getYPos() - b.getYPos())) <
- (a.getSize()/2 + b.getSize()/2);
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/GameSynchronization.java b/docs/modules/ROOT/pages/examples/spacewar/GameSynchronization.java
deleted file mode 100644
index dcf42e904..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/GameSynchronization.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-RegistrySynchronization.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import coordination.Coordinator;
-
-/**
- * This aspect ensures synchronized access to methods of the Game in the
- * presence of several threads.
- *
- * It uses the Coordinator class, from the AspectJ coordination library.
- * (This case is right on the borderline of being too simple to use the
- * coordination library, but we use it anyways to keep the similarity
- * with the RegistrySynchronizer.)
- *
- * It uses a per-Game coordination scheme, so there is one instance of
- * this class for each instance of the Game class. When this class is
- * constructed, it registers appropriate mutexes and selfexes using
- * the behavior inherited from Coordinator.
- *
- * The coordination constraints for the Game are simple. We just need to
- * make sure that newShip and handleCollisions are mutually exclusive. That
- * ensures that they we can't destroy a ship that has just been replaced.
- */
-aspect GameSynchronization extends Coordinator perthis(this(Game)) {
-
- protected pointcut synchronizationPoint():
- call(void Game.handleCollisions(..)) || call(Ship Game.newShip(..));
-
- public GameSynchronization() {
- addMutex(new String[] {"handleCollisions", "newShip"});
- }
-
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Makefile b/docs/modules/ROOT/pages/examples/spacewar/Makefile
deleted file mode 100644
index e425dfd55..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Makefile
+++ /dev/null
@@ -1,12 +0,0 @@
-SHELL=bash
-ACJOPTS=-verbose -nosymbols
-AJC=ajc
-
-.PHONY: demo debug
-
-demo:
- $(AJC) $(ACJOPTS) @demo.lst
-
-debug:
- $(AJC) $(ACJOPTS) @debug.lst
-
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Pilot.java b/docs/modules/ROOT/pages/examples/spacewar/Pilot.java
deleted file mode 100644
index 330d860bf..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Pilot.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-*/
-
-package spacewar;
-
-
-/**
- * Pilot is the abstract superclass of Player and Robot.
- *
- */
-
-abstract class Pilot {
- private Game game;
- private int number;
- protected Ship ship = null;
-
- Game getGame() { return game; }
- int getNumber() { return number; }
- Ship getShip() { return ship; }
-
- void setShip(Ship s) { ship = s; }
-
- Pilot (Game g, int n) {
- super();
- game = g;
- number = n;
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Player.java b/docs/modules/ROOT/pages/examples/spacewar/Player.java
deleted file mode 100644
index 3899c6d52..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Player.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-*/
-
-package spacewar;
-
-import java.awt.event.KeyListener;
-import java.awt.event.KeyEvent;
-
-class Player extends Pilot implements KeyListener {
-
- private KeyMapping keyMapping;
-
- /** current rotation key */
- private int rotation_direction = Ship.STOP; // current rotation key
-
- /** current thrust */
- private boolean thrust_on = false;
-
- Player(Game theGame, int number) {
- super(theGame,number);
-
- if (getNumber() == 1)
- keyMapping = KeyMapping.keyMapping1;
- else if (getNumber() == 2)
- keyMapping = KeyMapping.keyMapping2;
-
- }
-
- public void keyPressed(KeyEvent e) {
- int keyCode = e.getKeyCode();
- boolean consumed = true;
-
- if (keyCode == keyMapping.fire) {
- ship.fire();
- }
- else if (keyCode == keyMapping.thrust && !thrust_on) {
- ship.thrust(true);
- thrust_on = true;
- }
- else if (keyCode == keyMapping.right &&
- rotation_direction != Ship.COUNTERCLOCKWISE) {
- //start rotating clockwise unless already rotating in the
- //opposite direction
- rotation_direction = Ship.CLOCKWISE;
- ship.rotate(Ship.CLOCKWISE);
- }
- else if (keyCode == keyMapping.left &&
- rotation_direction != Ship.CLOCKWISE) {
- //start rotating counterclockwise unless already rotating in the
- //opposite direction
- rotation_direction = Ship.COUNTERCLOCKWISE;
- ship.rotate(Ship.COUNTERCLOCKWISE);
- }
- else {
- consumed = false;
- }
-
- if (consumed) e.consume();
- }
-
- public void keyReleased(KeyEvent e) {
- int keyCode = e.getKeyCode();
-
- if (keyCode == keyMapping.thrust) {
- ship.thrust(false); //engine off
- thrust_on = false;
- }
- else if (keyCode == keyMapping.right &&
- rotation_direction == Ship.CLOCKWISE
- ||
- keyCode == keyMapping.left &&
- rotation_direction == Ship.COUNTERCLOCKWISE) {
- ship.rotate(Ship.STOP); //stop rotation
- rotation_direction = Ship.STOP;
- }
- }
-
- public void keyTyped(KeyEvent e) {
- // have to implement this because it's in KeyListener
- }
-}
-
-class KeyMapping {
-
- static final KeyMapping keyMapping1 =
- new KeyMapping(KeyEvent.VK_LEFT,
- KeyEvent.VK_RIGHT,
- KeyEvent.VK_UP,
- KeyEvent.VK_SPACE);
-
- static final KeyMapping keyMapping2 =
- new KeyMapping(KeyEvent.VK_X,
- KeyEvent.VK_V,
- KeyEvent.VK_D,
- KeyEvent.VK_ALT);
-
- int left, right, thrust, fire;
-
- KeyMapping(int k_left, int k_right, int k_thrust, int k_fire) {
- left = k_left;
- right = k_right;
- thrust = k_thrust;
- fire = k_fire;
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/README.adoc b/docs/modules/ROOT/pages/examples/spacewar/README.adoc
deleted file mode 100644
index d39b9b5fc..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/README.adoc
+++ /dev/null
@@ -1,56 +0,0 @@
-[[_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.
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Registry.java b/docs/modules/ROOT/pages/examples/spacewar/Registry.java
deleted file mode 100644
index a9cec0418..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Registry.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Registry.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import java.util.Vector;
-import java.util.Hashtable;
-import java.util.Enumeration;
-
-/**
- * The Registry keeps track of all the space objects that are floating around.
- * It basically supports register, unregister and contents type operations.
- *
- * The synchronization is done by the RegistrySynchronization aspect.
- */
-
-class Registry {
-
- private Hashtable table;
- private Game game;
-
- Game getGame() { return game; }
-
- Registry (Game theGame) {
- game = theGame;
- table = new Hashtable();
- }
-
-
- void register(SpaceObject object) {
- table.put(object, object);
- }
-
- void unregister(SpaceObject object) {
- table.remove(object);
- }
-
- /*
- * It is an invariant of the design that only two points in SpaceObject
- * should call register and unregister. This aspect enforces that.
- *
- * Unfortunately, in the current compiler, we get a static warning when
- * there are no illegal calls that this advice has no targets. That will
- * be fixed in a future release. For the time being the dummy method
- * just below this fixes that.
- */
- static aspect RegistrationProtection {
- after() returning():
- (call(void Registry.register(SpaceObject)) ||
- call(void Registry.unregister(SpaceObject))) &&
- !(within(SpaceObject) && (withincode(new(..)) ||
- withincode(void die()))) {
- throw new IllegalAccessError(
- "This is an illegal call to " + thisJoinPoint + "\n" +
- "Only the constructor and the die() on SpaceObject\n" +
- "should call the primitive registry operations.");
- }
- }
-
- void dummy() { // see comment above
- register(getObjects()[0]);
- unregister(getObjects()[0]);
- }
-
-
- SpaceObject[] getObjects() {
- SpaceObject[] allObjects = new SpaceObject[table.size()];
- Enumeration elements = table.elements();
- for(int i = 0; elements.hasMoreElements(); i++) {
- allObjects[i] = (SpaceObject)(elements.nextElement());
- }
- return allObjects;
- }
-
- Ship[] getShips() {
- //
- // First we have to put just the Ships into a vector, then we can put
- // them into an array of exactly the right length.
- //
- Ship[] arrayOfShips;
- Vector vectorOfShips = new Vector();
- Enumeration elements = table.elements();
- while (elements.hasMoreElements()) {
- Object object = elements.nextElement();
- if (object instanceof Ship) {
- vectorOfShips.addElement(object);
- }
- }
-
- arrayOfShips = new Ship[(vectorOfShips.size())];
- vectorOfShips.copyInto(arrayOfShips);
- return arrayOfShips;
- }
-
- Hashtable getTable() { return table; }
-
- //
- // The protocol for clockTick is that it automatically cascades.
- //
- void clockTick() {
- Enumeration elements = table.elements();
- while (elements.hasMoreElements()) {
- ((SpaceObject)elements.nextElement()).clockTick();
- }
- }
-}
-
diff --git a/docs/modules/ROOT/pages/examples/spacewar/RegistrySynchronization.java b/docs/modules/ROOT/pages/examples/spacewar/RegistrySynchronization.java
deleted file mode 100644
index 986e4bd30..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/RegistrySynchronization.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-RegistrySynchronization.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import coordination.Coordinator;
-
-
-/**
- * This aspect ensures synchronized access to methods of the Registry in
- * the presence of several threads.
- *
- * It uses the Coordinator class, from the AspectJ coordination library.
- *
- * It uses a per-Registry coordination scheme, so there is one instance of
- * this class for each instance of the Registry class. When this class is
- * constructed, it registers appropriate mutexes and selfexes using the
- * behavior inherited from Coordinator.
- *
- * The mutating methods (register and unregister) should be self-exclusive.
- * Each reader method should be mutually exclusive with the mutating
- * methods. But the readers can run concurrently. */
-aspect RegistrySynchronization extends Coordinator perthis(this(Registry)) {
-
- protected pointcut synchronizationPoint():
- call(void Registry.register(..)) ||
- call(void Registry.unregister(..)) ||
- call(SpaceObject[] Registry.getObjects(..)) ||
- call(Ship[] Registry.getShips(..));
-
- public RegistrySynchronization() {
- addSelfex("register");
- addSelfex("unregister");
-
- addMutex(new String[] {"register", "unregister", "getObjects"});
- addMutex(new String[] {"register", "unregister", "getShips"});
- }
-
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Robot.java b/docs/modules/ROOT/pages/examples/spacewar/Robot.java
deleted file mode 100644
index 05f276108..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Robot.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Robot.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import java.util.Random;
-
-/**
- * Robot is an automatic pilot that now has quite a bit of intelligence.
- * So, beware !
- */
-class Robot extends Pilot implements Runnable {
-
- private static final int FIRE_INTERVAL = 60;
- private static final int REBIRTH_DELAY = 900;
-
- private final Random random = new Random();
-
- private Thread runner;
- private boolean runnable = true;
-
- Robot(Game theGame, int number) {
- super(theGame, number);
- }
-
- void start() {
- if (runner == null) {
- runner = new Thread(this);
- runner.start();
- }
- }
-
- void destroy() {
- if (runner != null) {
- runnable = false;
- runner = null;
- }
- }
-
-
- // A Robot tracks User-controlled ships and fires at them
- public void run() {
- Ship target = null;
-
- while(runnable) {
- // find target ship
- do {
- Ship[] potentials = getGame().getRegistry().getShips();
- if(potentials.length != 0)
- target = potentials[Math.abs(random.nextInt() % potentials.length)];
- sleepForABit(25);
- } while (target == ship);
- // main loop
- int currentRotation = Ship.STOP;
- int time;
- boolean currentlyAccelerating = false;
- double dx, dy, angleA, angleB, theta, dtheta, d,
- targetVel, a, b, c, targetXVel, targetYVel;
-
- while(true) {
- sleepForABit(FIRE_INTERVAL);
-
- // if my ship is destroyed, give me a new one
- if (!ship.isAlive()) {
- sleepForABit(REBIRTH_DELAY);
- getGame().newShip(this);
- }
-
- // find direction and distance from target to me
- dx = ship.getXPos() - target.getXPos();
- if (dx < - getGame().getWidth() / 2)
- dx += getGame().getWidth();
- if (dx > getGame().getWidth() / 2)
- dx -= getGame().getWidth();
- dy = ship.getYPos() - target.getYPos();
- if (dy < - getGame().getHeight() / 2)
- dy += getGame().getHeight();
- if (dy > getGame().getHeight() / 2)
- dy -= getGame().getHeight();
- d = Math.sqrt(dx * dx + dy * dy);
- angleA = Math.atan(dy / dx);
- if (dx < 0)
- angleA += Math.PI;
-
- // find relative velocity and trajectory of target
- targetXVel = target.getXVel() - ship.getXVel();
- targetYVel = target.getYVel() - ship.getYVel();
- targetVel = Math.sqrt(targetXVel * targetXVel +
- targetYVel * targetYVel);
- angleB = Math.atan(targetYVel / targetXVel);
- if (targetXVel < 0)
- angleB+=Math.PI;
-
- // find angle between line to target and taget's direction of travel
- theta = (angleA - angleB) % (2 * Math.PI);
- if (theta < -Math.PI)
- theta += 2 * Math.PI;
- if (theta > Math.PI)
- theta -= 2 * Math.PI;
-
- // calculate time to bullet impact using law of cosines
- a = targetVel * targetVel + Ship.BULLET_SPEED * Ship.BULLET_SPEED;
- b = d * targetVel * Math.cos(theta);
- c = - d * d;
- time = (int)((-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a);
-
- // calculate angle and distance to bullet impact location
- dx = targetXVel * time - dx;
- dy = targetYVel * time - dy;
- theta = Math.atan(dy / dx);
- if(dx < 0)
- theta += Math.PI;
-
- // find desired change in rotation
- dtheta = (theta - ship.getOrientation()) % (2 * Math.PI);
- // find the shortest path to the desired orientation;
- if(dtheta < - Math.PI)
- dtheta += 2 * Math.PI;
- if(dtheta > Math.PI)
- dtheta -= 2 * Math.PI;
-
- // turn if nessecary
- if (dtheta > Ship.DEFAULT_ANGULAR_VELOCITY / 2) {
- if (currentRotation != Ship.CLOCKWISE)
- ship.rotate(currentRotation = Ship.CLOCKWISE);
- }
- else if (dtheta < -Ship.DEFAULT_ANGULAR_VELOCITY / 2) {
- if (currentRotation != Ship.COUNTERCLOCKWISE)
- ship.rotate(currentRotation = Ship.COUNTERCLOCKWISE);
- } // otherwise, fire, maybe even a burst
- else {
- if(currentRotation != Ship.STOP)
- ship.rotate(currentRotation = Ship.STOP);
- if (random.nextInt() % 40 == 0) {
- ship.fire();
- }
- }
-
- // randomly accelerate
- if (currentlyAccelerating && random.nextInt() % 2 == 0)
- ship.thrust(currentlyAccelerating = false);
- else {
- if (ship.getXVel() == 0)
- angleA = 0;
- else
- angleA = Math.atan(ship.getYVel() / ship.getXVel());
-
- if (ship.getXVel() < 0)
- angleA+=Math.PI;
- angleB = (angleA - ship.getOrientation()) % (2 * Math.PI);
- if (angleB < -Math.PI)
- angleB += 2 * Math.PI;
- if (angleB > Math.PI)
- angleB -= 2 * Math.PI;
- angleB = Math.abs(angleB);
-
- // angleB now represents the angle between the ship's
- // orientation and velocity vector. This will be used to
- // determine the probably that the ship will thrust to
- // prevent ships from accelerating too much in one direction
- if (random.nextInt() % (int)(12 * (Math.PI - angleB) + 1) == 0)
- ship.thrust(currentlyAccelerating = true);
- }
-
- // switch targets if current one has been destroyed
- if (target.getDamage() == 100)
- break;
-
- // randomly switch targets
- if (random.nextInt() % 4000 == 0)
- break;
- }
- }
- }
-
- void sleepForABit (int time) {
- try {
- runner.sleep(time);
- }
- catch (InterruptedException e) {}
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/SWFrame.java b/docs/modules/ROOT/pages/examples/spacewar/SWFrame.java
deleted file mode 100644
index 6dfb9f6f6..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/SWFrame.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-SWFrame.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-import java.awt.Frame;
-import java.awt.Menu;
-import java.awt.MenuBar;
-import java.awt.MenuItem;
-import java.awt.MenuShortcut;
-import java.awt.Dimension;
-import java.awt.Insets;
-
-import java.awt.event.ActionListener;
-import java.awt.event.ActionEvent;
-
-class SWFrame extends Frame implements ActionListener {
- private Game game;
- private Display display;
- private Menu menu;
-
- Game getGame() { return game; }
- Display getDisplay() { return display; }
- Menu getMenu() { return menu; }
-
- SWFrame(Game theGame, Display d) {
- super("Space War!");
-
- game = theGame;
-
- display = d;
- add(display);
-
- // create menu
- menu = new Menu("Game");
- MenuItem item1 = new MenuItem("Add Robot", new MenuShortcut('a'));
- MenuItem item2 = new MenuItem("Reset Ships", new MenuShortcut('r'));
- MenuItem item3 = new MenuItem("Quit", new MenuShortcut('q'));
- item1.setActionCommand("Add Robot");
- item2.setActionCommand("Reset Ships");
- item3.setActionCommand("Quit");
- menu.add(item1);
- menu.add(item2);
- menu.add(item3);
- menu.addActionListener(this);
-
- setMenuBar(new MenuBar());
- getMenuBar().add(menu);
-
- Dimension screenSize = new Dimension(500, 500);
- setSize(screenSize);
- setVisible(true);
- toFront();
-
- Insets inset = getInsets();
- int displayWidth = screenSize.width - inset.left - inset.right;
- int displayHeight = screenSize.height - inset.top - inset.bottom;
- display.setSize(displayWidth, displayHeight);
- }
-
- public void actionPerformed(ActionEvent e) {
- String s = e.getActionCommand();
- if (s.equals("Add Robot")) {
- getGame().addRobot();
- }
- else if (s.equals("Reset Ships")) {
- getGame().resetShips();
- }
- else if (s.equals("Quit")) {
- getGame().quit();
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Ship.java b/docs/modules/ROOT/pages/examples/spacewar/Ship.java
deleted file mode 100644
index 9978fe694..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Ship.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-Ship.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-class Ship extends SpaceObject {
-
- pointcut helmCommandsCut(Ship ship):
- target(ship) && ( call(void rotate(int)) ||
- call(void thrust(boolean)) ||
- call(void fire()) );
-
-
- /**
- * Energy and Damage are key values in the state of a ship. Energy is
- * basically about fuel, and damage is about how bad a shape we are in.
- *
- * The energy related values are:
- * <ul>
- * <li>MAX_ENERGY</li>
- * <li>BULLET_ENERGY</li>
- * <li>ACCELERATION_ENERGY_FACTOR</li>
- * <li>energy</li>
- * </ul>
- * The damage related values are:
- * <ul>
- * <li>MAX_DAMAGE</li>
- * <li>BULLET_DAMAGE</li>
- * <li>COLLISION_DAMAGE_FACTOR</li>
- * <li>damage</li>
- * </ul>
- * Finally, REPAIR_RATE is the rate at which energy is consumed to fix
- * damage.
- *
- */
- private static final int MAX_ENERGY = 100;
- private static final int BULLET_ENERGY= 2;
- private static final double ACCELERATION_COST_FACTOR = 0.05;
-
- //XXX was private
- static final int MAX_DAMAGE = 100;
- private static final int BULLET_DAMAGE = 15;
- private static final double COLLISION_DAMAGE_FACTOR = 0.1;
-
- private static final double REPAIR_RATE = 0.08;
-
-
- private static final int EXPLOSION_LENGTH = 10;
-
- static final int BULLET_SPEED = 10;
-
- static final int CLOCKWISE = 1;
- static final int STOP = 0;
- static final int COUNTERCLOCKWISE = (-1);
-
- static final double DEFAULT_ANGULAR_VELOCITY = 0.2;
- static final double DEFAULT_ACCELERATION = .4;
-
- static private final int SIZE = 30; //Can't be changed for now!!!
-
- private double energy; // range: 0 to MAX_ENERGY
- private double damage; // range: 0 to MAX_DAMAGE
- private double orientation; // in degrees
- private double angularVel; // in ???
- private double xAcc, yAcc, rAcc; //
- private int countdown; // remaining explosion time
-
- private Pilot pilot;
-
- Ship(Game theGame, double xPos, double yPos, double orientation) {
- super(theGame, xPos, yPos, 0, 0);
- xAcc = 0;
- yAcc = 0;
- this.orientation = orientation;
- angularVel = 0;
-
- energy = MAX_ENERGY;
- damage = 0;
- countdown = EXPLOSION_LENGTH;
- }
-
-
- int getSize() { return SIZE; }
-
- double getEnergy() { return energy; }
- double getDamage() { return damage; }
- double getOrientation() { return orientation; }
- double getRAcc() { return rAcc; }
-
- Pilot getPilot() { return pilot; }
- void setPilot (Pilot p) { pilot = p; }
-
- float getEnergyLevel() {
- return (float)energy / (float)MAX_ENERGY;
- }
- float getDamageLevel() {
- return (float)damage / (float)MAX_DAMAGE;
- }
-
- /** returns false if energy is out, otherwise decrements energy by amount
- * and returns true
- */
- boolean expendEnergy(double amount) {
- if (amount <= energy) {
- energy -= amount;
- return true;
- }
- else
- return false;
- }
-
- /** increments damage by amount and handles the destruction of a ship if
- * damage reaches MAX_DAMAGE.
- */
- void inflictDamage(double amount) {
- if (amount < 0) // shouldn't happen
- return;
- damage = Math.min(MAX_DAMAGE, damage + amount);
- if (damage == MAX_DAMAGE)
- setIsAlive(false);
- }
-
- /** repairs some damage
- */
- void repairDamage(double amount) {
- if (amount < 0) // shouldn't happen
- return;
- if (damage == 0)
- return;
- damage = Math.max(0, damage - amount);
- }
-
- public void clockTick() {
- if (! isAlive()) {
- //
- // If we aren't alive, but we are still in the registry, it means
- // we are exploding. countdown counts the length of the explosion.
- //
- if (--countdown == 0)
- die();
- }
- else {
- if (angularVel != 0) {
- orientation += angularVel;
- xAcc = rAcc * Math.cos(orientation);
- yAcc = rAcc * Math.sin(orientation);
- }
- setXVel(getXVel() + xAcc);
- setYVel(getYVel() + yAcc);
-
- //expend energy
- if (!expendEnergy(rAcc * ACCELERATION_COST_FACTOR))
- rAcc = xAcc = yAcc = 0;
-
- // fix damage
- if (energy > 10 && damage > REPAIR_RATE) {
- expendEnergy(REPAIR_RATE);
- repairDamage(REPAIR_RATE);
- }
- }
- super.clockTick();
- }
-
- /**
- * First check to make sure we have enough energy to accelerate. If
- * we do, then go ahead and do so. Acceleration is in the direction
- * we are already facing (i.e. orientation).
- */
- void setAcceleration(double acc) {
- if (acc * ACCELERATION_COST_FACTOR <= energy) {
- rAcc = acc;
- xAcc = rAcc * Math.cos(orientation);
- yAcc = rAcc * Math.sin(orientation);
- }
- }
-
- /**
- * First check to make sure we have enough energy to rotate. If
- * we do, then go ahead and do so.
- */
- void setAngularVelocity(double omega) {
- // changing direction of rotation takes energy
- if (!expendEnergy(Math.abs(omega - angularVel) / 2))
- return;
- //sets amount of degree rotation per clock tick, in radians;
- //clockwise is positive
- angularVel = omega;
- }
-
- /** affect rotation thrusters. Direction can be one of {@link
- * #CLOCKWISE}, {@link #COUNTERCLOCKWISE}, or zero for turning off
- * the thrusters.
- */
- void rotate(int direction) {
- setAngularVelocity(
- direction == CLOCKWISE ? DEFAULT_ANGULAR_VELOCITY :
- direction == COUNTERCLOCKWISE ? -DEFAULT_ANGULAR_VELOCITY :
- 0);
- }
-
- /** turn on acceleration */
- void thrust(boolean onOff) {
- setAcceleration(onOff ? DEFAULT_ACCELERATION : 0);
- }
-
- /** create a bullet and fire it */
- void fire() {
- // firing a shot takes energy
- if (!expendEnergy(BULLET_ENERGY))
- return;
-
- //create a bullet object so it doesn't hit the ship that's firing it
- double xV = getXVel() + BULLET_SPEED * (Math.cos(orientation));
- double yV = getYVel() + BULLET_SPEED * (Math.sin(orientation));
-
- // create the actual bullet
- new Bullet(
- getGame(),
- (getXPos() + ((getSize()/2 + 2) * (Math.cos(orientation))) + xV),
- (getYPos() + ((getSize()/2 + 2) * (Math.sin(orientation))) + yV),
- xV,
- yV);
- }
-
-
- void handleCollision(SpaceObject obj) {
- if (obj instanceof Ship) {
- // should never be called. ship - ship collisions are handled in
- // Ship.bounce(Ship shipA, Ship shipB)
- }
- else if (obj instanceof Bullet) {
- inflictDamage(BULLET_DAMAGE);
- }
- else if (obj instanceof EnergyPacket) {
- double packetEnergy = ((EnergyPacket)obj).getEnergy();
- energy = Math.max(0, Math.min(energy + packetEnergy, MAX_ENERGY));
- }
- else {
- System.err.println("collision with UFO!");
- }
- }
-
- static void bounce(Ship shipA, Ship shipB) {
- double dx, dy, denominator,
- xAccA, yAccA, xAccB, yAccB, damage,
- xComp, yComp, dvx, dvy;
-
- dx = Math.abs(shipA.getXPos() - shipB.getXPos());
- dy = Math.abs(shipA.getYPos() - shipB.getYPos());
- denominator = Math.sqrt(dx * dx + dy * dy);
- xComp = dx / denominator;
- yComp = dy / denominator;
- xAccA = shipB.getXVel() * xComp + shipA.getXVel() * (1 - xComp) -
- shipA.getXVel();
- yAccA = shipB.getYVel() * yComp + shipA.getYVel() * (1 - yComp) -
- shipA.getYVel();
- xAccB = shipA.getXVel() * xComp + shipB.getXVel() * (1 - xComp) -
- shipB.getXVel();
- yAccB = shipA.getYVel() * yComp + shipB.getYVel() * (1 - yComp) -
- shipB.getYVel();
- shipA.accelerate(xAccA, yAccA);
- shipB.accelerate(xAccB, yAccB);
- dvx = shipA.getXVel() - shipB.getXVel();
- dvy = shipA.getYVel() - shipA.getYVel();
- damage = COLLISION_DAMAGE_FACTOR * (dvx * dvx + dvy * dvy);
- shipA.inflictDamage(damage);
- shipB.inflictDamage(damage);
-
- // !!!
- // !!! poopers! this does a local time warp. this has to be a
- // !!! violation of the clockTick protocol
- // !!!
- while (Game.isCollision(shipA, shipB)) {
- shipA.clockTick();
- shipB.clockTick();
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/SpaceObject.java b/docs/modules/ROOT/pages/examples/spacewar/SpaceObject.java
deleted file mode 100644
index ee3afabcc..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/SpaceObject.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-SpaceObject.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-
-/**
- * SpaceObjects are objects that float around in space. They support the
- * minimal SpaceObject protocol, having to do with position, velocity,
- * size and liveness. They are constructed with game, position, velocity
- * and size. When constructed, a spaceobject adds itself to the registry.
- *
- * When it dies, a spaceobject removes itself from the registry. But note
- * that it doesn't decide when to die, subclasses do that.
- *
- * The display aspects actually draw the space object on the screen and say
- * how much space it takes up there.
- */
-abstract class SpaceObject {
-
- private Game game;
- private double xPos, yPos, oldXPos, oldYPos, xVel, yVel;
- private boolean alive;
-
- SpaceObject (Game theGame, double xP, double yP, double xV, double yV) {
- game = theGame;
- xPos = xP;
- yPos = yP;
- oldXPos = xP;
- oldYPos = yP;
- xVel = xV;
- yVel = yV;
-
- alive = true;
- getGame().getRegistry().register(this);
- }
-
- Game getGame() { return game; }
-
- double getXPos() { return xPos; }
- double getYPos() { return yPos; }
-
- double getOldXPos() { return oldXPos; }
- double getOldYPos() { return oldYPos; }
-
- double getXVel() { return xVel; }
- double getYVel() { return yVel; }
-
- void setXVel (double n) { xVel = n; }
- void setYVel (double n) { yVel = n; }
-
- boolean isAlive() { return alive; }
- void setIsAlive(boolean n) { alive = n; }
-
-
- /**
- * Move 1 unit of time's worth of distance. I.e. increment xPos by xVel
- * and yPos by yVel. If we move off an edge of the screen move us back
- * in the opposite edge.
- */
- void clockTick() {
- oldXPos = xPos;
- oldYPos = yPos;
- xPos = (xPos + xVel) % getGame().getWidth();
- if(xPos < 0)
- xPos += getGame().getWidth();
- yPos = (yPos + yVel) % getGame().getHeight();
- if(yPos < 0)
- yPos += getGame().getHeight();
- }
-
- void accelerate(double dXVel, double dYVel) {
- xVel += dXVel;
- yVel += dYVel;
- }
-
- void die() {
- getGame().getRegistry().unregister(this);
- }
-
- abstract int getSize();
-
- /** resolve the effects of colliding with a space object.
- * @param obj the space object that this object is colliding with.
- */
- abstract void handleCollision(SpaceObject obj);
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/Timer.java b/docs/modules/ROOT/pages/examples/spacewar/Timer.java
deleted file mode 100644
index 1f4a992a7..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/Timer.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-
-Copyright (c) Xerox Corporation 1998-2002. All rights reserved.
-
-Use and copying of this software and preparation of derivative works based
-upon this software are permitted. Any distribution of this software or
-derivative works must comply with all applicable United States export control
-laws.
-
-This software is made available AS IS, and Xerox Corporation makes no warranty
-about the software, its performance or its conformity to any specification.
-
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-|<--- this code is formatted to fit into 80 columns --->|
-
-
-Timer.java
-Part of the Spacewar system.
-
-*/
-
-package spacewar;
-
-
-class Timer extends Thread {
-
- private final static int TICK_PERIOD = 40; // time between ticks in millis
-
- private Game game;
-
- Game getGame() { return game; }
-
- Timer (Game theGame) {
- super("Timer");
- game = theGame;
- }
-
- public void run() {
- long t1, tdiff;
- while (true) {
- t1 = System.currentTimeMillis();
- getGame().clockTick();
- tdiff = System.currentTimeMillis() - t1;
- if (tdiff < TICK_PERIOD) {
- try {
- sleep (Math.max(0 , TICK_PERIOD - tdiff));
- }
- catch (InterruptedException e) { }
- }
- }
- }
-}
diff --git a/docs/modules/ROOT/pages/examples/spacewar/debug.lst b/docs/modules/ROOT/pages/examples/spacewar/debug.lst
deleted file mode 100644
index 3de8ddafe..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/debug.lst
+++ /dev/null
@@ -1,2 +0,0 @@
-@demo.lst
-Debug.java
diff --git a/docs/modules/ROOT/pages/examples/spacewar/demo.lst b/docs/modules/ROOT/pages/examples/spacewar/demo.lst
deleted file mode 100644
index dd188af83..000000000
--- a/docs/modules/ROOT/pages/examples/spacewar/demo.lst
+++ /dev/null
@@ -1,19 +0,0 @@
-@../coordination/lib.lst
-Bullet.java
-EnergyPacket.java
-EnergyPacketProducer.java
-Game.java
-GameSynchronization.java
-Pilot.java
-Registry.java
-RegistrySynchronization.java
-Robot.java
-Ship.java
-EnsureShipIsAlive.java
-SpaceObject.java
-Timer.java
-SWFrame.java
-Display.java
-Display1.java
-Display2.java
-Player.java