I am trying to repaint my applet every second in order to show a race between a tortoise and a hare, but the swing timer in my applet doesn't seem to be working properly. Any help or advice would be much appreciated!
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import javax.swing.*;
import java.awt.Color;
public class Project2 extends Applet
{
int squaret = 1;
int squareh = 1; //initial location of tortoise and hare
int move;
String tmessage;
String hmessage;
Timer timer;
public void init()
{
timer = new Timer(100, getNewValues);
timer.addActionListener(getNewValues);
timer.start();
}
ActionListener getNewValues = new ActionListener() {
public void actionPerformed(ActionEvent e)
{
repaint();
}
};
public void paint (Graphics g)
{
move = (int)(Math.random() * 10) + 1;
if (move > 8)
{
squaret -= 6;
tmessage = "Tortoise slips!";
if (squaret < 1)
squaret = 1;
}
else if (move > 6)
{
squaret += 1;
tmessage = "Tortoise plods slowly along.";
if (squaret > 49)
squaret = 50;
squareh -=2;
hmessage = "Hare slips slightly.";
if (squareh < 1)
squareh = 1;
}
else if (move > 5)
{
squaret += 1;
tmessage = "Tortoise plods slowly along.";
if (squaret > 49)
squaret = 50;
squareh -=12;
hmessage = "Hare makes a big slip.";
if (squareh < 1)
squareh = 1;
}
else if (move > 2)
{
squaret += 3;
tmessage = "Tortoise plods along quickly.";
if (squaret > 49)
squaret = 50;
squareh += 1;
hmessage = "Hare makes a small hop.";
if (squareh > 49)
squareh = 50;
}
else
{
squaret += 3;
tmessage = "Tortoise plods along quickly.";
if (squaret > 49)
squaret = 50;
squareh += 9;
hmessage = "Hare makes a big hop.";
if (squareh > 49)
squareh = 50;
}
g.drawString("Start (Square 1)", 0, 70);
g.drawString("Finish (Square 50)", 900, 70);
//determine positions for each area
//each box is ten wide and 150 tall
final int WIDTH_OF_OVAL = 4;
final int HEIGHT_OF_OVAL = 4;
final int WIDTH_OF_SQUARE = 20;
final int HEIGHT_OF_SQUARE = 20;
g.setColor(Color.GREEN);
g.fillOval(((WIDTH_OF_SQUARE - WIDTH_OF_OVAL) / 2) + WIDTH_OF_SQUARE * (squaret - 1), ((HEIGHT_OF_SQUARE - HEIGHT_OF_OVAL) / 2), WIDTH_OF_OVAL, HEIGHT_OF_OVAL);
g.setColor(Color.YELLOW);
g.fillOval(((WIDTH_OF_SQUARE - WIDTH_OF_OVAL) / 2) + WIDTH_OF_SQUARE * (squaret - 1), ((HEIGHT_OF_SQUARE - HEIGHT_OF_OVAL) / 2) + HEIGHT_OF_SQUARE, WIDTH_OF_OVAL, HEIGHT_OF_OVAL);
//show messages
g.setColor(Color.BLACK);
g.drawString(tmessage, 10, 100);
g.drawString(hmessage, 10, 120);
g.drawLine(0, HEIGHT_OF_SQUARE, WIDTH_OF_SQUARE * 50, HEIGHT_OF_SQUARE); //draw horizontal middle line
for (int i = 0; i < 50; i++) //draw vertical lines
{
int width = (i + 1) * WIDTH_OF_SQUARE;
g.drawLine(width, 0, width, HEIGHT_OF_SQUARE * 2);
}
if (squaret > 49 && squareh > 49)
{
g.drawString("Tie!", 500, 60);
timer.stop();
}
else if (squaret > 49)
{
g.drawString("Turtle wins!", 500, 60);
timer.stop();
}
else if (squareh > 49)
{
g.drawString("Hare wins!", 500, 60);
timer.stop();
}
else
{
}
update(g);
}
public static void main(String[] args)
{
Project2 panel = new Project2();
JFrame application = new JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
application.add(panel);
application.setSize(2600, 300);
application.setVisible(true);
}
}