A. Setting the number of players
package wackadot;
import fang.*;
import java.awt.Color;
import java.awt.geom.*;
public class Wackadot extends GameLoop
{
private Sprite dot;
private Sprite redDot;
private Sprite blueDot;
private StringSprite scoreSprite;
private int score;
public void startGame()
{
makeSprites();
addSprites();
score=0;
}
private void makeSprites()
{
Ellipse2D.Double circle=new Ellipse2D.Double(0, 0, 1, 1);
dot=new Sprite(circle);
dot.setScale(0.1);
dot.setLocation(0.5, 0.5);
dot.setColor(Color.RED);
redDot=new Sprite(circle);
redDot.setScale(0.1);
redDot.setLocation(random.nextDouble(),random.nextDouble());
redDot.setColor(Color.RED);
blueDot=new Sprite(circle);
blueDot.setScale(0.1);
blueDot.setLocation(random.nextDouble(),random.nextDouble());
blueDot.setColor(Color.BLUE);
scoreSprite=new StringSprite("Score: "+score);
scoreSprite.setHeight(0.1);
scoreSprite.rightJustify();
scoreSprite.topJustify();
scoreSprite.setLocation(1, 0);
}
private void addSprites()
{
canvas.addSprite(dot);
canvas.addSprite(redDot);
canvas.addSprite(blueDot);
canvas.addSprite(scoreSprite);
}
private void updateScore()
{
scoreSprite.setText("Score: "+score);
}
public static void main(String[] argv)
{
Wackadot dot=new Wackadot();
dot.players=2;
dot.runAsApplication();
}
private void repositionRandomly(Sprite sprite)
{
sprite.setLocation(random.nextDouble(),random.nextDouble());
}
private void handleCollisions()
{
if(dot.intersects(blueDot) || dot.intersects(redDot))
{
long seed=(long)(1000*getTime());
random.setSeed(seed);
}
if(dot.intersects(blueDot))
{
repositionRandomly(blueDot);
if(dot.getColor().equals(Color.BLUE))
{
dot.setColor(Color.RED);
score++;
}
else
{
score--;
}
updateScore();
}
if(dot.intersects(redDot))
{
repositionRandomly(redDot);
if(dot.getColor().equals(Color.RED))
{
dot.setColor(Color.BLUE);
score++;
}
else
{
score--;
}
updateScore();
}
}
public void advanceFrame(double timePassed)
{
Point2D.Double mouse=getPlayer().getMouse().getLocation();
dot.setLocation(mouse);
handleCollisions();
}
}
B. Tracking the players
package wackadot;
import fang.*;
import java.awt.Color;
import java.awt.geom.*;
public class Wackadot extends GameLoop
{
private Sprite[] dot;
private Sprite redDot;
private Sprite blueDot;
private StringSprite scoreSprite;
private int score;
public void startGame()
{
makeSprites();
addSprites();
score=0;
}
private void makeSprites()
{
Ellipse2D.Double circle=new Ellipse2D.Double(0, 0, 1, 1);
dot=new Sprite[getNumberOfPlayers()];
for(int i=0; i<dot.length; i++)
{
dot[i]=new Sprite(circle);
dot[i].setScale(0.1);
dot[i].setLocation(0.5, 0.5);
dot[i].setColor(Color.RED);
}
redDot=new Sprite(circle);
redDot.setScale(0.1);
redDot.setLocation(random.nextDouble(),random.nextDouble());
redDot.setColor(Color.RED);
blueDot=new Sprite(circle);
blueDot.setScale(0.1);
blueDot.setLocation(random.nextDouble(),random.nextDouble());
blueDot.setColor(Color.BLUE);
scoreSprite=new StringSprite("Score: "+score);
scoreSprite.setHeight(0.1);
scoreSprite.rightJustify();
scoreSprite.topJustify();
scoreSprite.setLocation(1, 0);
}
private void addSprites()
{
canvas.addSprite(dot);
canvas.addSprite(redDot);
canvas.addSprite(blueDot);
canvas.addSprite(scoreSprite);
}
private void updateScore()
{
scoreSprite.setText("Score: "+score);
}
public static void main(String[] argv)
{
Wackadot dot=new Wackadot();
dot.players=2;
dot.runAsApplication();
}
private void repositionRandomly(Sprite sprite)
{
sprite.setLocation(random.nextDouble(),random.nextDouble());
}
private void handleCollisions()
{
Instruction: Delete all code inside the handleCollisions method
It will look like what is here except for without this instruction.
}
public void advanceFrame(double timePassed)
{
for(int i=0; i<dot.length; i++)
{
Point2D.Double mouse=getPlayer(i).getMouse().getLocation();
dot[i].setLocation(mouse);
}
handleCollisions();
}
}
C. Preparing for a new way to handle collisions
package wackadot;
import fang.*;
import java.awt.Color;
import java.awt.geom.*;
public class Wackadot extends GameLoop
{
private Sprite[] dot;
private Sprite redDot;
private Sprite blueDot;
private StringSprite scoreSprite;
private int score;
public void startGame()
{
makeSprites();
addSprites();
score=0;
}
private void makeSprites()
{
Ellipse2D.Double circle=new Ellipse2D.Double(0, 0, 1, 1);
dot=new Sprite[getNumberOfPlayers()];
for(int i=0; i<dot.length; i++)
{
dot[i]=new Sprite(circle);
dot[i].setScale(0.1);
dot[i].setLocation(0.5, 0.5);
dot[i].setColor(Color.RED);
}
redDot=new Sprite(circle);
redDot.setScale(0.1);
redDot.setLocation(random.nextDouble(),random.nextDouble());
redDot.setColor(Color.RED);
blueDot=new Sprite(circle);
blueDot.setScale(0.1);
blueDot.setLocation(random.nextDouble(),random.nextDouble());
blueDot.setColor(Color.BLUE);
scoreSprite=new StringSprite("Score: "+score);
scoreSprite.setHeight(0.1);
scoreSprite.rightJustify();
scoreSprite.topJustify();
scoreSprite.setLocation(1, 0);
}
private void addSprites()
{
canvas.addSprite(dot);
canvas.addSprite(redDot);
canvas.addSprite(blueDot);
canvas.addSprite(scoreSprite);
}
private void updateScore()
{
scoreSprite.setText("Score: "+score);
}
public static void main(String[] argv)
{
Wackadot dot=new Wackadot();
dot.players=2;
dot.runAsApplication();
}
private void repositionRandomly(Sprite sprite)
{
sprite.setLocation(random.nextDouble(),random.nextDouble());
}
private void handleCollisions()
{
for(int i=0; i<dot.length; i++)
{
handleCollisions(i);
}
}
private void handleCollisions(int playerIndex)
{
if(dot[playerIndex].intersects(blueDot) ||
dot[playerIndex].intersects(redDot))
{
long seed=(long)(1000*getTime());
random.setSeed(seed);
}
if(dot[playerIndex].intersects(blueDot))
{
repositionRandomly(blueDot);
if(dot[playerIndex].getColor().equals(Color.BLUE))
{
dot[playerIndex].setColor(Color.RED);
score++;
}
else
{
score--;
}
updateScore();
}
if(dot[playerIndex].intersects(redDot))
{
repositionRandomly(redDot);
if(dot[playerIndex].getColor().equals(Color.RED))
{
dot[playerIndex].setColor(Color.BLUE);
score++;
}
else
{
score--;
}
updateScore();
}
}
public void advanceFrame(double timePassed)
{
for(int i=0; i<dot.length; i++)
{
Point2D.Double mouse=getPlayer(i).getMouse().getLocation();
dot[i].setLocation(mouse);
}
handleCollisions();
}
}
D. Running the game: Have one person run Wackadot, enter a name, change the server field to "server.fangengine.org" and hit start. After a second the window should display a message "Waiting for 1 player to join". After it says this, the other person should enter the same game name, the same server name, and then hit start.