import java.applet.*; import java.awt.*; import java.util.*; public class Worm extends Applet{ Image ballpic; int numsegments = 10; float segmentx[], segmenty[], segmentlength[]; int dragx, dragy; public void init(){ int n; setBackground(Color.black); ballpic = getImage(getDocumentBase(), "ball.gif"); segmentx = new float[numsegments]; segmenty = new float[numsegments]; segmentlength = new float[numsegments]; for(n = 0; n < numsegments; n++){ segmentlength[n] = (float)23; segmentx[n] = segmenty[n] = (float)0; } } public void update(Graphics g){ animate_worm(g); } public void animate_worm(Graphics g){ int n, oldx[], oldy[]; float dist, slope, deltax, deltay; oldx = new int[numsegments]; oldy = new int[numsegments]; for(n = 0; n < numsegments; n++){ oldx[n] = (int)segmentx[n]; oldy[n] = (int)segmenty[n]; } segmentx[0] = dragx; segmenty[0] = dragy; for(n = 1; n < numsegments; n++){ deltax = segmentx[n] - segmentx[n - 1]; deltay = segmenty[n] - segmenty[n - 1]; dist = (float)Math.pow(deltax * deltax + deltay * deltay, .5); if(dist != 0){ slope = segmentlength[n] / dist; segmentx[n] = -slope * (segmentx[n - 1] - segmentx[n]) + segmentx[n - 1]; segmenty[n] = -slope * (segmenty[n - 1] - segmenty[n]) + segmenty[n - 1]; } } g.setColor(new Color(0, 0, 0)); for(n = 0; n < numsegments; n++){ g.fillOval((int)oldx[n], (int)oldy[n], ballpic.getWidth(this), ballpic.getHeight(this)); } for(n = numsegments - 1; n >= 0; n--){ g.drawImage(ballpic, (int)segmentx[n], (int)segmenty[n], this); } } public boolean mouseMove(Event evt, int x, int y){ dragx = x - 1; dragy = y - 2; repaint(); return true; } }