Computer Science 252
Problem Solving with Java

Fall 2013, The College of Saint Rose

ActiveScribblesF13 Demo

A working demo of ActiveScribblesF13 will appear below. Click inside the applet to interact with it.



ActiveScribblesF13 BlueJ Project

Click here to download a BlueJ project for ActiveScribblesF13.


ActiveScribblesF13 Source Code

The Java source code for ActiveScribblesF13 is below. Click on a file name to download it.


ActiveScribblesF13.java

import objectdraw.*;
import java.awt.*;
import java.util.Random;

/*
 * "Vanishing Scribble" extensions by CSC 252 Fall 2013 class
 *
 * Jim Teresco, The College of Saint Rose, Fall 2013
 * and a cast of almost a dozen
 *
 * $Id: ActiveScribblesF13.java 2218 2013-10-18 14:06:39Z terescoj $
 */

public class ActiveScribblesF13 extends WindowController {

    // random generator to pick line types
    private Random whichType = new Random();
    
    // the current line type: 0 through 11
    private int lineType;

    // location of last mouse position to draw scribble components
    private Location lastMouse;

    // pick a type of line (fading or falling) for this scribble
    // and remember starting point
    public void onMousePress(Location point) {

        lineType = whichType.nextInt(12);
        lastMouse = point;
    }

    // draw a segment of the appropriate type of line then update lastMouse
    public void onMouseDrag(Location point) {

        switch (lineType) {
        case 0:
            new FadingLine(lastMouse, point, canvas);
            break;
        case 1:
            new FallingLine(lastMouse, point, canvas);
            break;
        case 2:
            new RisingLine(lastMouse, point, canvas);
            break;
        case 3:
            new SlidingLine(lastMouse, point, canvas);
            break;
        case 4:
            new MovingLine(lastMouse, point, canvas);
            break;
        case 5:
            new RightLine(lastMouse, point, canvas);
            break;
        case 6:
            new MoveSideToSide(lastMouse, point, canvas);
            break;
        case 7:
            new RisingColor(lastMouse, point, canvas);
            break;
        case 8:
            new ShimmyLine(lastMouse, point, canvas);
            break;
        case 9:
            new SlowLine(lastMouse, point, canvas);
            break;
        case 10:
            new PurpleFade(lastMouse, point, canvas);
            break;
        case 11:
            new FlyingLine(lastMouse, point, canvas);
            break;
        }
        lastMouse = point;
    }
}

MoveSideToSide.java

import objectdraw.*;
import java.awt.*;
/**
 * Write a description of class MoveRight here.  Submissions
 * that do not replace this paragraph with your own description
 * that includes all required items in the class submission
 * guidelines are subject to penalties.
 * 
 * @author (your name) 
 */
public class MoveSideToSide extends ActiveObject
{
 //size and speed of moving to the right
 private static final double INITIAL_X_SPEED = 0.0001;
 private static final int DELAY_TIME = 33;
 private static final int INITIAL_DELAY = 100;
 
 //the line control
 private Line line;
 
 //how far to fall before stopping and disappering
 private double xMax;
 
 //draw a line to move to the right
 public MoveSideToSide(Location start, Location end, DrawingCanvas aCanvas) {
     //draw the line at its initial position
     line = new Line(start, end, aCanvas);
     
     xMax = aCanvas.getWidth();
     
     //activate
     start();
     
    }
    
    public void run() {
        pause(INITIAL_DELAY);
        

        double xSpeed = INITIAL_X_SPEED;
        while (line.getStart().getX() <= xMax || line.getEnd().getX() <= xMax) {
           line.move(xSpeed, 0);
           xSpeed = xSpeed * 1.1;
           pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}

RisingColor.java

// Lily K. Appleton
// Similar to RisingLine
// Addition to VanishingScribble

import objectdraw.*;
import java.awt.*;

public class RisingColor extends ActiveObject
{
    // size and speed of falling lines
    private static final double INITIAL_Y_SPEED = 0.0002;
    private static final int DELAY_TIME = 24;
    private static final int INITIAL_DELAY = 125;

    // the line controlled by this instance
    private Line line;

    // draw something and start it falling
    public RisingColor(Location start,Location end,DrawingCanvas aCanvas)
    {

        line  = new Line(start,end,aCanvas);
        
        // activate the process
        start();
    }
   
// move the line over and over until it is off the screen
    public void run()
    {
        pause(INITIAL_DELAY);
        // slow fall starts, then accelerates
        line.setColor(Color.magenta);
        double ySpeed = -INITIAL_Y_SPEED;
        while (line.getStart().getY()>=0 ||
        line.getEnd().getY()>=0)
        {
            line.move(0,ySpeed);
            ySpeed = ySpeed*1.1;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
    
}
    

SlowLine.java

import objectdraw.*;
import java.awt.*;
/**
 * Write a description of class SlowLine here.  Submissions
 * that do not replace this paragraph with your own description
 * that includes all required items in the class submission
 * guidelines are subject to penalties.
 * 
 * @author (your name) 
 */
public class SlowLine extends ActiveObject{

    private static final double INITIAL_X_SPEED = 2;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 1000;
    
    private Line slowline;
    
    public SlowLine(Location start, Location end, DrawingCanvas aCanvas){
        
       slowline = new Line(start, end, aCanvas);
       slowline.setColor(Color.green);
       
       start();
    }
    
    public void run() {
        
       pause(INITIAL_DELAY);
       
       double xSpeed = -INITIAL_X_SPEED;
      
       while ((slowline.getStart().getX() >= 0) ||
       (slowline.getEnd().getX() >= 0)) {
          slowline.move(xSpeed, 0);
          xSpeed = xSpeed * 1 ;
          pause(DELAY_TIME);
        }
        slowline.removeFromCanvas();
    }
}
       

FadingLine.java

import objectdraw.*;
import java.awt.*;

/*
 * Fading line segments for the VanishingScribble example
 * 
 * A simple active object that controls a line that fades from black
 * through shades of grey, then is removed from the canvas when it becomes
 * white
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 * The College of Saint Rose, Fall 2013
 *
 * $Id: FadingLine.java 2218 2013-10-18 14:06:39Z terescoj $
 */

public class FadingLine extends ActiveObject {

    // amount and speed of the fade
    private static final double FADE_BY = 2;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 1000;

    // the line controlled by this instance
    private Line line;

    // Draw a line and start it falling.
    public FadingLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // activate!
        start();
    }

    // change the line's color periodically so it fades to white
    public void run() {

        pause(INITIAL_DELAY);
        int hue = 0;
        while (hue < 255) {
            line.setColor(new Color(hue, hue, hue));
            pause(DELAY_TIME);
            hue += FADE_BY;
        }
        line.removeFromCanvas();
    }
}

MovingLine.java


/**
 * This will allow one of the options for VanishingScribble to 
 * have the line move off the screen to the right.
 * 
 * 
 * @author Steven Graff 
 */

import objectdraw.*;
import java.awt.*;

public class MovingLine extends ActiveObject
{

    // size and speed of falling lines
    private static final double INITIAL_X_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;

    // how far to fall before stopping and disappearing?
    private double xMax;

    // Draw a ball and start it falling.
    public MovingLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // ask the canvas how big it is so we know when to stop
        xMax = aCanvas.getWidth();

        // activate
        start();
    }

    // move the line repeatedly until it gets sucked off the screen
    public void run() {

        pause(INITIAL_DELAY);

        // start out with a slow fall, then accelerate
        double xSpeed = INITIAL_X_SPEED;

        while ((line.getStart().getX() <= xMax) ||
        (line.getEnd().getX() <= xMax)) {
            line.move(xSpeed, 0);
            xSpeed = xSpeed * 1.1;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}


RisingLine.java

import objectdraw.*;
import java.awt.*;

/*
 * Rising line segments for the VanishingScribble example
 * 
 * A simple active object that controls a line that falls up the
 * canvas and disappears when it goes off the end.
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 * The College of Saint Rose, Fall 2013
 *
 * $Id: RisingLine.java 2218 2013-10-18 14:06:39Z terescoj $
 */

public class RisingLine extends ActiveObject {

    // size and speed of falling lines
    private static final double INITIAL_Y_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;

    // Draw a ball and start it falling.
    public RisingLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // activate!
        start();
    }

    // move the line repeatedly until it falls off screen
    public void run() {

        pause(INITIAL_DELAY);

        // start out with a slow fall, then accelerate
        double ySpeed = -INITIAL_Y_SPEED;

        while ((line.getStart().getY() >= 0) ||
        (line.getEnd().getY() >= 0)) {
            line.move(0, ySpeed);
            ySpeed = ySpeed * 1.1;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}

FallingLine.java

import objectdraw.*;
import java.awt.*;

/*
 * Falling line segments for the VanishingScribble example
 * 
 * A simple active object that controls a line that falls down the
 * canvas and disappears when it goes off the end.
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 * The College of Saint Rose, Fall 2013
 * 
 * $Id: FallingLine.java 2218 2013-10-18 14:06:39Z terescoj $
 */

public class FallingLine extends ActiveObject {

    // size and speed of falling lines
    private static final double INITIAL_Y_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;

    // how far to fall before stopping and disappearing?
    private double yMax;

    // Draw a ball and start it falling.
    public FallingLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // ask the canvas how big it is so we know when to stop
        yMax = aCanvas.getHeight();

        // activate!
        start();
    }

    // move the line repeatedly until it falls off screen
    public void run() {

        pause(INITIAL_DELAY);

        // start out with a slow fall, then accelerate
        double ySpeed = INITIAL_Y_SPEED;

        while ((line.getStart().getY() <= yMax) ||
        (line.getEnd().getY() <= yMax)) {
            line.move(0, ySpeed);
            ySpeed = ySpeed * 1.1;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}

PurpleFade.java

import objectdraw.*;
import java.awt.*;

/*
 *This class creates a line that is originally black and then turns purple
 *before it is removed from the canvas.
 *
 *@Victoria Perras
 */

public class PurpleFade extends ActiveObject {

    // amount and speed of the fade
    private static final int COLOR_INC= 2;
    private static final int DELAY = 33;
    private static final int TIME_B4 = 1000;

    // line object
    private Line line;

    public PurpleFade(Location start, Location end, DrawingCanvas aCanvas) {

        // draw line
        line = new Line(start, end, aCanvas);

        // activate
        start();
    }

    public void run() {
        //delay before action starts
        pause(TIME_B4);

        //initialize color variables
        int blue = 0;
        int red = 0;

        while (blue < 255) {
            line.setColor(new Color(red, 0, blue));
            pause(DELAY);
            blue = COLOR_INC + blue;
            red = COLOR_INC + red;
        }
        pause(DELAY*4);
        line.removeFromCanvas();
    }
}

ShimmyLine.java


import objectdraw.*;

/**
 * @author Scott
 */
public class ShimmyLine extends ActiveObject{
    
    // size and speed of falling lines
    private static final double INITIAL_Y_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;

    public ShimmyLine(Location start, Location end, DrawingCanvas aCanvas)
    {
        
        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // activate!
        start();
    }
    
    // move the line repeatedly until it falls off screen
    public void run() {
        
        int xTrack = 0;
        int xSpeed = 2;

        pause(INITIAL_DELAY);

        // start out with a slow fall, then accelerate
        double ySpeed = -INITIAL_Y_SPEED;

        while ((line.getStart().getY() >= 0) ||
        (line.getEnd().getY() >= 0)) {
            line.move(xSpeed, ySpeed);
            ySpeed = ySpeed * 1.1;
            if(xTrack > 5)
            {
                xSpeed *= -1;
                xTrack = 0;
            }
            xTrack++;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}

FlyingLine.java

import objectdraw.*;
import java.awt.*;


/*
 * This line will fly off to the right.
 *
 * @(author) Conor Smith
 */

public class FlyingLine extends ActiveObject {

    // size and speed of falling lines
    private static final double INITIAL_X_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;
    

    // Draw a ball and start it falling.
    public FlyingLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);
        // activate!
        start();
    }

    // move the line repeatedly until it falls off screen
    public void run() {

        pause(INITIAL_DELAY);
       
        
            // start out with a slow fall, then accelerate
        double xSpeed = INITIAL_X_SPEED;

            while ((line.getStart().getX() <= 400) ||
            (line.getEnd().getX() <= 400)) {
                line.move(xSpeed, 0);
                xSpeed = xSpeed * 1.1;
                pause(DELAY_TIME);
            
            }
       
        line.removeFromCanvas();
    
    }   

}

RightLine.java

import objectdraw.*;
import java.awt.*;

/*
 * Rising line segments for the VanishingScribble example
 * 
 * A simple active object that controls a line that falls up the
 * canvas and disappears when it goes off the end.
 *
 * Jim Teresco, Siena College, CSIS 120, Spring 2011
 * The College of Saint Rose, Fall 2013
 *
 * $Id: RightLine.java 2218 2013-10-18 14:06:39Z terescoj $
 */

public class RightLine extends ActiveObject {

    // size and speed of falling lines
    private static final double INITIAL_Y_SPEED = 0.0001;
    private static final int DELAY_TIME = 33;
    private static final int INITIAL_DELAY = 100;

    // the line controlled by this instance
    private Line line;

    // Draw a ball and start it falling.
    public RightLine(Location start, Location end, DrawingCanvas aCanvas) {

        // draw the line at its initial position
        line = new Line(start, end, aCanvas);

        // activate!
        start();
    }

    // move the line repeatedly until it falls off screen
    public void run() {

        pause(INITIAL_DELAY);

        // start out with a slow fall, then accelerate
        double ySpeed = -INITIAL_Y_SPEED;

        while ((line.getStart().getY() >= 0) ||
        (line.getEnd().getY() >= 0)) {
            line.move(1, ySpeed);
            ySpeed = ySpeed * 1.1;
            pause(DELAY_TIME);
        }
        line.removeFromCanvas();
    }
}


SlidingLine.java

import objectdraw.*;
import java.awt.*;
/**
 * Sliding line addition to the VanishingScribble program.
 * This class adds a feature in which lines slide to left.
 * csc252. 10.1.13. 
 * 
 * @author (Jotham Zak) 
 */
public class SlidingLine extends ActiveObject {
//  declare variables
  private static final double INITIAL_X_SPEED = 0.0001;
  private static final int DELAY_TIME = 33;
  private static final int INITIAL_DELAY = 100;
  private Line line;
  
//draw the line and begin sliding.
  public SlidingLine(Location start, Location end, DrawingCanvas aCanvas){
  line = new Line(start, end, aCanvas);
  start();
 

}
//move the line until it vanishes
public void run(){
pause(INITIAL_DELAY);

//acceleration
double xSpeed = -INITIAL_X_SPEED;

while((line.getStart().getX() >= 0) || (line.getEnd().getX()  >= 0)){
 line.move(xSpeed, 0);
 xSpeed = xSpeed * 1.1;
 pause(DELAY_TIME);
}
line.removeFromCanvas();
}


}