package wackadot;

public class Wackadot
{
}


A. Setup

package wackadot;

import fang.*;

public class Wackadot extends GameLoop
{
    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        dot.runAsApplication();
    }

}


B. Making Dots

package wackadot;

import fang.*;
import java.awt.Color;
import java.awt.geom.*;


public class Wackadot extends GameLoop
{
    private Sprite dot;
    
    public void startGame()
    {
        makeSprites();
        addSprites();
    }
    
    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);
    }
    
    private void addSprites()
    {
        canvas.addSprite(dot);
    }

    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        dot.runAsApplication();
    }
}


C. Using the Mouse

package wackadot;

import fang.*;
import java.awt.Color;
import java.awt.geom.*;

public class Wackadot extends GameLoop
{
    private Sprite dot;
    
    public void startGame()
    {
        makeSprites();
        addSprites();
    }
    
    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);
    }
    
    private void addSprites()
    {
        canvas.addSprite(dot);
    }

    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        dot.runAsApplication();
    }

    public void advanceFrame(double timePassed)
    {
        Point2D.Double mouse=getPlayer().getMouse().getLocation();
        dot.setLocation(mouse);
    }

}


D&E. Adding more Dots

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;

    public void startGame()
    {
        makeSprites();
        addSprites();
    }
    
    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);
    }
    
    private void addSprites()
    {
        canvas.addSprite(dot);
        canvas.addSprite(redDot);
        canvas.addSprite(blueDot);
    }

    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        dot.runAsApplication();
    }

    public void advanceFrame(double timePassed)
    {
        Point2D.Double mouse=getPlayer().getMouse().getLocation();
        dot.setLocation(mouse);
    }
}


F&G. Collision Handling

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;
    
    public void startGame()
    {
        makeSprites();
        addSprites();
    }
    
    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);
    }
    
    private void addSprites()
    {
        canvas.addSprite(dot);
        canvas.addSprite(redDot);
        canvas.addSprite(blueDot);
    }

    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        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.intersects(redDot))
        {
            repositionRandomly(redDot);
        }
    }

    public void advanceFrame(double timePassed)
    {
        Point2D.Double mouse=getPlayer().getMouse().getLocation();
        dot.setLocation(mouse);
        handleCollisions();
    }
}


H. Switching Dot colors on collision

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;
    
    public void startGame()
    {
        makeSprites();
        addSprites();
    }
    
    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);
    }
    
    private void addSprites()
    {
        canvas.addSprite(dot);
        canvas.addSprite(redDot);
        canvas.addSprite(blueDot);
    }

    public static void main(String[] argv)
    {
        Wackadot dot=new Wackadot();
        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);
            }
        }
        if(dot.intersects(redDot))
        {
            repositionRandomly(redDot);
            if(dot.getColor().equals(Color.RED))
            {
                dot.setColor(Color.BLUE);
            }
        }
    }

    public void advanceFrame(double timePassed)
    {
        Point2D.Double mouse=getPlayer().getMouse().getLocation();
        dot.setLocation(mouse);
        handleCollisions();
    }
}


I. Keeping Score

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.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();
    }
}