import java.applet.*; import java.awt.*; public class BridgeCanvas extends Canvas { Dimension offDimension; Image offImage; Graphics offGraphics; int rowSize, colSize; int topLeftOff; int boardSize; Point pt; Dimension minSize; public Dimension getSize() { return getPreferredSize(); } public Dimension getPreferredSize() { return getMinimumSize(); } public synchronized Dimension getMinimumSize() { return minSize; } public BridgeCanvas() { offGraphics = null; rowSize = (Bridges.MAXSCREENY - 10) / Bridges.MAXROWS; colSize = (Bridges.MAXSCREENY - 10) / Bridges.MAXCOLS; topLeftOff = 10; boardSize = rowSize * Bridges.MAXROWS; minSize = new Dimension(Bridges.MAXSCREENX, Bridges.MAXSCREENY); } public boolean mouseDown(Event evt, int x, int y) { int r, c; if (pt == null) pt = new Point(x, y); else { pt.x = x; pt.y = y; } r = (pt.y - topLeftOff) / rowSize; c = (pt.x - topLeftOff) / colSize; if ((r >= 0) && (r < Bridges.MAXROWS)) { if ((c >= 0) && (c < Bridges.MAXCOLS)) { if ((!Bridges.blueWins) && (!Bridges.redWins)) { if (Bridges.toggleBox(r, c)) { repaint(); if (!Bridges.redWins) { Bridges.findBestMove(); // if (!Bridges.blueWins) // { Bridges.statusMsg.setText("Row: " + r + "Col: " + c); } } } } } // } return true; } public void paint(Graphics g) { update(g); } public void update(Graphics g) { int r, c; Dimension d = getSize(); if ( (offGraphics == null) || (d.width != offDimension.width) || (d.height != offDimension.height) ) { offDimension = d; offImage = createImage(d.width, d.height); offGraphics = offImage.getGraphics(); } // offGraphics.setColor(getBackground()); offGraphics.setColor(Color.white); offGraphics.fillRect(0,0,d.width-1,d.height-1); offGraphics.setColor(Color.black); offGraphics.drawRect(topLeftOff-2, topLeftOff-2, boardSize+4,boardSize+4); if (Bridges.board != null) { for (r = 0; r < Bridges.MAXROWS; r++) { for (c = 0; c < Bridges.MAXCOLS; c++) { if (Bridges.board[r][c] == Bridges.BLUETOWER) { offGraphics.setColor(Color.blue); offGraphics.fillRect(topLeftOff +c*colSize,topLeftOff +r*rowSize,colSize,rowSize); } else { if (Bridges.board[r][c] == Bridges.REDTOWER) { offGraphics.setColor(Color.red); offGraphics.fillRect(topLeftOff + c*colSize,topLeftOff + r*rowSize,colSize,rowSize); } } } } g.drawImage(offImage, 0, 0, this); } } }