/***********************************/ /* Player1.java */ /* subclass of Player.java */ /***********************************/ import java.util.*; class Player1 extends Player { boolean DEBUG = false; int m_time; int s_time = 200; Vector m_objects; private StringTokenizer s_tokenizer, ss_tokenizer, sensor; public void ready() { int i, Istart, Iobj; ObjectInfo object; if(DEBUG) Istart = 0; else Istart = 4; for(i = Istart; i < 5; i++){ try{ Thread.sleep(s_time); }catch(Exception e){ } send("(move " + Double.toString(initial_pos[p_no][0]*(i+1)/5) + " " + Double.toString(initial_pos[p_no][1]*(i+1)/5) + ")"); message = receive(); System.err.println("received message =" + message); parse(message); for(i = 0; i < m_objects.size(); i++) System.out.println("Object[" + i + "]" + m_objects.elementAt(i)); } for(i = 0; i < 7; i++) { message = receive(); parse(message); for(int j = 0; j < m_objects.size(); j++) { object = (ObjectInfo)m_objects.elementAt(j); if(object.m_type.compareTo("ball") == 0) { System.out.println(" I find the ball. Wait Referee call! "); return; } } send("(turn 60)") ; try{ Thread.sleep(s_time); }catch(Exception e){ } } System.out.println(" I cannot see the ball. I MUST move."); } protected void parse(String message) { message.trim(); sensor = new StringTokenizer(message,"() "); String which = sensor.nextToken(); if (which.compareTo("see") == 0 ) // see-information OR hear-information parseSee(message); else { if (which.compareTo("hear") == 0 ) parseHear(message); else System.err.println("error[received messgae is wrong.]:"+message); } } protected void parseHear(String message) { // get hear information StringTokenizer h_tokenizer = new StringTokenizer(message,"() "); String sender; // skipp hear token h_tokenizer.nextToken(); m_time = Integer.parseInt( h_tokenizer.nextToken() ); sender = h_tokenizer.nextToken(); if( sender.compareTo("referee") == 0 ) System.out.println("Referee says:" + message); else if( sender.compareTo("self") != 0 ) System.out.println("Someone says:" + message); } protected void parseSee(String message) { // get See information ObjectInfo objInfo = null; String token, s_message; m_objects = new Vector(70); // how many objects can I see ? if(DEBUG) { // data format of see information ************* System.out.println("parseSee:"+message); StringTokenizer d_tokenizer = new StringTokenizer(message,"()"); int n = 0; while(d_tokenizer.hasMoreElements()) { s_message = d_tokenizer.nextToken(); s_message.trim(); System.out.println("[" + (n++) + "]" + s_message); StringTokenizer dd_tokenizer = new StringTokenizer(s_message," "); for(int nn = 0; dd_tokenizer.hasMoreElements() ; nn++) System.out.println("\t(" + nn + ")" + dd_tokenizer.nextToken()); } System.out.println("See information Parsing start!!"); } s_tokenizer = new StringTokenizer(message,"()"); s_message = s_tokenizer.nextToken(); ss_tokenizer = new StringTokenizer(s_message, " "); // (see ) part ss_tokenizer.nextToken(); m_time = Integer.parseInt( ss_tokenizer.nextToken() ); if (DEBUG) System.out.println("debug m_time:" + m_time); while(s_tokenizer.hasMoreElements()) { s_message = s_tokenizer.nextToken(); s_message.trim(); if (DEBUG) System.out.println("debug s_message[" + s_message.length() + "]:" + s_message); if (s_message.length() > 1 ) { ss_tokenizer = new StringTokenizer(s_message," "); token = ss_tokenizer.nextToken(); if (DEBUG) System.out.println("\ttoken=" + token); if (token.charAt(0) >= 'A' && token.charAt(0) <= 'z') { objInfo = CreateObject(token, s_message); m_objects.addElement(objInfo); } else { // get distance objInfo.m_distance = Float.valueOf(token).floatValue(); // get direction if(ss_tokenizer.hasMoreElements()) objInfo.m_direction = Float.valueOf(ss_tokenizer.nextToken()).floatValue(); // get distance change if(ss_tokenizer.hasMoreElements()) objInfo.m_distChange = Float.valueOf(ss_tokenizer.nextToken()).floatValue(); // get direction change if(ss_tokenizer.hasMoreElements()) objInfo.m_dirChange = Float.valueOf(ss_tokenizer.nextToken()).floatValue(); // get Body Direstion if(ss_tokenizer.hasMoreElements()) objInfo.m_bodyDir = Float.valueOf(ss_tokenizer.nextToken()).floatValue(); // get Head Direction if(ss_tokenizer.hasMoreElements()) objInfo. m_HeadDir = Float.valueOf(ss_tokenizer.nextToken()).floatValue(); if(ss_tokenizer.hasMoreElements()) System.err.println("parsing: AddInformation() error:" + s_message); if(DEBUG) objInfo.print(); } } } } protected ObjectInfo CreateObject(String token, String s_message) { int number = 0; String token1, teamName = new String(); ObjectInfo objInfo = null; if(token.compareTo("player") == 0) { if (ss_tokenizer.hasMoreElements()) teamName = ss_tokenizer.nextToken(); if (ss_tokenizer.hasMoreElements()) number = Integer.parseInt(ss_tokenizer.nextToken()); objInfo = new PlayerInfo(teamName, number); } else if(token.compareTo("goal") == 0) objInfo = new GoalInfo(ss_tokenizer.nextToken().charAt(0)); else if(token.compareTo("ball") == 0) objInfo = new BallInfo(); else if(token.compareTo("flag") == 0) { char type = ' ', posH = ' ', posV = ' '; switch(ss_tokenizer.countTokens()){ case 1: posH = ss_tokenizer.nextToken().charAt(0); break; case 2: posH = ss_tokenizer.nextToken().charAt(0); posV = ss_tokenizer.nextToken().charAt(0); break; case 3: token1 = ss_tokenizer.nextToken(); if(token1.compareTo("p") == 0 || token1.compareTo("g") == 0) { type = token1.charAt(0); posH = ss_tokenizer.nextToken().charAt(0); posV = ss_tokenizer.nextToken().charAt(0); } else{ posH = token1.charAt(0); posV = ss_tokenizer.nextToken().charAt(0); number = Integer.parseInt(ss_tokenizer.nextToken()); } break; default: System.err.println("parsing error(flag);" + s_message); } objInfo = new FlagInfo(type, posH, posV, number); } else if(token.compareTo("line") == 0) { token1 = ss_tokenizer.nextToken(); // [l|r|t|b] objInfo = new LineInfo(token1.charAt(0)); } // object is within [visible_distance], however ............ else if(token.compareTo("Player") == 0) objInfo = new PlayerInfo(); else if(token.compareTo("Goal") == 0) objInfo = new GoalInfo(); else if(token.compareTo("Ball") == 0) objInfo = new BallInfo(); else if(token.compareTo("Flag") == 0) objInfo = new FlagInfo(); else if(token.compareTo("line") == 0 || token.compareTo("Line") == 0 ) objInfo = new LineInfo(); else{ System.err.println("parsing error;"); } return objInfo; } }