/***********************************/ /* Player.java */ /* main.part */ /***********************************/ import java.io.*; import java.util.*; import java.net.*; import java.lang.*; class Player { boolean DEBUG = true; DatagramSocket socket; int m_port; InetAddress m_host; String message; char side; // side{left, right} int iside; // 1 = left side, -1 = right side int p_no; // player number protected static double initial_pos[][] = { // initial position {x, y} { 0.0, 0,0}, // 0 dummy player { -47.0, 0.0 }, // 1 palyer number { -5.0, 2.7 }, // 2 { -5.7, -10.5 }, // 3 { -5.5, 19.5 }, // 4 { -5.5, -19.5 }, // 5 { -5.5, -3.0 }, // 6 { -17.0, 6.25 }, // 7 { -17.0, -6.25 }, // 8 { -18.5, 14.5 }, // 9 { -18.5, 0.0 }, // 10 { -18.5, - 14.5 } }; // 11 public void connect(String host, int port, String team) throws SocketException, IOException { socket = new DatagramSocket(); m_port = port; m_host = InetAddress.getByName(host); // send init command to soccer serever. send("(init " + team + ")"); // recieve the first reply from the soocer server. message = receive(); if(DEBUG) System.out.println("received message =" + message); // returns side and player number from "(init l 8 before_kick_off)". try{ StringTokenizer tokenizer = new StringTokenizer(message,"() "); // We get side and player_number form reply for 'init' command. if( tokenizer.nextToken().compareTo("init") != 0) { throw new IOException(message); } side = tokenizer.nextToken().charAt(0); p_no = Integer.parseInt(tokenizer.nextToken()); } catch (Exception e){ System.err.println(e); } if(DEBUG) System.out.println("side & player-number = " + side + p_no); ready(); return; } public void send(String s) { byte[] send_data = new byte[s.length()]; send_data = s.getBytes(); if(DEBUG) System.out.println("-> sent message:" + send_data.length + "=" + s ); try{ DatagramPacket p_out = new DatagramPacket(send_data, send_data.length, m_host, m_port); socket.send(p_out); } catch (IOException e){ System.out.println("socket sending error:" + e); } } public String receive() { int MAX_LENGTH = 1028; /* message buffer length */ byte[] buffer = new byte[MAX_LENGTH]; byte[] data = new byte[MAX_LENGTH]; DatagramPacket p_in = new DatagramPacket(buffer, buffer.length); try{ socket.receive(p_in); // port[6000] is used only first connection. m_port = p_in.getPort(); // after "init", use port[xxxx] recieved packet. if(DEBUG) System.out.println("retruned port n# =" + m_port); } catch (IOException e){ System.err.println("socket recieving error:" + e); } data = p_in.getData(); return new String(data, 0, p_in.getLength()); } public void ready() { for(int i = 0; i < 5; i++){ if(DEBUG) System.out.println("time:" + System.currentTimeMillis()); try{ Thread.sleep(200); }catch(Exception e){ } if(DEBUG) System.out.println("time:" + System.currentTimeMillis()); send("(move " + Double.toString(initial_pos[p_no][0]*(i+1)/5) + " " + Double.toString(initial_pos[p_no][1]*(i+1)/5) + ")"); message = receive(); if(DEBUG) System.err.println("received message =" + message); } } }