home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / Game.java < prev    next >
Encoding:
Java Source  |  1997-07-03  |  5.7 KB  |  219 lines

  1. package borland.samples.apps.chess.server;
  2.  
  3. import java.util.* ;
  4. import borland.samples.apps.chess.client.ServerMessage;
  5.  
  6. public class Game
  7. {
  8.   String white;
  9.   String moves ;
  10.   String whitesLastMove;
  11.   String black;
  12.   String info = ":";
  13.   String whiteTime;
  14.   String blackTime;
  15.   String moveTime;
  16.   String whiteId  = null;
  17.   String blackId  = null;
  18.   String filename = null;
  19.   private int suspendCount = 0;
  20.   int offerFlag = 0;
  21.   int movenum;
  22.   boolean whitetomove;
  23.   Vector Kibitzer;
  24.   private String result;
  25.   private boolean gameover;
  26.  
  27.   public Game (String white, String black) {
  28.     this(white,black,"");
  29.   }
  30.  
  31.   public Game (String white, String black, String info) {
  32.     this.white = white;
  33.     this.black = black;
  34.     this.info = info;
  35.     movenum = 0;
  36.     whitetomove = true;
  37.     Kibitzer =  new  Vector();
  38.     result = "";
  39.     gameover = false;
  40.     whitesLastMove = " ";
  41.     moves = " ";
  42.     whiteTime = "0";
  43.     blackTime = "0";
  44.   }
  45.  
  46.   static final int DrawOffer = 2;
  47.   static final int AbortOffer = 3;
  48.  
  49.   public void setOffer(String offerer,int Offer) {
  50.     offerFlag = Offer;
  51.     if (offerer.equals(white))
  52.       offerFlag = Offer * 2;
  53.   }
  54.   public boolean isOver() {
  55.     return gameover;
  56.   }
  57.   public String getOffer(String offeree) {
  58.     if (offerFlag == 0)
  59.       return null;
  60.     int value = offerFlag ;
  61.     if (offeree.equals(black))
  62.       value = offerFlag / 2;
  63.     System.out.println("Offer was " + value);
  64.     if (value == Game.DrawOffer )
  65.       return "OfferDraw";
  66.     else
  67.       if (value == Game.AbortOffer )
  68.         return "OfferAbort";
  69.     return null;
  70.   }
  71.   public String getWhite() {
  72.     return white;
  73.   }
  74.   public String getBlack() {
  75.     return black;
  76.   }
  77.   public String getWhiteId() {
  78.     return whiteId;
  79.   }
  80.   public String getBlackId() {
  81.     return blackId;
  82.   }
  83.  
  84.   public String getPlayers() {
  85.     return white + " - " + black ;
  86.   }
  87.  
  88.   public String toString() {
  89.     return white + " - " + black  + info;
  90.   }
  91.  
  92.   public void GameOver(String result) {
  93.     this.result = result;
  94.     gameover = true;
  95.     moves =  " [Result \"" + result + "\"]" + moves;
  96.     Chat(new ServerMessage(0,"Chat","Game Over " + result));
  97.     info = " " + result + " " + movenum + " Moves"   ;
  98.   }
  99.  
  100.   public void setInfo() {
  101.      if (gameover)
  102.         return;
  103.      String suspend = "";
  104.      if (suspendCount > 0)
  105.         suspend = " (Suspended)";
  106.      String tomove = " Black to move";
  107.      int move = movenum;
  108.      if (whitetomove)   {
  109.        move++;
  110.        tomove = " White to move";
  111.      }
  112.      info = ": Move " + move + tomove + suspend;
  113.   }
  114.  
  115.   public synchronized void AddMove(ServerMessage smsg) {
  116.        int index = smsg.msg.indexOf(' ');
  117.        String time = smsg.msg.substring(0,index);
  118.        String move = smsg.msg.substring(index+1);
  119.        if (whitetomove)
  120.           whiteTime = time;
  121.        else
  122.           blackTime = time;
  123.        if (!gameover)
  124.          if (whitetomove) {
  125.            movenum++;
  126.            whitetomove = false;
  127.          }
  128.          else
  129.            whitetomove = true;
  130.        setInfo();
  131.  
  132.        if (move.startsWith("@")) {
  133.           index = move.indexOf(' ') ;
  134.           moves = moves + " " + move.substring(0,index);
  135.           move = move.substring(index+1);
  136.        }
  137.        if (move.endsWith("_")) {
  138.          whitesLastMove = move.substring(0,move.length() - 1);
  139.          moves = moves + " " + whitesLastMove ;
  140.        }
  141.        else {
  142.          index = whitesLastMove.length();
  143.          if (index > 0 && move.startsWith(whitesLastMove))
  144.              moves = moves + " " + move.substring(index);
  145.          else  {
  146.            System.out.println(move + " doesn't begin like");
  147.            System.out.println(whitesLastMove + " =whites last move");
  148.            moves = moves + " " + move ;
  149.          }
  150.        }
  151.        //ServerMessage smsg = new ServerMessage(0,"Moved",movedata);
  152.        SendThread s;
  153.        for (int i=0;i< Kibitzer.size();i++) {
  154.          s = (SendThread)Kibitzer.elementAt(i);
  155.          System.out.println("send move to kibitzer " + s.portnum );
  156.          if (s.portnum != smsg.port )
  157.            s.addMsg(smsg);
  158.        }
  159.   }
  160.  
  161.   public boolean GameSuspended()  {
  162.     suspendCount++;
  163.     setInfo();
  164.     if (Kibitzer.size()==0  && suspendCount > 1)
  165.       return true;
  166.     return false;
  167.   }
  168.  
  169.   public void GameResumed() {
  170.     suspendCount--;
  171.     setInfo();
  172.   }
  173.  
  174.   public synchronized void Chat(ServerMessage smsg) {
  175.     for (int i=0;i<Kibitzer.size();i++) {
  176.       SendThread s = (SendThread)Kibitzer.elementAt(i);
  177.       smsg.port = 0;
  178.       s.addMsg(smsg);
  179.       //synchronized (s) {
  180.       //  s.msgque.addElement(smsg);
  181.       //  s.notify();
  182.       //}
  183.     }
  184.   }
  185.  
  186.   public String getMoves() {
  187.     return "[White \""   + white + "\"] "   +
  188.            "[Black \""   + black + "\"] "   +
  189.            "[Blacktime " + blackTime + "] " +
  190.            "[Whitetime " + whiteTime + "] " +
  191.            "[Movetime "  + moveTime  + "] " +
  192.            moves ;
  193.   }
  194.  
  195.   public synchronized void AddObserver(SendThread user) {
  196.     ServerMessage smsg = new ServerMessage(user.portnum,"Chat",user.name.user + " joins");
  197.     Chat(smsg);
  198.     Kibitzer.addElement(user);
  199.     ServerMessage msg = new ServerMessage(user.portnum,"MoveList", getMoves());
  200.     user.addMsg(msg);
  201.     //synchronized (user) {
  202.     //  user.msgque.addElement(msg);
  203.     //  user.notify();
  204.     //}
  205.   }
  206.  
  207.   public synchronized  boolean RemoveObserver(SendThread user){
  208.     if (Kibitzer.size() > 0)
  209.       Kibitzer.removeElement(user);
  210.     if (Kibitzer.size()==0 && gameover)
  211.       return true; //okay to delete game
  212.     else {
  213.       ServerMessage msg = new ServerMessage(user.portnum,"Chat",user.name.user  + " parts");
  214.       Chat(msg);
  215.       return false;
  216.     }
  217.   }
  218. } //end of class Game
  219.