// 3/13/2013 Greenstein: changed applet to JFrame


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Match implements MouseListener   
{

	private int ro, co, roremember, coremember;
	private char [][] board;
	private boolean [][] show;
	private boolean initialscreen, endofpair;
	private JFrame frame;	
	private APanel canvas;

	public Match ( )   
	{
		roremember = coremember = ro = co = 0;
		initialscreen = endofpair = true;
		board = new char [4][4];
		for ( int i = 0; i < board.length; i++ )
			for ( int j = 0; j < board[i].length; j++ )
				board[i][j] = 'S';
		ShowBoard ( );
		Reset ( );
	}
	
	public static void main(String[] args) 
	{
		Match m = new Match();
		m.Run();
	}

	public void Run ( )   
	{
		// Create a frame to hold everything
		frame = new JFrame ("Match");
		frame.setSize(400, 425);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//frame.setBackground(Color.black);	// only needed if frame is larger than panel
		
		// Define panel to draw on
		canvas = new APanel();		// create a panel to draw on
      	canvas.setBackground(Color.lightGray);
		canvas.addMouseListener(this);	// connects the MouseListerner to the panel window
		
		// Put frame together
		frame.getContentPane().add(canvas);	// puts panel on frame
		frame.setVisible(true);
	}

	public void ShowBoard ( )   
	{
		show = new boolean [4][4];
		for ( int i = 0; i < show.length; i++ )
			for ( int j = 0; j < show[i].length; j++ )
				show[i][j] = false;
	}

	public void Reset ( )   
	{
		for ( int i = 0; i < 16; i++ )  
		{
			int row = (int)(Math.random() * 4);
			int col = (int)(Math.random() * 4);
			if ( board[row][col] == 'S' )
				board[row][col] = (char)(65 + i / 2);
			else
				i--;
		}

	}

   	class APanel extends JPanel 
		{
        	public void paintComponent(Graphics g) 
			{
      			super.paintComponent(g);
			
				DrawGrid ( g );

		   		Font MyFont = new Font ( "Arial", Font.PLAIN, 50 );
		   		g.setFont ( MyFont );
				g.setColor ( Color.blue );
				for ( int i = 0; i < board.length; i++ )
					for ( int j = 0; j < board[i].length; j++ )
						if ( show[j][i] == true )
							g.drawString ( "" + board[j][i], 100 * i + 30, 100 * j + 70 );
				if ( endofpair == true && board[ro][co] != board[roremember][coremember] )   
				{
					show[ro][co] = show[roremember][coremember] = false;
				}
				if ( Done() == true )
					g.drawString ( "YOU DID IT!", 40, 470 );
      		}
   	} 

	public void DrawGrid ( Graphics g )   
	{
		g.setColor ( Color.white );
		for ( int i = 0; i <= 4; i++ )   
		{
			g.fillRect ( i * 100 - 3, 0, 6, 400 );
			g.fillRect ( 0, i * 100 - 3, 400, 6 );
		}
	}

	public boolean Done ( )   
	{
		int count = 0;
		for ( int i = 0; i < show.length; i++ )
			for ( int j = 0; j < show[i].length; j++ )
				if ( show[i][j] == true )
					count++;
		if ( count == 16 )
			return true;
		return false;
	}

   	public void mouseClicked ( MouseEvent e )   {}

   	public void mousePressed ( MouseEvent e )    	
		{
			initialscreen = false;
			int xpos = e.getX();
			int ypos = e.getY();
			if ( xpos >= 0  && xpos <= 399 && ypos >= 0 && ypos <= 399 && show[ypos/100][xpos/100] == false )   
			{
				roremember = ro;
				coremember = co;
				ro = ypos / 100;
				co = xpos / 100;
				show[ro][co] = true;
				endofpair = !endofpair;
				canvas.repaint ( );
			}
		}
	
   	public void mouseReleased ( MouseEvent e )   {}

   	public void mouseEntered ( MouseEvent e )   {}

   	public void mouseExited ( MouseEvent e )     {}
}

Back to Lesson 25 Examples

Back to Java Main Page