import java.applet.Applet; import java.awt.*; class BlinkingCharacter extends ScreenCharacter implements Blinkable { Applet applet; float blinkingRate = MAXRATE; int laptime = (int) (1/blinkingRate); private Thread blinker = null; private boolean isVisibleQ = true; BlinkingCharacter(Applet applet) { // constructor for default initialization this("a", 12, 0, 0, applet); } BlinkingCharacter(String name, int fontsize, int x, int y, Applet applet) { // constructor to initialize letter and position super(name, fontsize, x, y); this.applet = applet; } void randomize() { laptime = randomNumber(500,2000); setBlinkingRate((float) 1/laptime); laptime = (int) (1/blinkingRate); super.randomize(); } public void draw(Graphics g) { if (isVisibleQ) { super.draw(g); } } public void run () { while (blinker != null) { applet.repaint(); try { Thread.sleep(laptime/2); } catch (InterruptedException e) { break; } isVisibleQ = !isVisibleQ; } } public void startBlinking () { if ( blinker == null) { blinker = new Thread(this); blinker.start(); } } public void stopBlinking () { if (blinker != null) { blinker.stop(); } blinker = null; } public float getBlinkingRate () { return blinkingRate; } public void setBlinkingRate (float r) { blinkingRate = Math.max(MINRATE, Math.min(r, MAXRATE)); } }