/**********************************************************************************
* *
* Jumping letter Applet *
* ( Bounder.java ) *
* Author : Seiichi Inoue *
**********************************************************************************/
/********************** << Imported package class definition >> *******************/
import java.applet.Applet; /* Applet packages */
import java.awt.*; /* All of the Abstract Windowing Toolkit packages */
/************************** <<Oneself of class definition>> ***********************/
// Class name : Bounder
// Access control : public( Access possibility even from which class )
// Extends class : Applet
// Implements class: Runnable( Use of Thread is enabled )
public class Bounder extends Applet implements Runnable {
/************************* << Class attribute of definition >> ********************/
Dimension d; /* Display range */
String s[]; /* Letter arrangement range */
String param; /* Parameter reading */
Thread kicker=null; /* Thread(Initial value:suspension) */
int xScroll; /* Scroll position */
Font font; /* The letter height */
int fontsize; /* Font size */
String fontname; /* Font name */
int strWidth; /* The letter line width */
int maxText; /* The number of letter block */
int curTextCount = 0; /* Present letter block */
boolean randomcolor; /* Color designated of letter */
int red,blue,green; /* Letter color */
Color color; /* Letter color */
int backred,backblue,backgreen; /* Background color */
Color backcolor; /* Background color */
int speed; /* Display speed */
Image offs; /* Off screen */
Graphics grf; /* Drawing range */
int bound_y; /* The height of bound */
double time; /* Progress time (64 bit long data) */
int start_speed; /* Input initial velocity */
int start_H; /* Initial velocity */
int f_Descent; /* Lower distance fm reference point*/
/***************** << Class of method (implementation procedure) >> ***************/
//
/******** Initialization (init) method *********/
public void init() {
d = size(); /* Set display screen size */
xScroll = d.width; /* Set display start position */
offs = createImage(d.width,d.height); /* Off scr area preparation */
grf = offs.getGraphics(); /* Graphics object extraction */
param = getParameter("speed"); /* Input "speed" reading */
speed = (param != null)? /* Input determination */
Integer.parseInt(param): 1;
if(speed < 1 && speed > 5) { /* Input abnormal determ */
speed = 1; /* Set 1 at abnormality */
}
param = getParameter("maxText"); /* Text block number reading */
maxText = (param != null)? /* Input determination */
Integer.parseInt(param): 1;
s = new String[maxText]; /* Preparation letter arrange */
param = getParameter("fontsize"); /* Font size reading */
fontsize = (param != null)? /* Input determination */
Integer.parseInt(param): 30;
param = getParameter("font"); /* Font reading */
fontname = (param != null)? /* Input determination */
param: "Dialog";
param = getParameter("randomcolor"); /* Color designation reading */
param = (param != null)? /* Input determination */
param: "true";
if ( "true".equals (param) ) /* Random designate ? */
randomcolor = true; /* YES: Set random (true) */
else
randomcolor = false; /* No : Set random (false) */
if ( randomcolor ) {} /* Random designate ? */
else { /* No: Parameter designate */
param = getParameter("red"); /* Letter red reading */
red = (param != null)? /* Input determination */
Integer.parseInt(param): 0;
param = getParameter("green"); /* Letter green reading */
green = (param != null)? /* Input determination */
Integer.parseInt(param): 0;
param = getParameter("blue"); /* Letter blue reading */
blue = (param != null)? /* Input determination */
Integer.parseInt(param): 0;
color = new Color(red,green,blue); /* Letter color assembly */
}
param = getParameter("backred"); /* Background red reading */
backred = (param != null)? /* Input determination */
Integer.parseInt(param): 255;
param = getParameter("backgreen"); /* Background green reading */
backgreen = (param != null)? /* Input determination */
Integer.parseInt(param): 255;
param = getParameter("backblue"); /* Background blue reading */
backblue = (param != null)? /* Input determination */
Integer.parseInt(param): 255;
backcolor = new Color(backred,backgreen,backblue); /* Color assembly */
param = getParameter("start_speed"); /* Initial velocity reading */
start_speed = (param != null)? /* Input determination */
Integer.parseInt(param): 40;
param = getParameter("fonttype"); /* Font type reading */
if ( "BOLD".equals (param) ) /* BOLD ? */
font = new Font(fontname,Font.BOLD,fontsize); /* Set BOLD */
else {
if ( "ITALIC".equals (param) ) /* ITALIC ? */
font = new Font(fontname,Font.ITALIC,fontsize); /* Set ITALIC */
else
font = new Font(fontname,Font.PLAIN,fontsize); /* Set PLAIN */
}
f_Descent = (getFontMetrics(font)).getDescent(); /* Get descend of letter*/
int i=0; /* Loop counting initial */
do { /* DO loop */
param = getParameter("text" + (i+1)); /* i+1st text reading */
if(param != null) { /* Text presence determ */
s[i] = new String(param); /* Yes( Text setting ) */
} else { /* No */
if( i==0 ) { /* No text ? */
s[i] = "Text Erorr"; /* Set text abnormal */
}
maxText = i + 1; /* Set text block number */
}
} while(param != null && ++i != maxText); /* DO loop completion determ */
} /* End of initial method */
/******** Implementation (run) method **********/
public void run() {
Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3);
while (kicker != null) { /* Repeat until kicker becomes null */
repaint(); /* Drawing */
try { /* Interruption confirmation */
Thread.sleep( 20 ); /* Wait 20 milli seconds set */
} catch (InterruptedException e) {} /* Interruption processing */
}
kicker = null;
} /* End of run method */
/********** Renewal (update) method ************/
public void update(Graphics g) { /* Lost of screen flickering */
paint(g); /* Drawing */
} /* End of update method */
/*********** Drawing (paint) method ************/
public void paint(Graphics g) {
grf.setFont(font); /* Set display font */
grf.setColor(backcolor); /* Set display back color */
grf.fillRect(0, 0, d.width, d.height); /* Display range is applied */
if (xScroll == d.width) { /* Display position is top? */
curTextCount ++ ;
if (curTextCount > maxText) { /* Letter block over ? */
curTextCount = 1; /* YES: the first block set */
}
strWidth = (getFontMetrics(font)). /* Read width of letter line */
stringWidth(s[curTextCount - 1]);
start_H = start_speed; /* Set initial velocity */
time = 0.1; /* Set initial progress time */
if ( randomcolor ) { /* Letter color random ? */
red = (int)(Math.random() * 256); /* Random red setting */
green = (int)(Math.random() * 256); /* Random green setting */
blue = (int)(Math.random() * 256); /* Random blue setting */
color = new Color(red,green,blue); /* Letter color assembly */
}
}
grf.setColor(color); /* Set display color */
xScroll -= speed; /* Calculate of the move position */
bound_y = (int)(start_H * time - 5.0 * time * time); /* Calculate height */
time += 0.5; /* Addition of progress time */
if ( bound_y < 0 ) { /* Height is negative? */
bound_y = 0; /* To Zero of the height setting */
time = 0.1; /* Set initial progress time */
start_H -= 3; /* Reduction of initial velocity */
if ( start_H < 0 ) { /* Initial velocity is negative? */
bound_y = 0; /* It does not jump */
}
}
if(xScroll < -strWidth) { /* Display end determination */
xScroll = d.width; /* Initialize display position */
}
grf.drawString(s[curTextCount-1],xScroll,/* Display letter */
d.height - f_Descent - bound_y );
g.drawImage(offs, 0, 0, this); /* Image display */
} /* End of drawing method */
/************* Start (start) method ************/
public void start() {
if ( kicker == null ) { /* Kicker is null? ( Suspension? )*/
kicker = new Thread(this); /* YES: kicker setting */
kicker.start(); /* Setting of start */
}
} /* End of start method */
/************ Stop (stop) method ***************/
public void stop() {
if( kicker != null ) { /* Kicker is not null?( action? ) */
kicker.stop(); /* Set kicker to suspension */
kicker = null; /* Set kicker suspension condition*/
}
} /* End of stop method */
} /* End of class setting */
/**********************************************************************************
* End of Jumping letter Applet *
**********************************************************************************/