U E D R , A S I H C RSS

Tic Tac Toe/zennith

흐흐흐.

~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);			
			}
	}
}
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.2031 sec