코딩수업/AWS 클라우드환경 네이티브

8/18 자바(Java) GUI 활용 - 마우스 리스너/모션 리스너와 빙고 만들기

인생즐겜러 2022. 8. 18. 21:52
728x90
반응형

AWS 클라우드환경 네이티브 수업 64일차

 

 

 

진행

1. Java GUI 활용 

 

 

 

 

 

요약

1. Java GUI 활용

(방향키를 이용하여 움직이기2, 마우스 리스너와 마우스 모션 리스너, 빙고 만들기 )

 

 

 

 

 


 

 

 

 

 

21. 방향키를 이용하여 라벨 움직이기2

 

이번엔 동서남북 방향으로 움직일 때, 라벨이 Pane의 끝 부근에서

움직이는 거리보다 적게 남았을 때, 움직임이 명확하게 Pane 테두리에 맞춰서 들어갈 수 있게 설정해보자.

 

 

 

package Swing.frame;

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

public class Frame2 extends JFrame{
	JPanel contentPane = new JPanel();
	JLabel la = new JLabel("Hello");
	
	// 방향키 한번 누를 때 움직이는 거리 
	final int RUNNING_UNIT = 20;
	
	Frame2() {
		setTitle("방향키를 이용하여 글자 움직이기");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(contentPane);
		
		// 임의로 움직여야하기 때문에 레이아웃 해제
		contentPane.setLayout(null);	
		contentPane.addKeyListener(new MyKeyListener());
		
		// 라벨의 시작점 및 사이즈
		la.setLocation(0, 530);
		la.setSize(50, 30);
		
		// 라벨의 배경색 설정
		la.setOpaque(true);
		la.setBackground(Color.GREEN);
		contentPane.add(la);
		
		setSize(800, 600);
		setVisible(true);
		contentPane.requestFocus();
	}
	
	class MyKeyListener extends KeyAdapter {
    	
        // 움직일 때 마다 해당 라벨의 좌표를 표시하는 메소드
		public void XYView() {
			System.out.println(la.getX() + ":" + la.getY());
		}
		
        // 움직임 메소드
		public void keyPressed(KeyEvent e) {
			int keyCode = e.getKeyCode();
			
			// 라벨의 0,0 좌표가 왼쪽위이기 때문에
			// down과 right의 움직임을 계산할 때 용이하게 하기 위해 설정
			int runheight = contentPane.getHeight() - la.getHeight();
			int runwidth = contentPane.getWidth() - la.getWidth();
			
			switch(keyCode) {
				case KeyEvent.VK_UP:
					if(la.getY() > 0) {
						if(la.getY() >= RUNNING_UNIT) {
							la.setLocation(la.getX(), la.getY() - RUNNING_UNIT);
						}else {
							la.setLocation(la.getX(), 0);
						}
					}
					XYView();
					break;
				case KeyEvent.VK_DOWN:
					if(la.getY() < runheight) {
						if(runheight - la.getY() < RUNNING_UNIT) {
							la.setLocation(la.getX(), la.getY() + (runheight - la.getY()) );
						}else {
							la.setLocation(la.getX(), la.getY() + RUNNING_UNIT);
						}
					}
					XYView();
					break;
				case KeyEvent.VK_LEFT:
					if(la.getX() > 0) {
						if(la.getX() >= RUNNING_UNIT) {
							la.setLocation(la.getX() - RUNNING_UNIT , la.getY());
						}else {
							la.setLocation( 0 , la.getY());
						}
					}
					XYView();
					break;
				case KeyEvent.VK_RIGHT:
					if(la.getX() < runwidth) {
						if(runwidth - la.getX() < RUNNING_UNIT) {
							la.setLocation(la.getX() + (runwidth - la.getX()) , la.getY() );
						}else {
							la.setLocation(la.getX() + RUNNING_UNIT , la.getY());
						}
					}
					XYView();
					break;
			}
		}
	}

	public static void main(String[] args) {
		new Frame2();
	}
}



움직일 때 마다 결과
20:530
40:530
60:530
60:510
80:510
80:490
100:490
100:470
120:470
120:450
140:450
140:430
160:430

 

결과는 8/17 방향키를 이용하여 라벨 움직이기 랑 같다

 

 

 

 

 


 

 

 

 

 

22. 마우스 리스너와 마우스 모션 리스너

 

 

Mouse 이벤트 - MouseListener 인터페이스

void mousePressed(MouseEvent) - 마우스 버튼이 눌러질 때.

void mouseReleased(MouseEvent) - 마우스 버튼이 떼어질 때.

void mouseClicked(MouseEvent) - 마우스 버튼이 클릭될 때.

void mouseEntered(MouseEvent) - 마우스가 컴포넌트에 올라갈 때.

void mouseExited(MouseEvent) - 컴포넌트에 올라온 마우스가 컴포넌트를 벗어날 때

 

 

 

Mouse 이벤트 - MouseMotionListener 인터페이스

void mouseDragged(MouseEvent) - 마우스를 컴포넌트 위에서 드래그할 때.

void mouseMoved(MouseEvent) - 마우스가 컴포넌트 위에서 움직일 때

 

 

 

 

 

package Swing.frame;

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

public class Frame2 extends JFrame{
	JPanel contentPane = new JPanel();
	JLabel la ;
		
	Frame2() {
		setTitle("마우스 리스너와 마우스 모션리스너 사용하기");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(contentPane);
		
		// 마우스 리스너 설정
		contentPane.addMouseListener(new MyMotionListener());
		contentPane.addMouseMotionListener(new MyMotionListener());
		
		la = new JLabel("No Motion Event");
		contentPane.add(la);	
		
		setSize(800, 600);
		setVisible(true);
	}
	
	// 마우스 모션 리스너 클래스 생성
	class MyMotionListener implements MouseListener, MouseMotionListener {
		
		// 마우스 누를 때 좌표 받기
		public void mousePressed(MouseEvent e) {
			la.setText("MousePressed (" + e.getX() + "," + e.getY() + ")");			
		}

		// 마우스 누를 걸 풀 때 좌표 받기
		public void mouseReleased(MouseEvent e) {
			la.setText("MouseReleased (" + e.getX() + "," + e.getY() + ")");			
		}
		public void mouseClicked(MouseEvent e) {}
		
		// 마우스가 팬에 들어갈 때 색 설정
		public void mouseEntered(MouseEvent e) {
			JPanel p = (JPanel)e.getSource();
			p.setBackground(Color.WHITE);
		}
		
		// 마우스가 팬에서 나갈 때 색 설정
		public void mouseExited(MouseEvent e) {
			JPanel p = (JPanel)e.getSource();
			p.setBackground(Color.YELLOW);
		}
		
		// 마우스 드래그(누르고 움직임) 시 좌표
		public void mouseDragged(MouseEvent e) {
			la.setText("MouseDragged (" + e.getX() + "," + e.getY() + ")");			
		}
		
		// 마우스 움직일 시 좌표
		public void mouseMoved(MouseEvent e) {
			la.setText("MouseMoved (" + e.getX() + "," + e.getY() + ")");			
		}
		
	}


	public static void main(String[] args) {
		new Frame2();
	}
}

 

012

 

 

 

 

 


 

 

 

 

 

23. 마우스 리스너와 마우스 모션 리스너2 (클릭)

 

 

 

클릭 수에 따라 배경색(RGB)이 바뀌게 만들어 보자 .

창 제목에는 해당 색의 RGB값을 보이게 한다.

 

package Swing.frame;

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

public class Frame2 extends JFrame{
	JPanel contentPane = new JPanel();
		
	Frame2() {
		setTitle("클릭과 더블클릭");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setContentPane(contentPane);
		
		// 마우스 리스너 설정
		contentPane.addMouseListener(new MyMotionListener());
		
		setSize(800, 600);
		setVisible(true);
	}
	
	// 마우스 모션 리스너 클래스 생성
	class MyMotionListener extends MouseAdapter {

		public void mouseClicked(MouseEvent e) {

			// 더블 클릭일 때 랜덤으로 색상을 받아올 것임
			if(e.getClickCount() == 2) {
				int r = (int)(Math.random()*256); 
				int g = (int)(Math.random()*256); 
				int b = (int)(Math.random()*256); 
				JPanel p = (JPanel)e.getSource();
				p.setBackground(new Color(r, g, b));
				
				// 제목에 각 rgb 값을 띄운다.
				setTitle(r + ", " + g + ", " + b);
			}
			
		}

	}


	public static void main(String[] args) {
		new Frame2();
	}
}

 

012

 

 

 

 

 


 

 

 

 

 

24. 빙고 만들기

 

빙고가 2개가 되면 이기는 빙고 게임을 만들어보자.

빙고 시 초록색으로 변하게도 만들자.

 

 

package Swing.frame;

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

//-----------------------------------------------------------------------
// public class Bingo extends JFrame 
//-----------------------------------------------------------------------
public class Frame2 extends JFrame {
	final	int	SIZE	= 5;	// 빙고판의 크기
	JButton[]	btnArr	= null;	// 25개의 버튼을 가리키기 위한 참조변수
	String[]	animal	= {		// 25개의 버튼 위에 쓰여질 글자들
			"고양이", "강아지", "거북이", "토끼",   "사자",
			"호랑이", "기린",   "코끼리", "하마",   "코뿔소",
			"부엉이", "돼지",   "소",     "펭귄",   "독수리",
			"타조",   "캥거루", "원숭이", "코알라", "다람쥐",
			"수달",   "살쾡이", "두루미", "고라니", "까마귀"
	};
	
	// 버튼 속에 숨길 무작위 숫자를 담을 배열 생성
	int[] bingNum	= new int[SIZE*SIZE];
	
	// 빙고 확인을 위한 변수와 빙고 카운팅 변수 생성
	int bingoRow = 0;
	int bingoCol = 0;
	int bingoLeftDiag = 0;
	int bingoRightDiag = 0;
	int	bingoCount	= 0;
	int bingoPreCount = 0;
	
	// 빙고판 OX판별을 위한 배열 생성
	private boolean[][] btnOX = new boolean[SIZE][SIZE];

	//---------------------------------------------------------------------
	// 생성자
	//---------------------------------------------------------------------
	Frame2(String title) {
		super(title);
		
		// 컨텐트팬에 5x5를 사용할 수 있는 작업관리자를 설정한다.
		setLayout(new GridLayout(SIZE, SIZE));	
		MyEventHandler handler = new MyEventHandler();
		addWindowListener(handler);
		
		// 5x5=25개의 버튼을 담을 객체 배열을 만든다.
		btnArr = new JButton[SIZE * SIZE];		
		// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// 버튼 위치에 숨겨져 있는 숫자를 담을 변수 생성
		for(int i = 0; i < SIZE * SIZE ; i++ ) {
			bingNum[i] = (int)(Math.random()*(SIZE * SIZE) + 1);
			
			// 똑같은 값이 있으면 숫자를 다시 추출
			if( i > 0) {
				for(int j = 0 ; j < i ; j++) {
					if(bingNum[j] == bingNum[i]) {
						i--;
						break;
					}
				}
			}
		}
		
		// 버튼에 숨긴 숫자를 출력
		for(int i = 0 ; i <  SIZE * SIZE ; i++) {
			System.out.print(bingNum[i] + " ");
		}
		System.out.println();
		
		// JFrame에 버튼을 추가한다.
		for(int i = 0 ; i < SIZE * SIZE ; i++ ) {
			btnArr[i] = new JButton(animal[i]);

			// 버튼 하나하나에 리스너를 장착 시킴.
			btnArr[i].addActionListener(handler);
			
			// 버튼 추가
			add(btnArr[i]);
		}

		// setBounds = setLocation + setSize; (x, y, width, height)
		setBounds(500, 200, 500, 500);	
		setVisible(true);
	}
	
	
	class MyEventHandler extends WindowAdapter implements ActionListener{
		
		// JFrame의 우측 상단의 x버튼을 누르면 프로그램 종료하는 이벤트
		// setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 와 같은 기능
		public void windowClosing(WindowEvent e) {
			e.getWindow().setVisible(false);
			e.getWindow().dispose();
			System.exit(0);
		}
		
		
		
		// 이벤트가 벌어질 때 기능 모음 메소드
		public void actionPerformed(ActionEvent e) {
			
			// 눌린 버튼이 뭔지 알아낸다.
			JButton btn = (JButton)e.getSource();
			System.out.println("btn => " + btn);
			
			// 눌린 버튼의 배경색을 먼저 설정
			btn.setBackground(Color.YELLOW);
			
			// 눌려진 버튼이 버튼의 숫자랑 일치하면 해당 인덱스 출력
			// 그리고 눌려진 버튼의 글씨체를 변경
			for(int i = 0; i < SIZE*SIZE ; i++) {
				if((JButton)btn == btnArr[i] ){
					System.out.println("눌려진 버튼의 인덱스 번호 : " + i);
					btnArr[i].setFont(new Font("Arial" , Font.BOLD + Font.ITALIC, 28));
					// 눌린 버튼의 해당 위치에 매칭되는 임의로 섞은 숫자를 세팅한다.
					btnArr[i].setText(String.valueOf(bingNum[i]));
					// 눌린 버튼 위치랑 매칭되는 OX 판별 배열에 true를 넣는다.					
					btnOX[(int)i/5][i%5] = true;
					// 빙고 카운팅 및 체크 메소드 및 빙고 시 색 변화
					bingoCheck(i);				
				}
			}
			
			
			// 빙고판의 상태를 콘솔에 출력.
			displayOX();
			
			
			// 빙고가 2개가 되면 게임 끝
			if(bingoCount == 2) {
				System.out.println("당신이 이겼습니다!!");
			}
			
		}
	}
	
	
	// 빙고 체크 및 빙고색 변경 메소드
	public void bingoCheck(int i) {
		
		// 우상향 대각선 체크
		if(((int)i/5 + i%5) == 4) {
			for(int c = 0 ; c < SIZE ; c++) {
				if(btnOX[c][4-c] == true) bingoRightDiag++;
			}
			
			// 5개가 다 true 라면 빙고 카운트 증가
			// 5개가 아니라면 체크 카운트 리셋
			if(bingoRightDiag == 5) {
				bingoCount++;

				// 빙고 줄이 생기면 그 줄을 초록색으로 바꾼다.
				for(int c = 1 ; c < SIZE ; c++) btnArr[4*c].setBackground(Color.GREEN);
			}else {
				bingoRightDiag = 0;
			}
		}
		
		// 좌상향 대각선 체크
		if(( (int)i/5 == i%5 )) {
			for(int d = 0 ; d < SIZE ; d++) {
				if(btnOX[d][d] == true) bingoLeftDiag++;
			}
			
			if(bingoLeftDiag == 5) {
				bingoCount++;	
				
				// 빙고 줄이 생기면 그 줄을 초록색으로 바꾼다.
				for(int d = 0 ; d < SIZE ; d++) btnArr[6*d].setBackground(Color.GREEN);				
			} else {
				bingoLeftDiag = 0;
			}
		}
		
		// 세로줄 체크
		for(int a = 0 ; a < SIZE ; a++) {
			if(btnOX[a][i%5] == true) bingoRow++;
		}
		
		if(bingoRow == 5) {
			bingoCount++;
			
			// 빙고 줄이 생기면 그 줄을 초록색으로 바꾼다.
			for(int a = 0 ; a < SIZE ; a++) btnArr[ i%5 + 5*a ].setBackground(Color.GREEN);	
			
		} else {
			bingoRow = 0;
		}
		
		// 가로줄 체크
		for(int b = 0 ; b < SIZE ; b++) {
			if(btnOX[(int)i/5][b] == true) bingoCol++;
		}
		
		if(bingoCol == 5) {
			bingoCount++;

			// 빙고 줄이 생기면 그 줄을 초록색으로 바꾼다.
			for(int b = 0 ; b < SIZE ; b++) btnArr[ (int)(i/5)*5 + b ].setBackground(Color.GREEN);

		} else {
			bingoCol = 0;
		}
		
	} // public void bingoCheck(int i) - End
	
	// 빙고판의 상태를 콘솔에 출력.
	public void displayOX(){
		for(int row = 0; row < btnOX.length ; row++ ) {
			for(int col = 0 ; col < btnOX[row].length ; col++) {
				System.out.print(btnOX[row][col]? "●" : "X");
			}
			System.out.println();
		}
		System.out.println("현재 맞춘 라인 수 : " + bingoCount);
		System.out.println("======================================");
	}
	
	//-----------------------------------------------------------------------------------------------------------
	// public static void main(String[] args)
	//-----------------------------------------------------------------------------------------------------------
	public static void main(String[] args) {
		new Frame2("빙고게임");
	} // End - public static void main(String[] args)
} // End - public class Bingo extends JFrame

 

결과

14 9 18 17 5 11 4 22 13 23 1 15 10 19 16 12 8 3 2 6 21 20 7 25 24 
btn => javax.swing.JButton[,2,0,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=고양이,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 0
●XXXX
XXXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 0
======================================
btn => javax.swing.JButton[,98,0,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=강아지,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 1
●●XXX
XXXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 0
======================================
btn => javax.swing.JButton[,194,0,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=거북이,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 2
●●●XX
XXXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 0
======================================
btn => javax.swing.JButton[,290,0,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=토끼,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 3
●●●●X
XXXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 0
======================================
btn => javax.swing.JButton[,386,0,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=사자,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 4
●●●●●
XXXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 1
======================================
btn => javax.swing.JButton[,2,92,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=호랑이,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 5
●●●●●
●XXXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 1
======================================
btn => javax.swing.JButton[,98,92,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=기린,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 6
●●●●●
●●XXX
XXXXX
XXXXX
XXXXX
현재 맞춘 라인 수 : 1
======================================
btn => javax.swing.JButton[,194,184,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=소,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 12
●●●●●
●●XXX
XX●XX
XXXXX
XXXXX
현재 맞춘 라인 수 : 1
======================================
btn => javax.swing.JButton[,290,276,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=코알라,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 18
●●●●●
●●XXX
XX●XX
XXX●X
XXXXX
현재 맞춘 라인 수 : 1
======================================
btn => javax.swing.JButton[,386,368,96x92,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@385adb02,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=까마귀,defaultCapable=true]
눌려진 버튼의 인덱스 번호 : 24
●●●●●
●●XXX
XX●XX
XXX●X
XXXX●
현재 맞춘 라인 수 : 2
======================================
당신이 이겼습니다!!

 

 

 

728x90
반응형