ProgrammierMethodik 2002 - RoboCup

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

RCTeam.java

Go to the documentation of this file.
00001 /*
00002  * $Id: RCTeam_8java-source.html,v 1.2 2002/07/07 20:59:52 stork Exp $
00003  *
00004  * $Log: RCTeam_8java-source.html,v $
00004  * Revision 1.2  2002/07/07 20:59:52  stork
00004  * update dokumenation
00004  *
00005  * Revision 1.18  2002/07/05 18:34:08  stork
00006  * update dokumentation
00007  *
00008  * Revision 1.17  2002/07/03 17:24:03  stork
00009  * add log to shell
00010  *
00011  * Revision 1.16  2002/07/02 20:56:19  stork
00012  * add support for central Log
00013  *
00014  * Revision 1.15  2002/06/27 20:26:40  stork
00015  * add + update dokumentation
00016  *
00017  * Revision 1.14  2002/06/22 20:15:41  stork
00018  * add some more dokumentation
00019  *
00020  * Revision 1.13  2002/06/21 17:35:32  stork
00021  * little fix
00022  *
00023  * Revision 1.12  2002/06/16 17:46:21  stork
00024  * rounding double to 3 digits after the comma
00025  *
00026  * Revision 1.11  2002/06/10 20:51:02  stork
00027  * add enemies to info command
00028  *
00029  * Revision 1.10  2002/06/08 14:41:13  stork
00030  * add info to shell
00031  *
00032  * Revision 1.9  2002/06/07 21:41:28  stork
00033  * modify the shell:
00034  * - remove quad. from config
00035  *
00036  * Revision 1.8  2002/06/07 18:15:15  stork
00037  * add send support for shell
00038  *
00039  * Revision 1.5  2002/05/30 15:37:16  stork
00040  * improve handling when server dies before we
00041  *
00042  * Revision 1.4  2002/05/29 21:07:19  stork
00043  * new config file syntax
00044  *
00045  * Revision 1.3  2002/05/25 22:03:56  stork
00046  * add config file support
00047  *
00048  * Revision 1.2  2002/05/21 20:57:14  stork
00049  * first communicator version
00050  *
00051  * Revision 1.1.1.1  2002/05/21 20:32:05  stork
00052  * empty project
00053  *
00054  */
00055 import java.io.*;
00056 import java.util.*;
00057 
00062 public class RCTeam {
00064     public static RCPlayer[] Players;
00065 
00073     public static double doubleRound( double Value, int Digits ){
00074         return (((double)((int)(Value*Math.pow(10,Math.abs(Digits)))))/(1.0*Math.pow(10,Math.abs(Digits))));
00075     }
00076 
00082     static public void main ( String args[] ){
00083         String TeamName = "";
00084         String Server = "localhost";
00085         int Port = 6000;
00086         int PlayerCount = 0 ; // number of players we create
00087 
00088         // parse arguments
00089         if( (args.length == 0) || (args.length > 3) ){
00090             /* wrong arguments */
00091             System.out.println("usage: java RCTeam \"TEAMNAME\" [SERVER] [PORT] ");
00092             System.exit(1);
00093         }else{
00094             /* parse arguments */
00095             try{
00096                 TeamName = args[0];
00097                 if( args.length >= 2 )
00098                     Server = args[1];
00099                 if ( args.length == 3 )
00100                     Port = Integer.parseInt(args[2], 10);
00101             }catch(NumberFormatException e){
00102                 System.out.println(e);
00103                 System.exit(1);
00104             }
00105         }
00106 
00107         // create players
00108         Players = new RCPlayer[11];
00109         // create log
00110         RCLog Log = new RCLog();
00111         try{
00112             /* open log file */
00113             BufferedReader Config = new BufferedReader(new FileReader("RCTeam.cfg"));;
00114             String Line ;
00115             /* read & parse config file */
00116             while( ((Line=Config.readLine()) != null) && (PlayerCount < 11) ){
00117                 Line = Line.trim();
00118                 if( Line.startsWith("#") == false ){
00119                     StringTokenizer tk = new StringTokenizer(Line, ":");
00120                     if( tk.countTokens() == 6){
00121                         try{
00122                             boolean Goalie = Boolean.valueOf(tk.nextToken()).booleanValue();
00123                             boolean Visual = Boolean.valueOf(tk.nextToken()).booleanValue();
00124 
00125                             /* create a new player */
00126                             Players[PlayerCount] = new RCPlayer(TeamName, 
00127                                                                 Visual,
00128                                                                 Server,
00129                                                                 Port,
00130                                                                 Goalie, 
00131                                                                 Float.valueOf(tk.nextToken()).floatValue(),
00132                                                                 Float.valueOf(tk.nextToken()).floatValue(),
00133                                                                 Float.valueOf(tk.nextToken()).floatValue(),
00134                                                                 Float.valueOf(tk.nextToken()).floatValue(),
00135                                                                 Log);
00136                             /* start the player */
00137                             //Players[PlayerCount].setPriority(Thread.MAX_PRIORITY);
00138                             Players[PlayerCount].start();
00139                             /* update internal state */
00140                             PlayerCount++;
00141                         }catch(Exception e){
00142                             System.out.println(e.toString());
00143                             System.exit(1);
00144                         }
00145                     }
00146                 }
00147             }    
00148         }catch(IOException e){
00149             // shit happens
00150             System.out.println(e.toString());
00151             System.exit(1);
00152         }
00153      
00154      
00155         // open shell 
00156         final String Prompt = "[rcteam]> ";
00157         boolean doShell = true;
00158         BufferedReader Input = new BufferedReader(new InputStreamReader(System.in));
00159 
00160         /* display prolog */
00161         System.out.println("RCTeam Shell");
00162         System.out.println("use h <ENTER> for help");
00163         /* enter input loop */
00164         while( doShell ){
00165             try{
00166                 String Command;
00167                 System.out.print(Prompt);
00168                 StringTokenizer Line= new StringTokenizer(Input.readLine().trim());
00169 
00170                 /* wrong input ? */
00171                 if( Line.hasMoreTokens())
00172                     Command = Line.nextToken().trim();
00173                 else
00174                     Command = "help";
00175 
00176                 /* try to satisfy the user */
00177                 if( (Command.compareTo("quit") == 0) || (Command.compareTo("q") == 0) ){
00178                     // we are finish
00179                     doShell = false;
00180                 }else if((Command.compareTo("log") == 0) || (Command.compareTo("l") == 0) ){
00181                     if( Line.hasMoreTokens() ){
00182                         try{
00183                             Log.activeLog = (Boolean.valueOf(Line.nextToken())).booleanValue();
00184                         }catch(Exception e){
00185                             System.out.println("log "+e.toString());
00186                         }
00187                     }
00188                     // output the current status
00189                     if( Log.activeLog ==  true )
00190                         System.out.println("Logging enabled");
00191                     else
00192                         System.out.println("Logging disabled");
00193                     
00194                 }else if( (Command.compareTo("info") == 0) || (Command.compareTo("i") == 0)){
00195                     if( Line.hasMoreTokens() ){
00196                         try{
00197                             int PlayerNumber = Math.abs(Integer.parseInt(Line.nextToken()));
00198                             
00199                             if( (PlayerNumber > 0) && (PlayerNumber <= PlayerCount)){
00200                                 System.out.println("Player's Number   = " + PlayerNumber);
00201                                 System.out.println("Player's Time     = " + Players[PlayerNumber-1].World.CurrentTimeStamp);
00202                                 System.out.println("Player's Angle    = " + Players[PlayerNumber-1].World.angle);
00203                                 System.out.println("Player'a Position = ("+RCTeam.doubleRound((Players[PlayerNumber-1].World.getOurself().X(0)),3)+", "+RCTeam.doubleRound((Players[PlayerNumber-1].World.getOurself().Y(0)),3)+")");
00204                                 System.out.println("Player's Ball     = (" + RCTeam.doubleRound(Players[PlayerNumber-1].World.Ball.X(0),3)+"/"+RCTeam.doubleRound(Players[PlayerNumber-1].World.Ball.Y(0),3)+") at "+ Players[PlayerNumber-1].World.Ball.Time(0) );
00205                                 System.out.println("Player's Area     = ("+
00206                                                    RCTeam.doubleRound(Players[PlayerNumber-1].World.X1,3)+", "+RCTeam.doubleRound(Players[PlayerNumber-1].World.Y1,3)+") => ("+
00207                                                    RCTeam.doubleRound(Players[PlayerNumber-1].World.X2,3)+", "+RCTeam.doubleRound(Players[PlayerNumber-1].World.Y2,3)+")");
00208                                 for(int x = 0; x < 11 ; x++){
00209                                     System.out.println("Player's Enemy "+x+" : ("+
00210                                                        RCTeam.doubleRound(Players[PlayerNumber-1].World.Enemies[x].X(0),3)+", "+
00211                                                        RCTeam.doubleRound(Players[PlayerNumber-1].World.Enemies[x].Y(0),3)+") at "+
00212                                                        Players[PlayerNumber-1].World.Enemies[x].Time(0));
00213                                 }
00214                             }
00215                         }catch(Exception e){
00216                             System.out.println("parse error");
00217                         }
00218                     }
00219                 }else if( (Command.compareTo("network") == 0) || (Command.compareTo("n") == 0)){
00220                     // show information of connection
00221                     System.out.println("Server : " + Server );
00222                     System.out.println("Port   : " + Port);
00223                 }else if( (Command.compareTo("display")==0) || (Command.compareTo("d")==0)){
00224                     if( Line.hasMoreTokens()){
00225                         try{
00226                             int number = Math.abs(Integer.parseInt(Line.nextToken()));
00227                             if( (number <= PlayerCount) && (number > 0) ){
00228                                 Players[number-1].setVisible(true);
00229                             }
00230                         }catch(Exception e){
00231                             
00232                         }
00233                     }
00234                 }else if( (Command.compareTo("config")==0) || (Command.compareTo("c")==0) ){
00235                     System.out.println("Number of Players  : " + PlayerCount );
00236                     System.out.println("Number\tGoalie\tVisual\tStartPoint\tCurrentPoint");
00237                     System.out.println("================================================================================");
00238                     for(int c = 0 ; c < PlayerCount ; c++){
00239                         System.out.println((c+1)+
00240                                            "\t"+Players[c].Communicator.Goalie+
00241                                            "\t"+Players[c].isVisible()+
00242                                            "\t("+RCTeam.doubleRound(((Players[c].World.X1+Players[c].World.X2)/2),3)+", "+RCTeam.doubleRound(((Players[c].World.Y1+Players[c].World.Y2)/2), 3)+")"+
00243                                            "\t("+RCTeam.doubleRound((Players[c].World.getOurself().X(0)),3)+", "+RCTeam.doubleRound((Players[c].World.getOurself().Y(0)),3)+")");
00244                             //                                     "\t("+Players[c].World.X1+", "+Players[c].World.Y1+") => ("+Players[c].World.X2+", "+Players[c].World.Y2+")");
00245                     }
00246                 }else if( (Command.compareTo("send") == 0) || (Command.compareTo("s") == 0)){
00247                     if( Line.hasMoreTokens() ){            
00248                         try{
00249                             int PlayerNumber = Math.abs(Integer.parseInt(Line.nextToken()));
00250                             // send the message
00251                             
00252                             if( (PlayerNumber > 0) && 
00253                                 (PlayerNumber <= PlayerCount) && 
00254                                 (Line.hasMoreTokens())){
00255                                 String Message = "";
00256                                 //while( Line.hasMoreTokens() )
00257                                 //    Message = Message + Line.nextToken()+ " ";
00258                                 Message = Line.nextToken("\n").trim();
00259                                 System.out.println("< "+Message);
00260                                 Players[PlayerNumber-1].Communicator.send(Message);
00261                             }
00262 
00263                         }catch(Exception e){
00264                             
00265                         }
00266                     }               
00267                 }else{              
00268                     // print help message
00269                     System.out.println("(c)onfig        - print configuration of the team");
00270                     System.out.println("(d)isplay NUM   - activate display for the specified player");
00271                     System.out.println("(i)nfo NUM      - dump information for current player");
00272                     System.out.println("(h)elp          - print this message");
00273                     System.out.println("(l)og BOOL      - 1=enable, 0=disable");
00274                     System.out.println("(n)network      - show connection info");
00275                     System.out.println("(q)uit          - quit the team with all the players");            
00276                     System.out.println("(s)end NUM MSG  - send MSG for player NUM");
00277                 }                 
00278             }catch(IOException e){
00279                 System.out.println(e.toString());
00280                 doShell = false;
00281 
00282             }
00283         }
00284 
00285         // kill all players
00286         for( int x=0 ; x < PlayerCount ; x++ )
00287             Players[x].interrupt();
00288 
00289         // just for fun
00290         System.out.print("A Strange Game .\n");
00291         System.out.println("The only winning move is not to play.");
00292         
00293         // we are finish
00294         System.exit(0);
00295     }
00296 }

(c) Copyright by Gruppe 1 :
  • Frederik Transier
  • Motitz Ritter
  • Oliver Strassburger
  • Sven Stork