import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.util.*; public class Chess extends Applet implements ActionListener, AdjustmentListener { public ChessBoard theBoard; //public Dimension boardSize; public Random rand; //public Panel boardPanel; public Panel controlPanel = new Panel (); public Label statusLabel = new Label ("Applet is loading, please wait..."); public boolean debugging = false; public ChessSet chessSet; public ChessThread runThread = null; private ThreadGroup appTG; public void init () { rand = new Random (); appTG = Thread.currentThread ().getThreadGroup (); setLayout (new BorderLayout(2, 2)); setupControlPanel (); add ("South", controlPanel); //boardPanel = new Panel (); //add("Center", boardPanel); theBoard = new ChessBoard (); add ("Center", theBoard); } public void setupControlPanel () { controlPanel.setLayout(new BorderLayout ()); //center panel contains status label and speed scrollbars Panel midPanel = new Panel (); controlPanel.add ("Center", midPanel); midPanel.setLayout(new BorderLayout (2, 2)); statusLabel.setAlignment (Label.CENTER); /* Font f = getFont ().deriveFont (Font.BOLD); statusLabel.setFont (f); */ midPanel.add ("North", statusLabel); Panel barsPanel = new Panel (); midPanel.add ("Center", barsPanel); Panel behaviorPanel = new Panel (); controlPanel.add ("West", behaviorPanel); Panel movementPanel = new Panel (); behaviorPanel.add ("West", movementPanel); movementPanel.setLayout (new BorderLayout ()); movementPanel.add ("West", new Label ("Movement type:")); Panel checkboxPanel = new Panel (); movementPanel.add ("Center", checkboxPanel); checkboxPanel.setLayout(new GridLayout(3, 1)); CheckboxGroup cbg = new CheckboxGroup (); } private void setupPieces () { String filename; Image [] pics = new Image [12]; for (int i = 0; i < 12; i ++) { if (i / 6 == 0) { filename = "w_"; } else { filename = "b_"; } switch (i % 6) { case ChessPiece.ROOK: filename += "rook"; break; case ChessPiece.KNIGHT: filename += "knight"; break; case ChessPiece.BISHOP: filename += "bishop"; break; case ChessPiece.QUEEN: filename += "queen"; break; case ChessPiece.KING: filename += "king"; break; case ChessPiece.PAWN: filename += "pawn"; break; } filename += ".gif"; pics [i] = getImage (getCodeBase (), filename); } chessSet = new ChessSet (pics, theBoard); theBoard.setPieces (chessSet); theBoard.newGame (); } public boolean startedOnce = false; public void start () { //boardSize = boardPanel.getSize (); repaint (); if (!startedOnce) { startedOnce = true; setupPieces (); } statusMsg ("Running..."); /* if (runThread == null) { System.out.println ("chess"); runThread = new ChessThread (appTG, theBoard); System.out.println ("went"); } runThread.start (); */ System.out.println ("bye bye"); } public void stop () { } public void paint (Graphics g) { //g.setColor (Color.black); //g.fillRect (0, 0, boardSize.width, boardSize.height); //if (theBoard != null) // theBoard.draw (g); } public void statusMsg (String msg) { if (!debugging) { statusLabel.setText ("Status: " + msg); } } public void debugMsg (String msg) { debugging = true; statusLabel.setText ("Debug: " + msg); } public void action () { } ////////////////////////////////////////// // ActionListener actions ////////////////////////////////////////// public void actionPerformed (ActionEvent e) { } ////////////////////////////////////////// // AdjustmentListener actions ////////////////////////////////////////// public void adjustmentValueChanged(AdjustmentEvent e) { } }; class ChessThread extends Thread { private ChessBoard board; private boolean running; ChessThread (ThreadGroup tg, ChessBoard cb) { super(tg, "Chess thread"); this.board = cb; start(); } public void run () { running = true; while (running) { board.repaint (); try { wait (); } catch (InterruptedException e) {} } } public void kill () { running = false; } }