import java.awt.*; import java.awt.event.*; import java.awt.Graphics; import javax.swing.*; import org.omg.CosNaming.*; import org.omg.CORBA.*; /* ************************************************* */ public class hrclient extends JFrame { private Graphics brush; public Graphics display; private Image canvas; // off-screen graphics buffer private Image background; // racing background gif private Image staticbkgrd; // static (stretched) background; private Image racergif; // horse and rider animated gif public int HN = 3; // number of horses public int TW = 800; // track length; public int TH; // track height - depends on number of racers public int LW = 60; // lane width private byte id; private horse[] H; // information for all horses private horserace server; // corba orbject public void paint(Graphics g) {} // overrides auto-update public static void main(String[] args) // needed for application { hrclient session = new hrclient(); session.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); session.init(args); } // main public void init(String[] args) { //CORBA STUFF try { String[] options = new String[4]; options[0] = "-ORBInitialHost"; options[1] = args[1]; options[2] = "-ORBInitialPort"; options[3] = "10000"; ORB myorb = ORB.init(options,null); org.omg.CORBA.Object objref = myorb.resolve_initial_references("NameService"); // connect with naming service (registry) NamingContext ncref = NamingContextHelper.narrow(objref); NameComponent[] path = { new NameComponent("hrserver","Object") }; // use nameservice, narrow to obtain object reference server = horseraceHelper.narrow(ncref.resolve(path)); } catch (Exception e) {e.printStackTrace();} // register with server: ByteHolder idh = new ByteHolder(); System.out.println("waiting for other racers ..."); H = server.joinrace(args[0],idh); id = idh.value; HN = H.length; TH = (this.HN * this.LW) + this.LW+10; setBounds(0,0,TW,TH); show(); background = Toolkit.getDefaultToolkit().getImage("hrbackground.gif"); prepareImage(background,this); racergif = Toolkit.getDefaultToolkit().getImage("racer.gif"); prepareImage(racergif,this); canvas = createImage(TW,TH); staticbkgrd = createImage(TW,TH); brush = canvas.getGraphics(); // to double buffer brush.setColor(Color.blue); display = this.getGraphics(); // to screen try { Thread.sleep(750); } catch (InterruptedException IE) {} staticbkgrd.getGraphics().drawImage(background,0,0,TW,TH-30,null); resetbackground(); displayStatus("waiting for other racers ..."); display.drawImage(canvas,0,0,null); // draws to screen race(); } // init public int randint(int min, int max) { return (int) (Math.random() * (max-min+1) + min); } private void resetbackground() { brush.drawImage(staticbkgrd,0,30,null); // draw track lines brush.setColor(Color.blue); for(int i=1;i<=HN+1;i++) { brush.drawLine(0,(i*LW)-5,TW-1,(i*LW)-5); } // finish line: brush.setColor(Color.red); brush.drawLine(TW-15,0,TW-15,TH-1); // finish line } // resetbackground public void nextframe(int delay) // delay in ms { try { Thread.sleep(delay); } catch (InterruptedException IE) {} display.drawImage(canvas,0,0,null); // draws to screen resetbackground(); } // nextframe with ms delay public void displayStatus(String message) { Font oldfont = brush.getFont(); brush.setFont(new Font("Serif",Font.BOLD,24)); brush.drawString(message,TW/3,LW-10); brush.setFont(oldfont); } public void draw(horse racer) { brush.setColor(Color.black); brush.drawString(racer.name,10,(racer.y+55)); brush.drawImage(racergif,racer.x,racer.y,null); } public void race() { int i; // loop counter boolean stoprace = false; int winner; for(i=0;i lead) { lead = H[i].x; winner = i; } else if (H[i].x == lead) winner = -1; } // for loop return winner; } // determineLeader } // class hrclient