Thread - Hare and Tortoise Program | Newbie | | Join Date: Mar 2007
Posts: 5
| |
Hello, newbie here...
I'm writing this program but when I click the start button which should initiate either the Hare or the Tortoise, it does not, this is the first time I use threads, so the problem might be the way I'm passing the value.
can someone please take a look at this code and maybe give me some guidance on what I'm doing wrong.
Please note there are 3 separate files with the corresponding classes, I separated it with ===>
Thank You
JC -
package turtoiseandhare;
-
-
import java.awt.*;
-
import java.*;
-
import javax.*;
-
import javax.swing.*;
-
import javax.swing.border.*;
-
import javax.accessibility.*;
-
import java.util.*;
-
import java.awt.event.*;
-
-
public class TurtoiseAndHare extends JFrame
-
{
-
private ImageIcon hare;
-
private ImageIcon tortoise;
-
-
private ImageIcon start;
-
private ImageIcon finish;
-
int turtle_x = 0;
-
int turtle_y = 159;
-
int hare_x = 0;
-
int hare_y = 35;
-
int ha_w;
-
int ha_h;
-
int to_w;
-
int to_h;
-
float fastplod;
-
float slip;
-
float slowplod;
-
-
float sleep;
-
float bighop;
-
float bigslip;
-
float smallhop;
-
float smallslip;
-
-
Display p;
-
Move mo;
-
TnHThread tornhare;
-
Button StartB;
-
Button Stop;
-
String message = "Who will win this amazing race!";
-
-
public TurtoiseAndHare()
-
{
-
setTitle ("Tortoise and the Hare race!");
-
setSize(1000, 405);
-
mo = new Move(this);
-
-
Container contentPane = this.getContentPane();
-
getContentPane().setLayout(new BorderLayout());
-
-
p = new Display();
-
-
-
JPanel q = new JPanel();
-
q.setBorder(BorderFactory.createLineBorder(Color.BLUE));
-
StartB = new Button(" Start ");
-
q.add(StartB);
-
-
JPanel m = new JPanel();
-
m.setBorder(BorderFactory.createLineBorder(Color.BLUE));
-
m.setBackground(Color.getHSBColor(25,55,45));
-
JLabel msg = new JLabel(message);
-
m.add(msg);
-
-
hare = new ImageIcon(getClass().getResource("hare.jpg"));
-
tortoise = new ImageIcon(getClass().getResource("Turtle.jpg"));
-
start = new ImageIcon(getClass().getResource("start.jpg"));
-
finish = new ImageIcon(getClass().getResource("finish.jpg"));
-
-
contentPane.add(p, BorderLayout.CENTER);
-
contentPane.add(q, BorderLayout.SOUTH);
-
contentPane.add(m, BorderLayout.NORTH);
-
-
Handler handler = new Handler();
-
StartB.addActionListener(handler);
-
}
-
class Display extends Canvas
-
{
-
public void paint(Graphics g)
-
{
-
ha_w = hare.getIconWidth();
-
ha_h = hare.getIconHeight();
-
to_w = tortoise.getIconWidth();
-
to_h = tortoise.getIconHeight();
-
-
// super.paint(g);
-
for (int i = 0; i < 780; i++)
-
{
-
tortoise.paintIcon(p, g, i+5, turtle_y);
-
-
};
-
tortoise.paintIcon(p, g, turtle_x, turtle_y);
-
hare.paintIcon(p, g, hare_x, hare_y);
-
start.paintIcon(p, g, 125, 0);
-
finish.paintIcon(p, g, 850, 0);
-
-
g.drawString(message,170,55);
-
}
-
} //end of Display
-
public void raicing(int animal, int x, int y)
-
{
-
if (animal == 1)
-
{
-
hare_x = x;
-
hare_y = y;
-
message = "the hare is at position " + hare_x;
-
}
-
if (animal == 2)
-
{
-
turtle_x = x;
-
turtle_y = y;
-
message = "The Turtoise is at position " + turtle_x;
-
}
-
p.repaint();
-
}//END of Raicing
-
public static void main(String[] args)
-
{
-
// TODO Auto-generated method stub
-
TurtoiseAndHare myrace = new TurtoiseAndHare();
-
myrace.setVisible(true);
-
myrace.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
}//END of Main
-
-
class Handler implements ActionListener
-
{
-
public void actionPerformed (ActionEvent e)
-
{
-
int send;
-
Random startNo = new Random();
-
send = 1 + startNo.nextInt(2);
-
//start button was pressed
-
if (send == 1)
-
{
-
TnHThread h = new TnHThread(send,mo);
-
h.start();
-
}
-
else if (send == 2)
-
{
-
TnHThread t = new TnHThread(send,mo);
-
t.start();
-
}
-
}
-
}
-
}
-
-
==================================>
-
MOVE class
-
-
package Tortoiseandhare;
-
-
import java.util.Random;
-
-
public class Move {
-
-
private boolean lock = true; //1st
-
-
TortoiseAndHare frame;
-
-
public Move(TortoiseAndHare fr) {frame = fr;}
-
-
public void moving(int animal, int hare_x, int hare_y)
-
{
-
if (animal == 1)moving_hare(animal, hare_x, hare_y);
-
if (animal == 2)moving_Tortoise(animal, hare_x, hare_y);
-
}//End of moving
-
public void moving_hare(int animal, int hare_x, int hare_y)
-
{
-
hare_start();
-
go(animal, hare_x, hare_y);
-
hare_stop();
-
}//End of Moving_hare
-
public synchronized void hare_start()
-
{
-
while (lock == false)
-
{
-
try
-
{
-
wait();
-
}
-
catch (InterruptedException e)
-
{
-
System.out.println("Interrupted Exception on the hare");
-
}
-
}//End Of while
-
lock = false;
-
notifyAll();
-
}//END of Synch hare_start
-
-
public synchronized void hare_stop()
-
{
-
lock = true; //3rd
-
notifyAll();
-
}//END of hare_stop
-
-
public void moving_Tortoise(int animal, int hare_x, int hare_y)
-
{
-
Tortoise_start();
-
go(animal, hare_x, hare_y);
-
Tortoise_stop();
-
}//end of Tortoise_start
-
public synchronized void Tortoise_start()
-
{
-
while (lock == false) //7th
-
{
-
try
-
{
-
wait();
-
}
-
catch(InterruptedException e)
-
{
-
System.out.println("Interrupted Exception on the Tortoise");
-
}
-
}//END of While
-
lock = false; //4th
-
notifyAll();
-
} //End of Synch Tortoise_start
-
-
public synchronized void Tortoise_stop()
-
{
-
lock = true; //5th
-
notifyAll();
-
}
-
public void go(int animal, int hare_x, int hare_y)
-
{
-
if (animal == 1) //if animal == hare
-
{
-
hare_y = 35;
-
-
float RandomNo;
-
Random RandNumber = new Random();
-
RandomNo = RandNumber.nextFloat();
-
-
if ( (RandomNo > 0) && (RandomNo <= 0.2) ) //Sleep
-
{
-
//No Move at all
-
try{Thread.sleep(1000);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
-
System.out.println("moving number from Move.go. animal 1 " + animal+ " x = "+hare_x+" y is "+hare_y);
-
}
-
else if ( (RandomNo > 0.2) && (RandomNo <= 0.4 ) ) //Big Hop
-
{
-
System.out.println(" Hare (RandomNo > 0.2) && (RandomNo <= 0.4 ) ");
-
//7 Position to the right
-
hare_x = hare_x + 7;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
-
}
-
else if ( (RandomNo > 0.4) && (RandomNo <= 0.5) ) //Big slip
-
{
-
//10 Position to the left
-
hare_x = hare_x - 10;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
-
}
-
else if ( (RandomNo > 0.5) && (RandomNo <= 0.8) ) //Small hop
-
{
-
//1 position to the right
-
hare_x = hare_x + 1;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
else if ( (RandomNo > 0.8) && (RandomNo <= 1.0) ) //small Slip
-
{
-
//2 position to the left
-
hare_x = hare_x - 2;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
if (hare_x > 770)
-
{
-
System.out.println("The Hare Wins the Race");
-
}
-
-
}
-
if (animal == 2) //if animal == Tortoise
-
{
-
hare_y = 159;
-
float RandomNo;
-
Random RandNumber = new Random();
-
Math.abs(RandomNo = RandNumber.nextFloat());
-
-
-
RandomNo = RandNumber.nextFloat();
-
if ( (RandomNo > 0) && (RandomNo <= .5) ) //Fast Plod Right
-
{
-
//2 Position to the Right
-
hare_x = hare_x + 2;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
else if ( (RandomNo > .5) && (RandomNo <= .7) ) //Slip left
-
{
-
//Slip 4 Position to the left
-
hare_x = hare_x - 4;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
else if( (RandomNo > .7) && (RandomNo <= 1)) //Slow Plod Right
-
{
-
//1 Position to the right
-
hare_x = hare_x + 1;
-
frame.setLocation(hare_x, hare_y);
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
if (hare_x > 770)
-
{
-
System.out.println("The Tortoise Wins the Race");
-
try{Thread.sleep(100);}
-
catch(Exception e){System.err.println("Exception at the Sleeping Thread");}
-
}
-
}
-
}//END of go
-
}//End of Class Move
-
-
-
==================>
-
THREAD CLASS
-
-
package turtoiseandhare;
-
-
import java.util.Random;
-
public class TnHThread extends Thread
-
{
-
public int animal;
-
private int x;
-
private int y;
-
-
Move m;
-
-
public TnHThread(int tr, Move m1)
-
{
-
animal = tr;
-
-
m = m1;
-
if (animal == 1){x = 0; y = 35;}
-
if (animal == 2){x = 0; y = 158;}
-
}
-
-
public void run()
-
{
-
m.moving(animal, x, y);
-
}
-
}
-
-
-
====================>
-
|  | | | | /bytes/about
We are a network of experts and professionals in IT and software development that help one another with answers to tough questions and share insights.
Get the best answers to your questions from over 226,358 network members.
|