여기까지 하고 끝내기로 했습니다. ---- === 숫자야구란? === 1~9까지 겹치지 않는 숫자를 골라서 사용자가 맞추기 === 할 일 === || 세부사항 || 시간 || 장소 || 진행상황 || || 틀 만들기 || 1/13일 4시 || 7피 || 끝냄|| || 사용자 입력 받기 - 겹치지 않는 숫자 ||. ||. || 끝냄 || || 확인 버튼 누를 때 동작 ||. ||. || 끝냄 || || 확인 버튼 누를 때 리스트에서 결과 표시 ||. ||. || 끝냄|| || 리스트에 스크롤바 달기 ||. ||. ||자동으로 생김|| || 포기 버튼 누를 때 동작 - 답 알려주고, 새 게임 시작 ||. ||. ||끝냄|| || 크기 조절 ||. ||. || 끝냄 || || 입력 제대로 하지 않을때 처리하기 ||. ||. ||. || || 스크롤 같이 내려가기 ||. ||. ||끝냄|| || 시작할 때 포커스를 텍스트필드에 맞추기 ||. ||. ||끝냄|| +a || 하이스코어 - 물어본 횟수가 적은 순으로 ||. ||. ||. || || 3아웃까지 하기 ||. ||. ||. || || 리팩토링 ||. ||. ||. || === 초기 코드 === 뭔가 메인에 모두 몰아넣은 느낌이 드는 코드 {{{~cpp public class BBGameFrame extends Frame implements WindowListener{ static BBGameFrame f; public BBGameFrame(String aStr){ super(aStr); addWindowListener(this); } public static void main(String[] args) { f = new BBGameFrame("숫 자 야 구 게 임 !"); f.setSize(400, 300); Panel up = new Panel(); List result = new List(); up.add(result); f.add(up, "North"); Panel lp = new Panel(); TextField input = new TextField(); lp.add(input, "West"); Button ok = new Button("확인"); lp.add(ok, "Center"); Button submit = new Button("포기"); lp.add(submit); f.add(lp, "South"); f.pack(); f.show(); } public void windowClosing(WindowEvent e) { dispose(); // 모든 자원을 반납한다. System.exit(0); // Program을 종료한다. } public void windowOpened(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } } }}} ---- === 발전된 코드 === BBGame.java {{{~cpp import java.util.Random; /* * Created on 2004. 1. 17. * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ /** * @author 125 * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class BBGame { public static String correct_answer; public static void startGame(){ correct_answer = ""; Random rmd = new Random(); int temp[] = new int[3]; while ( temp[0] == temp [1] | temp[1] == temp [2] | temp[2] == temp [0]) for ( int i = 0 ; i < 3 ; i++) temp[i] = rmd.nextInt(9); for ( int i = 0 ; i < 3 ; i++ ) correct_answer += temp[i]; } public static String compare(String aStr){ if ( correct_answer.compareTo(aStr) == 0) return "아웃"; int strike = 0, ball = 0; for ( int i = 0 ; i < 3 ; i++) if ( correct_answer.charAt(i) == aStr.charAt(i)) strike++; else for ( int j = 0 ; j < 3 ; j++) if ( correct_answer.charAt(i) == aStr.charAt(j)) ball++; if ( strike == ball & ball == 0) return "찐따-_-"; return strike + " 스트라이크, " + ball + "볼"; } public static void main(String[] args) { startGame(); BBGameFrame frame = new BBGameFrame(); frame.show(); frame.giveFocus(); } } }}} BBGameFrame.java {{{~cpp import java.awt.Container; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; /* * Created on 2004. 1. 17. * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ /** * @author 125 * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class BBGameFrame extends JFrame { public BBGameFrame(){ this.setTitle("숫 자 야 구 게 임"); this.setSize(200, 200); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); /*Container upper = getContentPane(); upper.add(new UpperPanel(), "North"); Container lower = getContentPane(); lower.add(new LowerPanel(), "South");*/ Container cp = getContentPane(); cp.add(new UpperPanel(), "Center"); cp.add(new LowerPanel(), "South"); } public void giveFocus(){ LowerPanel.input.requestFocus(); } public static void main(String[] args) { } } }}} UpperPanel.java {{{~cpp import java.awt.BorderLayout; import java.awt.List; import java.awt.Panel; /* * Created on 2004. 1. 17. * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ /** * @author 125 * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class UpperPanel extends Panel { private static int tail = 0; private static List result; public UpperPanel(){ result = new List(); result.setSize(400,200); this.setLayout(new BorderLayout()); this.add(result, "Center"); } public static void addResult(String aStr){ result.add(aStr); result.select(tail); tail++; } public static void main(String []args) { } public static void restart() { result.clear(); } } }}} LowerPanel.java {{{~cpp import java.awt.Button; import java.awt.Panel; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /* * Created on 2004. 1. 17. * * To change the template for this generated file go to * Window - Preferences - Java - Code Generation - Code and Comments */ /** * @author 125 * * To change the template for this generated type comment go to * Window - Preferences - Java - Code Generation - Code and Comments */ public class LowerPanel extends Panel implements ActionListener, KeyListener{ public static TextField input; private static Button ok; private static Button submit; public LowerPanel(){ input = new TextField(3); this.add(input, "West"); input.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) {processOK();} }); ok = new Button("확인"); this.add(ok, "Center"); ok.addActionListener(this); ok.addKeyListener(this); submit = new Button("포기"); this.add(submit, "East"); submit.addActionListener(this); input.requestFocus(); } public void actionPerformed(ActionEvent e){ processEvent(e.getSource()); } private static boolean isCorrect(String aStr) { if ( aStr.length() != 3) return false; return true; } public static void main(String[] args) { } public void keyPressed(KeyEvent e) { processEvent(e.getSource()); } public static void processEvent(Object aSource){ if ( aSource == ok) processOK(); else if ( aSource == submit) processSubmit(); input.selectAll(); input.requestFocus(); } private static void processSubmit() { UpperPanel.restart(); UpperPanel.addResult("이전 게임 답 : " + BBGame.correct_answer); UpperPanel.addResult("다시-_-"); BBGame.startGame(); } public static void processOK(){ String newResult = null; if (!isCorrect(input.getText())) return; newResult = input.getText() + " -> " + BBGame.compare(input.getText()); UpperPanel.addResult(newResult); } /* (non-Javadoc) * @see java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent) */ public void keyReleased(KeyEvent arg0) { // TODO Auto-generated method stub } /* (non-Javadoc) * @see java.awt.event.KeyListener#keyTyped(java.awt.event.KeyEvent) */ public void keyTyped(KeyEvent arg0) { // TODO Auto-generated method stub } } }}} ---- [TheJavaMan]