//
// CHAPTERˇˇ27
// Applet Source Name [Piranihan.java]
// 1996.2
// Author [ Junzo hagimoto ]
import java.applet.*;
import java.awt.*;
import userClass.*;
import userClass.App.*;
public class Piranhan extends AnimatorApplet {
static int MAXTIMER = 100;
Dimension d;
int maxText;
int maxPiranhan;
int speed;
FontStringsArray stringarray;
boolean hitAction = false;
Assistant assist;
public void initAnimator() {
d = size();
String param = getParameter( "speed" );
speed = (param != null) ? Integer.parseInt(param) : 1;
if(speed < 1 || speed > 10 ){
speed = 1;
}
speed = speed * 4;
param = getParameter( "maxText" );
maxText = (param != null) ? Integer.parseInt(param) : 1;
stringarray = new FontStringsArray(this,maxText);
int i=0;
do{
param = getParameter( "text"+ (i+1) );
if(param != null ){
stringarray.add( new String(param) );
}else{
if( i==0 ){
stringarray.add(new String("Java") );
}
maxText = i+1;
}
}while( param != null && ++i != maxText );
param = getParameter( "maxPiranhan" );
maxPiranhan = (param != null) ? Integer.parseInt(param) : 3 ;
assist = new Assistant(this,maxPiranhan);
stringarray.nextString();
}
public void paintAnimator(Graphics g) {
Mover m;
int i=0;
g.setColor(Color.blue);
g.fillRect(0, 0, d.width, d.height);
g.setColor(Color.red);
assist.loop(this,g);
}
public void offScreenPaint(Graphics g,Mover mover,int drawCounter){
if( mover.hitTimer == 0 ){
mover.calcxy(d,speed);
boolean hit = stringarray.hit(mover);
if( hit && hitAction == false && assist.canHit(mover) ){
mover.hitTimer = MAXTIMER;
hitAction = true;
mover.save_x = mover.x;
mover.save_y = mover.y;
assist.createAccessary(mover);
}
if(drawCounter==0 && hitAction == false ){
stringarray.drawString(g);
}
mover.drawImage(g);
}else{
stringarray.drawChars(g,mover,MAXTIMER);
mover.drawImage(g);
mover.hitTimer-- ;
if(mover.hitTimer==0){
hitAction = false;
mover.imgCount=0;
stringarray.nextString();
assist.nextStory(mover);
}
}
}
}
class Assistant {
boolean cloneSwitch = true;
MoverArray piranhanarray;
MoverArray cuttlearray;
MoverArray octopusarray;
MoverArray softcoralarray;
public Assistant(Applet pra,int maxPiranhan){
piranhanarray = new MoverArray(pra,"../appimage/q",11,maxPiranhan);
piranhanarray.createMover();
cuttlearray = new MoverArray(pra,"../appimage/i",6,maxPiranhan);
octopusarray = new MoverArray(pra,"../appimage/o",6,maxPiranhan);
softcoralarray= new MoverArray(pra,"../appimage/sc",6,20);
}
public void loop(Piranhan pra,Graphics g){
int i=0;
Mover m;
for( i=0; (m = piranhanarray.nextMover() ) != null ; i++){
pra.offScreenPaint(g,m,i);
}
for( i=0; (m = cuttlearray.nextMover() ) != null ;i++){
pra.offScreenPaint(g,m,i);
}
for( i=0; (m = octopusarray.nextMover() ) != null;i++ ){
pra.offScreenPaint(g,m,i);
}
for( i=0; (m = softcoralarray.nextMover() ) != null;i++ ){
pra.offScreenPaint(g,m,i);
}
}
public boolean cloneMover( Mover mover){
int sw = (int) (Math.random()*9);
boolean r = false;
switch(sw){
case 0:
Mover m = mover.copy(new MoverPonPon());
if(mover instanceof MoverPonPon ){
if(mover.x - mover.getImageWidth(0) - 10 < 0 ) {
m.x = mover.x + mover.getImageHeight(0) + 10;
}else{
m.x = mover.x - mover.getImageHeight(0) - 10;
}
}
r = piranhanarray.addMover(m);
break;
case 1:
r = piranhanarray.addMover(mover.copy(new MoverHiPower()));
break;
case 2:
case 3:
r = piranhanarray.cloneMover(mover);
break;
case 4:
case 5:
r = cuttlearray.addMover(mover.copy(new MoverCuttle()));
break;
case 6:
case 7:
r = octopusarray.addMover(mover.copy(new MoverOctopus()));
break;
case 8:
r = softcoralarray.addMover((MoverSoftCoral)mover.copy(new MoverSoftCoral()));
break;
}
System.out.println(sw);
return r;
}
public boolean deleteMover( Mover mover){
if(mover instanceof MoverCuttle ){
return cuttlearray.deleteMover(mover);
}
if(mover instanceof MoverOctopus ){
return octopusarray.deleteMover(mover);
}
if(mover instanceof MoverSoftCoral ){
return softcoralarray.deleteMover(mover);
}
return piranhanarray.deleteMover(mover);
}
public boolean canHit( Mover mover){
if( (mover instanceof MoverSoftCoral)||(mover instanceof Bubbles) ||
(mover instanceof Ink ) ){
return false;
}
return true;
}
public void createAccessary(Mover mover){
if(mover instanceof MoverCuttle ){
cuttlearray.addMover( mover.copy(new Ink()));
}else
if(mover instanceof MoverOctopus){
octopusarray.addMover( mover.copy(new Ink()));
}else{
piranhanarray.addMover( mover.copy(new Bubbles()));
}
}
public void nextStory(Mover mover){
if(cloneSwitch){
cloneSwitch = cloneMover(mover);
if(!cloneSwitch){
deleteMover(mover);
}
}else{
cloneSwitch = ! deleteMover(mover);
if(cloneSwitch){
cloneMover(mover);
}
}
}
}