/* * TT-VIEW * Java applet that displays a live chess game */ /* * @(#)TicTacToe.java 0.1 03/11/13 */ import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.net.*; import java.applet.*; import java.sql.*; import java.util.*; /** * * @version 0.1, 13 nov 2003 * @author Jonas Forsslund (jofo02@kth.se) */ public class ttview extends Applet implements Runnable, MouseListener { /** Update thread **/ Thread updater; /** SQL config **/ String server="tmc3.hs.se"; String user="ttview"; String pass="ttview"; String dbase="elitserien"; /** The board **/ char[] board; int board_x=10; int board_y=20; int size=22; /** From database **/ String fen=""; String moves=""; String white="0"; String black="0"; moveList list; String gid="49"; int current=0; /** The pieces **/ Image piece_b; Image piece_w; Image piece_bB; Image piece_bK; Image piece_bN; Image piece_bP; Image piece_bQ; Image piece_bR; Image piece_bb; Image piece_bk; Image piece_bn; Image piece_bp; Image piece_bq; Image piece_br; Image piece_wB; Image piece_wK; Image piece_wN; Image piece_wP; Image piece_wQ; Image piece_wR; Image piece_wb; Image piece_wk; Image piece_wn; Image piece_wp; Image piece_wq; Image piece_wr; Image icons; char holdingPiece; String message=" "; public void start() { updater = new Thread(this); updater.start(); } public void run(){ while(Thread.currentThread()==updater){ // message= "Time: "+System.currentTimeMillis(); try{ Thread.sleep(10000); // if(conn==null) connect(); //connect(); update(); java.util.Date d=new java.util.Date(); message="Last update:"+d.toString(); repaint(); } catch (InterruptedException e) { break; } } } /** * Initialize the applet. Resize and load images. */ public void init() { piece_b = getImage(getCodeBase(), "small/b.png"); piece_w = getImage(getCodeBase(), "small/w.png"); piece_bB = getImage(getCodeBase(), "small/bB.png"); piece_bK = getImage(getCodeBase(), "small/bK.png"); piece_bN = getImage(getCodeBase(), "small/bN.png"); piece_bP = getImage(getCodeBase(), "small/bP.png"); piece_bQ = getImage(getCodeBase(), "small/bQ.png"); piece_bR = getImage(getCodeBase(), "small/bR.png"); piece_bb = getImage(getCodeBase(), "small/bb.png"); piece_bk = getImage(getCodeBase(), "small/bk.png"); piece_bn = getImage(getCodeBase(), "small/bn.png"); piece_bp = getImage(getCodeBase(), "small/bp.png"); piece_bq = getImage(getCodeBase(), "small/bq.png"); piece_br = getImage(getCodeBase(), "small/br.png"); piece_wB = getImage(getCodeBase(), "small/wB.png"); piece_wK = getImage(getCodeBase(), "small/wK.png"); piece_wN = getImage(getCodeBase(), "small/wN.png"); piece_wP = getImage(getCodeBase(), "small/wP.png"); piece_wQ = getImage(getCodeBase(), "small/wQ.png"); piece_wR = getImage(getCodeBase(), "small/wR.png"); piece_wb = getImage(getCodeBase(), "small/wb.png"); piece_wk = getImage(getCodeBase(), "small/wk.png"); piece_wn = getImage(getCodeBase(), "small/wn.png"); piece_wp = getImage(getCodeBase(), "small/wp.png"); piece_wq = getImage(getCodeBase(), "small/wq.png"); piece_wr = getImage(getCodeBase(), "small/wr.png"); icons = getImage(getCodeBase(), "icons.png"); addMouseListener(this); board=new char[64]; board=fen2board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR"); holdingPiece='.'; connect(); list=new moveList(); update(); current=list.getHalfmoves(); update(); } void update(){ list.clear(); execute(); white=getPlayer(white); black=getPlayer(black); if(moves.length()>0) list.set(moves); else list.set(""); list.add("Current",board); repaint(); } char[] fen2board(String aFen){ char[] board = new char[64]; int square=0; int chr=0; while(square<64){ char c = aFen.charAt(chr); if(c=='r'||c=='R'||c=='n'||c=='N'||c=='b'||c=='B'||c=='q'||c=='Q'||c=='k'||c=='K'||c=='p'||c=='P'){ board[square]=c; square++; } if(c>='1' && c<='8'){ for(int i=0;i=0) board[square]='.'; } void put(char piece, int coords){ if(coords>=0) board[coords]=piece; } char getPiece(int square){ if(square>=0 && square<64){ return board[square]; } else return 'x'; } /** * Paint it. */ public void paint(Graphics g) { update(g); } public void update(Graphics g) { Graphics buffer; Dimension d=getSize(); Image offImage=createImage(d.width,d.height); buffer=offImage.getGraphics(); // buffer.setColor(getBackground()); buffer.setColor(Color.white); buffer.fillRect(0,0,d.width,d.height); buffer.setColor(Color.black); buffer.drawImage(icons, 35,225, this); buffer.drawString(message,10,255); buffer.drawString(black,10,15); buffer.drawString(white,10,210); int y=17; int x=200; int nstart=1; if(current>10){ if(current%2!=0) nstart=current-10; else nstart=current-11; } int nend=nstart+29; if(nend>list.getHalfmoves())nend=list.getHalfmoves(); for(int n=nstart;n<=nend;n++){ String s=""; if(n%2!=0){ y+=15; x=200; if(n<19) s+=" "; s+=""+(n+1)/2+". "; } else x=300; if(n==current){ buffer.setColor(Color.blue); buffer.fill3DRect(x,y-12,70,15,true); buffer.setColor(Color.white); buffer.drawString(s + list.getMove(n),x,y); } else{ buffer.setColor(Color.black); buffer.drawString(s + list.getMove(n),x,y); } } board=list.getBoard(current); for(y=0;y<8;y++){ for(x=0;x<8;x++){ switch(board[y*8+x]){ case 'p': drawPiece(buffer,piece_wp,piece_bp,x*size+board_x,y*size+board_y,x+y); break; case 'b': drawPiece(buffer,piece_wb,piece_bb,x*size+board_x,y*size+board_y,x+y); break; case 'n': drawPiece(buffer,piece_wn,piece_bn,x*size+board_x,y*size+board_y,x+y); break; case 'r': drawPiece(buffer,piece_wr,piece_br,x*size+board_x,y*size+board_y,x+y); break; case 'q': drawPiece(buffer,piece_wq,piece_bq,x*size+board_x,y*size+board_y,x+y); break; case 'k': drawPiece(buffer,piece_wk,piece_bk,x*size+board_x,y*size+board_y,x+y); break; case 'P': drawPiece(buffer,piece_wP,piece_bP,x*size+board_x,y*size+board_y,x+y); break; case 'B': drawPiece(buffer,piece_wB,piece_bB,x*size+board_x,y*size+board_y,x+y); break; case 'N': drawPiece(buffer,piece_wN,piece_bN,x*size+board_x,y*size+board_y,x+y); break; case 'R': drawPiece(buffer,piece_wR,piece_bR,x*size+board_x,y*size+board_y,x+y); break; case 'Q': drawPiece(buffer,piece_wQ,piece_bQ,x*size+board_x,y*size+board_y,x+y); break; case 'K': drawPiece(buffer,piece_wK,piece_bK,x*size+board_x,y*size+board_y,x+y); break; default: drawPiece(buffer,piece_w,piece_b,x*size+board_x,y*size+board_y,x+y); break; } } } g.drawImage(offImage,0,0,this); } void drawPiece(Graphics g, Image piece_w, Image piece_b, int x, int y,int s){ if(s%2==0) g.drawImage(piece_w, x, y, this); else g.drawImage(piece_b, x, y, this); } /** * The user has clicked in the applet. */ public void mouseReleased(MouseEvent e) { int icons_x=35; int icons_y=225; if(e.getX()>icons_x+70 && e.getX()icons_y+1 && e.getY()icons_x+29 && e.getX()icons_y+1 && e.getY()1) current--; board=list.getBoard(current); } if(e.getX()>icons_x+7 && e.getX()icons_y+1 && e.getY()icons_x+93 && e.getX()icons_y+1 && e.getY()=0 && y<8 && x>=0 && x<8) put(holdingPiece,y*8+x); holdingPiece='.'; } // Figure out the row/column //Dimension d = getSize(); //int c = (x * 3) / d.width; //int r = (y * 3) / d.height; // if(x==2) // play(getCodeBase(), "audio/beep.au"); repaint(); } public void mousePressed(MouseEvent e) { } public void mouseClicked(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { } public String getAppletInfo() { return "TT-Display 0.1"; } Connection conn = null; Statement stmt = null; String connect(){ message="Trying to connect..."; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://"+server+"/"+dbase+"?user="+user+"&password="+pass); message="Connected to database"; return ""; } catch (SQLException e) { return e.getSQLState(); } catch (Exception e) { return "0"; } } boolean disconnect() { if (conn != null) { try { conn.close(); return true; } catch (SQLException SQLE) { return false; } } else return false; } String execute() { try { stmt = null; stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT white, black, moves, fen from games where id="+gid); while (rs.next()) { fen = rs.getString("fen"); white = rs.getString("white"); black = rs.getString("black"); moves = rs.getString("moves"); board=fen2board(fen); } return ""; } catch (SQLException e) { return e.getSQLState(); } catch (Exception e) { return "0"; } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException SQLE) { ; } } } } String getPlayer(String id) { String r=""; try { stmt = null; stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT titel, firstname, lastname from players where id="+id); while (rs.next()) { String t=rs.getString("titel"); if(t.length()>0) r+=t + " "; r+=rs.getString("firstname")+" "+rs.getString("lastname"); } return r; } catch (SQLException e) { return e.getSQLState(); } catch (Exception e) { return "0"; } finally { if (stmt != null) { try { stmt.close(); } catch (SQLException SQLE) { ; } } } } }