여기까지 하고 끝내기로 했습니다.
숫자야구란? ¶
1~9까지 겹치지 않는 숫자를 골라서 사용자가 맞추기
할 일 ¶
| 세부사항 | 시간 | 장소 | 진행상황 |
| 틀 만들기 | 1/13일 4시 | 7피 | 끝냄 |
| 사용자 입력 받기 - 겹치지 않는 숫자 | . | . | 끝냄 |
| 확인 버튼 누를 때 동작 | . | . | 끝냄 |
| 확인 버튼 누를 때 리스트에서 결과 표시 | . | . | 끝냄 |
| 리스트에 스크롤바 달기 | . | . | 자동으로 생김 |
| 포기 버튼 누를 때 동작 - 답 알려주고, 새 게임 시작 | . | . | 끝냄 |
| 크기 조절 | . | . | 끝냄 |
| 입력 제대로 하지 않을때 처리하기 | . | . | . |
| 스크롤 같이 내려가기 | . | . | 끝냄 |
| 시작할 때 포커스를 텍스트필드에 맞추기 | . | . | 끝냄 |
| 하이스코어 - 물어본 횟수가 적은 순으로 | . | . | . |
| 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
}
}










