게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바입니다 밥이 목구녕에서 넘어가질 않습니다 도와주세요 형님들
게시물ID : programmer_11289짧은주소 복사하기
작성자 : 북극의낙타
추천 : 0
조회수 : 651회
댓글수 : 16개
등록시간 : 2015/06/15 20:10:46
옵션
  • 창작글
  • 본인삭제금지

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();
 }
}
출처 제발 이 폭주기관차좀 멈춰주실레요?

내용설명
----
1에서 50까지 버튼을 순서대로 눌러서 맞추는 게임입니다
지금은 우선 버튼 4까지 누르면 끝나게 해놨고요
TimePrint 클래스에서
시간이 가는것은 작동 되는데
멈추는게 안됩니다.

지금 코드 위치도 개판인거 못고치고 끙끙대고있습니다.
도와주십쇼 능력자 형님들
밥먹고 공부할수있도록...
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호