import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.*;
class Game extends JFrame implements ActionListener
{
long StaTime;
long EndTime;
boolean running=false; // 아직 실행되지 않음.
boolean finish=false;
Random rnd = new Random();
int time=0;
int check;
String a1;
int a2;
int num1[] = new int[50]; //버튼에 이름을 붙이기위한 배열
Choice Level; // 레벨선택
JButton btnStart, btnFinish;// 시작 및 종료버튼 선언
JButton btnHowto; // 게임방법을 알려줌
JPanel panMain = new JPanel(); //게임을 붙일 패널
JButton rndbutton1[] = new JButton[51];
JButton btnTime;
JButton btnHint;
JLabel lblTime;
Event e = new Event();
int checkNumber = 1;//순서에 맞는 숫자인지 체크하기 위한 변수
public Game()
{
FrameSetup();
new TimePrint(0).start();;
}
public void FrameSetup(){
running=false;
Container contentPane = getContentPane();
setTitle(" =-=-=--=-=-=-=-=-=-=-==-=-===-=-=-= Copyrights(C) 2015.");
setDefaultCloseOperation(EXIT_ON_CLOSE); // 닫기 버튼을 클릭하면 프로그램 종료처리
setSize(800, 1000); // 화면 크기 설정
setMinimumSize(new Dimension(600, 600));// 화면 최소크기 설정
// 화면 레이아웃 지정
contentPane.setLayout(new BorderLayout());
// 각 패널 구성
setTitlePanel(contentPane); // 제목부분의 패널
setMainPanel (contentPane); // 메인부분의 패널 (그림)
setButtonPanel(contentPane); // 버튼부분의 패널
setVisible(true); // 프레임을 보여줌
}
// 제목부분의 패널 구현
public void setTitlePanel(Container contentPane){
JPanel panTitle= new JPanel(); // 제목부분 패널
JLabel panLabel= new JLabel(); // 텍스트를 적기위한 레이블 생성
panTitle.add(panLabel); // 레이블을 패널에 삽입한다.
panLabel.setText("Java ■ ■ ■ 1 to 50 ■ ■ ■ v1.0, Copyrights(C) 2015-=-=-=-=-=-=-=-=, Jeonju Univ. "); // 테스트용 단어 출력
panTitle.setBorder(BorderFactory.createEtchedBorder()); // 구분선 출력
contentPane.add(panTitle, BorderLayout.NORTH); // 북쪽
}
// 게임이 이뤄지는 부분의 패널
public void setMainPanel(Container contentPane){
panMain.setLayout(new GridLayout(5,10));
for (int i = 0; i < num1.length; i++)
{ //랜덤값을 배열에 저장하는 포문
num1[i] = rnd.nextInt(50) + 1; //랜덤값이 1부터 저장되야하므로 +1추가.
for (int j = 0; j < i; j++)
{ //값이 중복되지 않기위해서
if (num1[i] == num1[j] && i != j)
{
i--;
break;
}
}
}
for (int n : num1)
{
add(rndbutton1[n] = new JButton(String.valueOf(n)));
panMain.add(rndbutton1[n]);
rndbutton1[n].setVisible(false);
}
for (int i = 1; i < rndbutton1.length; i++)
{
rndbutton1[i].addActionListener(e);
}
panMain.setBorder(BorderFactory.createEtchedBorder());
contentPane.add(panMain, BorderLayout.CENTER); // 가운데
pack();
} // 시작 종료 및 기타 버튼 부분 패널
public void setButtonPanel(Container contentPane){
JPanel panButton = new JPanel(); // 버튼을 삽입할 패널을 생성한다.
panButton.setLayout(new FlowLayout()); // 좌->우, 상->하로 순서대로 배치
//while(checkNumber != 51){
//btnTime = new JButton((EndTime-StaTime)/600);
//}
lblTime = new JLabel(String.format("%03d",time ));
btnHint = new JButton ("Hint !!!");
btnStart = new JButton("시작"); // 시작버튼
btnFinish= new JButton("종료"); // 종료버튼
btnHowto= new JButton("게임방법"); // 게임방법 설명
panButton.add(btnHint);
panButton.add(btnHowto);
panButton.add(lblTime);
panButton.add(btnStart); // 버튼삽입.
panButton.add(btnFinish);
btnStart.addActionListener(this);
btnFinish.addActionListener(this);
btnHowto.addActionListener(this);
btnHint.addActionListener(this);
lblTime.setEnabled(true);
panButton.setBorder(BorderFactory.createEtchedBorder()); // 구분선 출력
contentPane.add(panButton, BorderLayout.SOUTH); // 남쪽
running=false;
}
public void Make(){
}
public void Play(){
}
class Event implements ActionListener
{
@Override
public void actionPerformed(ActionEvent e)
{
JButton btn = (JButton) e.getSource();
for (int i = 1; i < rndbutton1.length; i++)
{
if (btn == rndbutton1[i])
{
a1 = rndbutton1[i].getText();
a2 = Integer.parseInt(a1);
System.out.print(i);
System.out.println(a2);
if (a2 == checkNumber)//맞는 번호인지 검사
{
System.out.println(i);
rndbutton1[i].setVisible(false);
checkNumber++;//맞는 번호면 다음 번호로
} else
{
return;
}
}
}
if (checkNumber - 1 == 4){
EndTime=System.currentTimeMillis();
JOptionPane.showMessageDialog(btnHowto, "축하드립니다 !",
"게임종료!!!", JOptionPane.WARNING_MESSAGE);
// JOptionPane.showMessageDialog(null,time , "경과시간", JOptionPane.ERROR_MESSAGE);
finish=true;
btnStart.setEnabled(true);
}
}
}
public void actionPerformed(ActionEvent e) {
Object obj = e.getSource();
if(obj == btnStart){
for(int i=1; i<51; i++){
rndbutton1[i].setVisible(true);
Play();
repaint();
running=true; // 아직 실행되지 않음.
}
StaTime=System.currentTimeMillis();
btnStart.setEnabled(false);
}
else if (obj==btnFinish) {
// 종료할지 물어본다
int confirm=JOptionPane.showConfirmDialog(this,
"게임을 종료할까요?", "게임종료", JOptionPane.YES_NO_OPTION);
if (confirm==JOptionPane.YES_OPTION)
System.exit(0);
}
else if (obj == btnHowto){
// 게임 방법을 말해준다.
int howto = JOptionPane.showConfirmDialog(btnHowto, "1에서부터 50까지 순서대로 클릭해야 하며, 게임 종료후 경과시간을 출력해 드립니다."
, "************게 임 방 법************", NORMAL);
}
else if (obj == btnHint){
int hint;
hint = checkNumber;
System.out.println(hint);
rndbutton1[hint].setBackground(Color.RED);
}
}
class TimePrint extends Thread{
int time;
public TimePrint(int time){
this.time=time;
}
public void run(){
while(finish=true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(running){
time++;
lblTime.setText(String.format("%03d", time));
}
else if (checkNumber>2 && checkNumber==5){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public void Finish(){
if (checkNumber>2 && checkNumber==5){
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String args[])
{
new Game();
}
}