흐흐흐. {{{~cpp import java.awt.Graphics; import javax.swing.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; public class Serious extends JFrame { final int markX = 1, markO = 2; int x, y; boolean turn = true; boolean win = false; int block[][] = new int[][] { {0, 0, 0}, {0, 0, 0}, {0, 0, 0} }; int blockDecider(int x, int y) { int retTable[][] = new int[][] { {0, 1, 2}, {3, 4, 5}, {6, 7, 8} }; int xline, yline; y -= 30; for (xline = 0; x > 0; xline++) x -= 100; for (yline = 0; y > 0; yline++) y -= 100; return retTable[--yline][--xline]; } int getX(int blockNum) { int ret; if (blockNum < 3) ret = 0; else if (blockNum < 6) ret = 1; else ret = 2; return ret; } int getY(int blockNum) { int ret; if (blockNum == 0 || blockNum == 3 || blockNum == 6) ret = 0; else if (blockNum == 1 || blockNum == 4 || blockNum == 7) ret = 1; else ret = 2; return ret; } void markX(int blockNum) { int x, y; x = getX(blockNum); y = getY(blockNum); block[x][y] = markX; } void markO(int blockNum) { int x, y; x = getX(blockNum); y = getY(blockNum); block[x][y] = markO; } boolean checkBlockIsVoid(int blockNum) { int x, y; x = getX(blockNum); y = getY(blockNum); if (block[x][y] == 0) return true; return false; } boolean checkWinner() { for (int i = 0; i < 3; i++) if ((block[i][0] == markO && block[i][1] == markO && block[i][2] == markO) || (block[i][0] == markX && block[i][1] == markX && block[i][2] == markX) || (block[0][i] == markO && block[1][i] == markO && block[2][i] == markO) || (block[0][i] == markX && block[1][i] == markX && block[2][i] == markX)) return true; if ((block[0][0] == markO && block[1][1] == markO && block[2][2] == markO) || (block[0][0] == markX && block[1][1] == markX && block[2][2] == markX) || (block[0][2] == markO && block[1][1] == markO && block[2][0] == markO) || (block[0][2] == markX && block[1][1] == markX && block[2][0] == markX)) return true; return false; } public Serious() { addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (win) return; x = e.getX(); y = e.getY(); int blockNum = blockDecider(x, y); if ( checkBlockIsVoid(blockNum) != true ) return; if (turn == true) { markX(blockNum); turn = false; } else { markO(blockNum); turn = true; } if ( checkWinner() ) { if (turn) System.out.println("winner = O"); else System.out.println("winner = X"); win = true; } repaint(); } }); } public static void main(String args[]) { Serious window = new Serious(); window.setBounds(100, 100, 300, 330); window.show(); } void drawX(int x, int y, Graphics g) { g.drawLine(y * 100, (x * 100) + 30, (y * 100) + 100, (x * 100) + 130); g.drawLine((y * 100) + 100, (x * 100) + 30, y * 100, (x * 100) + 130); } void drawO(int x, int y, Graphics g) { g.drawOval(y * 100, (x * 100) + 30, 100, 100); } public void paint(Graphics g) { g.drawLine(100, 30, 100, 330); g.drawLine(200, 30, 200, 330); g.drawLine(0, 130, 300, 130); g.drawLine(0, 230, 300, 230); for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) { if (block[i][j] == markX) drawX(i, j, g); if (block[i][j] == markO) drawO(i, j, g); } } } }}}