Version One:
1. Draws grid
2. Locates shapes on grid
3. First shape picked randomly
4. Alternates moves
5. Does not allow move into occuppied square
6. No loss of move from errant click
Complete Source Code:
//Version One: //1. Draws grid //2. Locates shapes on grid //3. First shape picked randomly //4. Alternates moves //5. Does not allow move into occuppied square //6. No loss of move from errant click import java.awt.*; import java.applet.*; import java.awt.event.*; import java.util.*; public class t1 extends Applet { public static final int EMPTY=0; public static final int COMPUTER=1; public static final int HUMAN=2; Dimension d; int [][] position; int turn; public void init() { setBackground(Color.black); d=getSize(); Random r=new Random(); turn=(r.nextInt()%2 == 1) ? HUMAN : COMPUTER; position=new int[3][3]; for(int i=0; i<3; i++) for(int j=0; j<3; j++) { position[i][j]=EMPTY; } addMouseListener(new ML()); } class ML extends MouseAdapter { public void mouseReleased(MouseEvent e) { plotMove(e); } } public void plotMove(MouseEvent e) { int x=e.getX(); int y=e.getY(); if(x>(2*d.width/3)) x=2; else if(x>d.width/3) x=1; else x=0; if(y>(2*d.height/3)) y=2; else if(y>d.height/3) y=1; else y=0; if(position[y][x]==EMPTY) { position[y][x]=turn; turn=(turn==HUMAN) ? COMPUTER : HUMAN; } repaint(); } public void drawBoard(Graphics g) { g.setColor(Color.yellow); int x = d.width/3; int y = d.height/3; g.drawLine(x, 0, x, d.height); g.drawLine(2*x, 0, 2*x, d.height); g.drawLine(0, y, d.width, y); g.drawLine(0, 2*y, d.width, 2*y); for(int i=0; i<3; i++) for(int j=0; j<3; j++) { if(position[i][j]==COMPUTER) { g.setColor(Color.red); g.drawOval(j*x+1, i*y+1, x-2, y-2); } else if(position[i][j]==HUMAN) { g.setColor(Color.cyan); g.drawLine(j*x+1, i*y+1, j*x+x-2, i*y+y-2); g.drawLine(j*x+1, i*y+y-2, j*x+x-2, i*y+1); } } } public void paint(Graphics g) { drawBoard(g); } }