home *** CD-ROM | disk | FTP | other *** search
Java Source | 1997-07-03 | 5.7 KB | 219 lines |
- package borland.samples.apps.chess.server;
-
- import java.util.* ;
- import borland.samples.apps.chess.client.ServerMessage;
-
- public class Game
- {
- String white;
- String moves ;
- String whitesLastMove;
- String black;
- String info = ":";
- String whiteTime;
- String blackTime;
- String moveTime;
- String whiteId = null;
- String blackId = null;
- String filename = null;
- private int suspendCount = 0;
- int offerFlag = 0;
- int movenum;
- boolean whitetomove;
- Vector Kibitzer;
- private String result;
- private boolean gameover;
-
- public Game (String white, String black) {
- this(white,black,"");
- }
-
- public Game (String white, String black, String info) {
- this.white = white;
- this.black = black;
- this.info = info;
- movenum = 0;
- whitetomove = true;
- Kibitzer = new Vector();
- result = "";
- gameover = false;
- whitesLastMove = " ";
- moves = " ";
- whiteTime = "0";
- blackTime = "0";
- }
-
- static final int DrawOffer = 2;
- static final int AbortOffer = 3;
-
- public void setOffer(String offerer,int Offer) {
- offerFlag = Offer;
- if (offerer.equals(white))
- offerFlag = Offer * 2;
- }
- public boolean isOver() {
- return gameover;
- }
- public String getOffer(String offeree) {
- if (offerFlag == 0)
- return null;
- int value = offerFlag ;
- if (offeree.equals(black))
- value = offerFlag / 2;
- System.out.println("Offer was " + value);
- if (value == Game.DrawOffer )
- return "OfferDraw";
- else
- if (value == Game.AbortOffer )
- return "OfferAbort";
- return null;
- }
- public String getWhite() {
- return white;
- }
- public String getBlack() {
- return black;
- }
- public String getWhiteId() {
- return whiteId;
- }
- public String getBlackId() {
- return blackId;
- }
-
- public String getPlayers() {
- return white + " - " + black ;
- }
-
- public String toString() {
- return white + " - " + black + info;
- }
-
- public void GameOver(String result) {
- this.result = result;
- gameover = true;
- moves = " [Result \"" + result + "\"]" + moves;
- Chat(new ServerMessage(0,"Chat","Game Over " + result));
- info = " " + result + " " + movenum + " Moves" ;
- }
-
- public void setInfo() {
- if (gameover)
- return;
- String suspend = "";
- if (suspendCount > 0)
- suspend = " (Suspended)";
- String tomove = " Black to move";
- int move = movenum;
- if (whitetomove) {
- move++;
- tomove = " White to move";
- }
- info = ": Move " + move + tomove + suspend;
- }
-
- public synchronized void AddMove(ServerMessage smsg) {
- int index = smsg.msg.indexOf(' ');
- String time = smsg.msg.substring(0,index);
- String move = smsg.msg.substring(index+1);
- if (whitetomove)
- whiteTime = time;
- else
- blackTime = time;
- if (!gameover)
- if (whitetomove) {
- movenum++;
- whitetomove = false;
- }
- else
- whitetomove = true;
- setInfo();
-
- if (move.startsWith("@")) {
- index = move.indexOf(' ') ;
- moves = moves + " " + move.substring(0,index);
- move = move.substring(index+1);
- }
- if (move.endsWith("_")) {
- whitesLastMove = move.substring(0,move.length() - 1);
- moves = moves + " " + whitesLastMove ;
- }
- else {
- index = whitesLastMove.length();
- if (index > 0 && move.startsWith(whitesLastMove))
- moves = moves + " " + move.substring(index);
- else {
- System.out.println(move + " doesn't begin like");
- System.out.println(whitesLastMove + " =whites last move");
- moves = moves + " " + move ;
- }
- }
- //ServerMessage smsg = new ServerMessage(0,"Moved",movedata);
- SendThread s;
- for (int i=0;i< Kibitzer.size();i++) {
- s = (SendThread)Kibitzer.elementAt(i);
- System.out.println("send move to kibitzer " + s.portnum );
- if (s.portnum != smsg.port )
- s.addMsg(smsg);
- }
- }
-
- public boolean GameSuspended() {
- suspendCount++;
- setInfo();
- if (Kibitzer.size()==0 && suspendCount > 1)
- return true;
- return false;
- }
-
- public void GameResumed() {
- suspendCount--;
- setInfo();
- }
-
- public synchronized void Chat(ServerMessage smsg) {
- for (int i=0;i<Kibitzer.size();i++) {
- SendThread s = (SendThread)Kibitzer.elementAt(i);
- smsg.port = 0;
- s.addMsg(smsg);
- //synchronized (s) {
- // s.msgque.addElement(smsg);
- // s.notify();
- //}
- }
- }
-
- public String getMoves() {
- return "[White \"" + white + "\"] " +
- "[Black \"" + black + "\"] " +
- "[Blacktime " + blackTime + "] " +
- "[Whitetime " + whiteTime + "] " +
- "[Movetime " + moveTime + "] " +
- moves ;
- }
-
- public synchronized void AddObserver(SendThread user) {
- ServerMessage smsg = new ServerMessage(user.portnum,"Chat",user.name.user + " joins");
- Chat(smsg);
- Kibitzer.addElement(user);
- ServerMessage msg = new ServerMessage(user.portnum,"MoveList", getMoves());
- user.addMsg(msg);
- //synchronized (user) {
- // user.msgque.addElement(msg);
- // user.notify();
- //}
- }
-
- public synchronized boolean RemoveObserver(SendThread user){
- if (Kibitzer.size() > 0)
- Kibitzer.removeElement(user);
- if (Kibitzer.size()==0 && gameover)
- return true; //okay to delete game
- else {
- ServerMessage msg = new ServerMessage(user.portnum,"Chat",user.name.user + " parts");
- Chat(msg);
- return false;
- }
- }
- } //end of class Game
-