I love JAVA! ♡

by element
메뉴릿
카테고리
최근 등록된 덧글
글좀 가지고 갔습니다. ..
by 하울 at 05/27
감사합니다. 퍼갈께요..
by 하울 at 05/26
너무 잘봤어요 키 이벤트..
by 얌맘마 at 01/07
인터페이스가 맘에 드네요.
by 김교수 at 11/30
인터페이스는 이정도면 ..
by 김교수 at 11/27
DB를 이용해서 프로그..
by 김교수 at 11/27
ServerSocket servS..
by 김교수 at 11/22
그런데 주석들이 좀 정..
by 김교수 at 11/22
thread1.start();//sta..
by 김교수 at 11/12
클립보드서비스는 eleme..
by 김교수 at 11/11
최근 등록된 트랙백
이전블로그
이글루링크
이글루 파인더
 
프로젝트 전체 소스(프로젝트 진행)

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import java.io.*;
import javax.swing.*;
import java.util.Random;

 

 


class SW extends JFrame implements ActionListener {
 String ranWord[] = {"acrimonious",...,"watertight"}; //100개의 단어
 
    Font font;
    JPanel Pword, Palpb, Pctrl; //위, 중간, 아래 패널 
    GridBagLayout gbltop,gblbottom; //위, 아래
    GridBagConstraints gbctop,gbcbottom; //위, 아래
    JTextField Txcnt, Tocnt, Tpercent, Tscore, Tword, Ttried, Tmsg, Tlchance; //위 textfield
    int Ixcnt, Iocnt, Iscore, Ilchance; //위패널에 필요한 변수
    double Dpercent; //백분율
    String Spercent; //백분율
    JButton [] Balpb; //알파벳버튼
    char [] Calpb; //알파벳문자
    JTextField Tnowlevel; //아래패널의 textfield
    JTextField Tnegaans; //아래패널의 textfield , 정답힌트 거꾸로 보여줄 곳
    JButton Bstart, Blevel, Breset, Bhint; //아래패널의 버튼
    String answer; //정답을 저장할 문자열
    String negastr; //정답을 거꾸로 저장할 문자열
    
    Random r1,r2;
    double rannum; //ranWord 배열의 첨자중 하나
    int rannumint;
    boolean running, flag;
    int failnum;
    char[] alpha; //정답에 있는 알파벳 저장할 공간
    int alphaIndex;
    char[] bravo; //클릭한 알파벳 저장할 공간
    int bravoIndex;
    int Lclick, level;
    NumberFormat fmt;
    JButton preb = new JButton();
    JButton b = new JButton();

    public SW(){
        super("English & Game");
        init();
    }
    public void init(){
        font = new Font("Courier", Font.BOLD, 25);
        Pword = new JPanel();
        Palpb = new JPanel();
        Pctrl = new JPanel();
        gbltop = new GridBagLayout();
        gblbottom = new GridBagLayout();
        gbctop = new GridBagConstraints();
        gbctop.fill = GridBagConstraints.BOTH;
        gbctop.weightx = 1.0;
        gbctop.weighty = 1.0;
        gbcbottom = new GridBagConstraints();
        gbcbottom.fill = GridBagConstraints.BOTH;
        gbcbottom.weightx = 1.0;
        gbcbottom.weighty = 1.0;
        Txcnt = new JTextField();
        Tocnt = new JTextField();
        Tpercent = new JTextField();
        Tword = new JTextField("====English & Game====");
        Tword.setEditable(false);
        Tword.setFont(font);
        Ttried = new JTextField();
        Ttried.setEditable(false);
        Ttried.setFont(font);
        Tmsg = new JTextField();
        Tmsg.setEditable(false);
        Tscore = new JTextField();
        Tlchance = new JTextField();
        Tlchance.setBackground(Color.yellow);
        Txcnt.setEditable(false);
        Tocnt.setEditable(false);
        Tpercent.setEditable(false);
        Tscore.setEditable(false);
        
        Tlchance.setEditable(false);
        Ixcnt = Iocnt = Iscore =0;
        Dpercent = 0.;

        Bstart = new JButton("|  Start  |");
        Bstart.setBackground(Color.white);
        Blevel = new JButton("|  level  |");
        Blevel.setBackground(Color.white);
        Breset = new JButton("|  reset  |");
        Breset.setBackground(Color.white);
        Bhint = new JButton("|  hint on  |");
        Bhint.setBackground(Color.white);
        running = false;
        flag = false;
        failnum = 0;
        Lclick = 2;
        alpha = new char[30];
        bravo = new char[30];
        Balpb = new JButton[26];
        Calpb = new char[26];
        for(int i=0;i<26;i++)
            Calpb[i] = (char)('A'+i); //Calpb 문자배열에 A~Z저장
        for ( int i=0 ; i<26 ; i++){ //버튼 생성
            Balpb[i] = new JButton(String.valueOf(Calpb[i]));
            Balpb[i].setBackground(Color.white);
        }
        Tnowlevel = new JTextField();
        Tnowlevel.setEditable(false);
        Tnegaans = new JTextField();
        Tnegaans.setEditable(false);
        negastr = new String("");
        r1 = new Random();
        r2 = new Random();
        fmt = NumberFormat.getInstance();
        fmt.setMinimumFractionDigits(3);
        setup();
    }
    public void setup(){
        Pword.setLayout(gbltop); //위 패널
        Wadd(new Label("틀린개수 : ",Label.CENTER),0,3,1,1);
        Wadd(Txcnt,1,3,1,1);
        Wadd(new Label("맞은개수 : ",Label.CENTER),2,3,1,1);
        Wadd(Tocnt,3,3,1,1);
        Wadd(new Label("백분율 : ",Label.CENTER),4,3,1,1);
        Wadd(Tpercent,5,3,1,1);
        Wadd(new Label("스코어 : ",Label.CENTER),6,3,1,1);  
        Wadd(Tscore,7,3,1,1);

        Wadd(Tword,0,1,8,1);
        Wadd(Ttried,0,2,8,1);

        Wadd(new Label("message : ",Label.CENTER),0,0,1,1);
        Wadd(Tmsg,1,0,5,1);
        Wadd(new Label("남은기회 : ",Label.CENTER),6,0,1,1);
        Wadd(Tlchance,7,0,1,1);

        Palpb.setLayout( new GridLayout(3,10,5,5)); //중간 알파벳 패널
        for (int i=0; i<26 ; i++ )
            Palpb.add(Balpb[i]);

        Pctrl.setLayout(gblbottom); //아래 패널
        Cadd(Bstart,0,0,2,1);
        Cadd(Blevel,2,0,1,1);
        Cadd(Breset,3,0,1,1);
        Cadd(new Label("현재레벨 : ",Label.CENTER),0,1,1,1);
        Cadd(Tnowlevel,1,1,1,1);
        Cadd(Bhint,2,1,1,1);
        Cadd(Tnegaans,3,1,1,1);
        
        setLayout( new GridLayout(3,1)); //패널삽입
        add(Pword);
        add(Palpb);
        add(Pctrl);

        addWindowListener( //종료리스너 등록
            new WindowAdapter(){
                public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            }
        );
        for (int i=0 ; i<26 ; i++){ //버튼들 등록
            String str = String.valueOf(Calpb[i]);
            Balpb[i].setActionCommand(str);
            Balpb[i].addActionListener(this);
        }
        Bstart.addActionListener(this);
        Blevel.addActionListener(this);
        Breset.addActionListener(this);
        Bhint.addActionListener(this);

        level = 10; //레벌초기화
        Tnowlevel.setText("하수, 10번의 기회 제공.");
        allInit(); //전체 텍스트필드 초기화 함수호출
        setSize(550,370); //윈도우 사이즈 설정
        setResizable(false); //사이즈변경 불가능하게 설정
        setVisible(true);
        Pctrl.requestFocus();
    }
    private void Wadd(Component c, int x, int y, int w, int h){ //위 패널의 등록 메소드
        gbctop.gridx = x;
        gbctop.gridy = y;
        gbctop.gridwidth  = w;
        gbctop.gridheight = h;
        gbltop.setConstraints(c, gbctop);
        Pword.add(c);
    }
    private void Cadd(Component c, int x, int y, int w, int h){ //아래 패널의 등록 메소드
        gbcbottom.gridx = x;
        gbcbottom.gridy = y;
        gbcbottom.gridwidth  = w;
        gbcbottom.gridheight = h;
        gblbottom.setConstraints(c, gbcbottom);
        Pctrl.add(c);
    }
    public void allInit(){ // 초기화 함수
        running = false;
        Ixcnt = Iocnt = Iscore = failnum = 0;
        resetPercent();
        Txcnt.setText(String.valueOf(Ixcnt));
        Tocnt.setText(String.valueOf(Iocnt));
        Tscore.setText(String.valueOf(Iscore));
        Tlchance.setText("");        
        Tword.setText("");
        Ttried.setText("");
        Tnegaans.setText("");
        Tmsg.setText("New Game! 레벨을 조정하고 start를 클릭!");
    }
    public void resetPercent(){
        if(Iocnt == 0 && Ixcnt == 0) Tpercent.setText("0.000 %");
        else{
            Dpercent = (double)Iocnt / ((double)Iocnt + (double)Ixcnt) * 100.;
            Spercent = String.valueOf(fmt.format(Dpercent)) + " %";
            Tpercent.setText(Spercent);
        }
    }

    public void setText(){
        String choice = new String("");
        boolean blank = false;
        for(int i = 0; i<answer.length(); i++){
            flag = false;
            //정답문자열중 하나씩과 alpha 문자배열에 같은 것이 있나 비교 있으면 flag = true
            for(int j = 0; j<=alphaIndex; j++)
                if(answer.charAt(i) == alpha[j]) flag = true;
            if(flag){ //같은 문자가 있으면 현재문자와 공백을 choice에 추가
                choice += answer.charAt(i) + "  ";
            }else{ //없으면 _ 와 공백 추가, 끝나지 않았음을 blank에 표시(true)
                choice += "_  ";
                blank = true;
            }
        }
        Tword.setText(choice); //choice를 출력
        if(!blank){ //정답을 모두 맞췄을 경우, blank = false일 경우
            Ttried.setText("   +++ 축하합니다. 이겼습니다 ! +++   ");
            Tmsg.setText("레벨을 조정하고 start를 클릭하세요.");
            Tocnt.setText(String.valueOf(++Iocnt)); //맞은개수증가
            Tscore.setText(String.valueOf(++Iscore)); //스코어증가
            resetPercent(); //퍼센트표시
            failnum = 0;
            running = false;
        }
    }
    

    public void actionPerformed(ActionEvent e){
        preb.setBackground(Color.white); //전에 클릭한 버튼 흰색으로 변경
        preb = b = (JButton)e.getSource(); //현재 클릭한 버튼 b에 저장,preb에 저장
        String label = b.getText(); //버튼의 레이블을 label에 저장
        String lowerCase = label.toLowerCase(); //소문자로 변경
        char ch = lowerCase.charAt(0); //첫번째 문자 ch에 저장
        b.setBackground(Color.green); //현재 버튼 녹색으로 변경

        if(ch>='a' && ch<='z'){
            if(!running)
                Tmsg.setText("게임을 하려면 레벨 조정 한 후 start를 클릭!");
            else{ //게임중이면
                flag = false;
                for(int i = 0; i<=bravoIndex; i++){ //전에 클릭했는지의 여부 체크
                    if(bravo[i] == ch){
                        flag = true;
                        break;
                    }
                }            
                    
                if(!flag){ //전에 클릭하지 않았을 경우, flag = false
                    Ttried.setText(Ttried.getText() + ch + "  "); //무조건 tried에 추가해서 출력
                    bravo[++bravoIndex] = ch; //무조건 bravo에 삽입
                    for(int i = 0; i<answer.length(); i++) //정답에 있는 알파벳인지 체크
                        if(answer.charAt(i) == ch) flag = true;

                    if(flag) //정답에 있는 알파벳일 경우 저장
                        alpha[++alphaIndex] = ch;
                    else //정답에 있지 않은 알파벳일 경우 
                        failnum++;

                    //남은 기회 표시
                    Tlchance.setText(String.valueOf(level - failnum));
                    Tmsg.setText("   " + ch + "가(이) 선택되었습니다."); //선택된 알파벳 표시
                    
                    if(failnum == level){ //기회를 다 써버린 경우
                        Tword.setText("정  답 : " + answer);
                        Ttried.setText("당신은 졌어요. 공부 좀 하세요.");
                        Tmsg.setText("레벨을 조정하고 start를 클릭!");                        
                        Txcnt.setText(String.valueOf(++Ixcnt)); //틀린개수 증가
                        Tscore.setText(String.valueOf(--Iscore)); //스코어 감소
                        resetPercent(); //백분율 표시
                        failnum = 0;
                        running = false;
                    }else
                        setText(); //맞춘경우

                }else{ //전에 클릭한 경우
                    Tmsg.setText("알파벳 "+ch+"은(는) 이미 선택되었습니다.");
                } //전에 클릭하지 않은경우  end..
            } //running = true end..
        } //a~z클릭 end..

        if ( label=="|  Start  |" ){
            if(!running){
                running = true;
                Tword.setText("");
                Ttried.setText("");
                rannum = r1.nextFloat()*10000%100; //100은 단어의 개수    
                answer = ranWord[(int)rannum]; //배열안에 있는 랜덤 문자열 선택

                //랜덤하게 하나 힌트주기
                rannumint = Math.abs(r2.nextInt()%(answer.length()-1));    //Math.abs(숫자)= 절대값반환
                bravo[0] = alpha[0] = answer.charAt(rannumint);
                bravoIndex = alphaIndex = 0;
                

                setText(); 
                //힌트생성, negastr에 정답 거꾸로 저장
                negastr = "";
                for(int i=answer.length()-1;i>=0;i--)
                    negastr += answer.charAt(i);
                
                Txcnt.setText(String.valueOf(Ixcnt));
                Tocnt.setText(String.valueOf(Iocnt));
                Tscore.setText(String.valueOf(Iscore));
                resetPercent();
                //남은 기회 표시                                
                Tlchance.setText(String.valueOf(level - failnum));
                Tmsg.setText("새로운 단어가 선택되었네요^^");
            }else{
                Tmsg.setText("현재 게임중~~ 게임을 마무리하고 눌러요!^^;");
            }
            
        }else if( label == "|  level  |" ){
            Lclick++;
            if(!running){
                if(Lclick%3 == 0){
                    level = 6;
                    Tnowlevel.setText("고수, 6번의 기회 제공.");
                }else if(Lclick%3 == 1){
                    level = 8;
                    Tnowlevel.setText("중수, 8번의 기회 제공.");
                }else{
                    level = 10;
                    Tnowlevel.setText("하수, 10번의 기회 제공.");
                }
            }else{
                Tmsg.setText("현재 게임중~~ level을 바꿀 수 없어요 ^^;");
            }
            if(Lclick == 5) Lclick = 2;
        }else if ( label == "|  reset  |" ){
            allInit();
        }else if ( label == "|  hint on  |"){
            if(!running)
                Tmsg.setText("게임중이 아니 올시다.");
            else{
                Tnegaans.setText(negastr);
                Bhint.setText("|  hint off  |");
            }
        }else if ( label == "|  hint off  |"){
            if(!running)
                Tmsg.setText("게임중이 아니 올시다.");
            else{
                Tnegaans.setText("");
                Bhint.setText("|  hint on  |");
            }
        }
    }
    public static void main(String args[]){
        SW c = new SW();
    }
}

 

by element | 2008/12/03 11:18 | 실험 프로젝트 | 트랙백 | 덧글(0) 
프로젝트 결과 리포트(프로젝트 진행)

 

▪ 프로젝트 명

 

자바를 이용한 English & Game

   

 

▪ 구성 및 기능

* public void init()

- 폰트 설정

- 각각의 Panel 생성

- 버튼 생성

 

* public void setup()

- Pword.setLayout => 상단 패널

- Palpb.setLayout => 중간 알파벳 패널

- Pctrl.setLayout => 아래 패널

 

* public void allInit()

- 초기화 함수 설정

 

* public void actionPerformed(ActionEvent e)

- 랜덤 문자열 선택 게임 시작

- 힌트 생성

- 남은 기회 표시

by element | 2008/12/02 13:16 | 실험 프로젝트 | 트랙백 | 덧글(1) 
인터페이스를 완성했네요.. 헉;(프로젝트 진행)

완성된 인터페이스 ! 위 패널의 순서를 조금 변화를 줬어요.

       Pword.setLayout(gbltop);
//위 패널
        Wadd(new Label("틀린개수 : ",Label.CENTER),0,3,1,1);
        Wadd(Txcnt,1,3,1,1);
        Wadd(new Label("맞은개수 : ",Label.CENTER),2,3,1,1);
        Wadd(Tocnt,3,3,1,1);
        Wadd(new Label("백분율 : ",Label.CENTER),4,3,1,1);
        Wadd(Tpercent,5,3,1,1);
        Wadd(new Label("스코어 : ",Label.CENTER),6,3,1,1);  
        Wadd(Tscore,7,3,1,1);

        Wadd(Tword,0,1,8,1);
        Wadd(Ttried,0,2,8,1);

        Wadd(new Label("message : ",Label.CENTER),0,0,1,1);
        Wadd(Tmsg,1,0,5,1);
        Wadd(new Label("남은기회 : ",Label.CENTER),6,0,1,1);
        Wadd(Tlchance,7,0,1,1);

by element | 2008/11/27 23:34 | 실험 프로젝트 | 트랙백 | 덧글(1) 
프로젝트 완성해 보자!(프로젝트 진행)


       



        palpb.setLayout( new GridLayout(30,100,50,50)); //중간 알파벳 패널
        for (int i=0; i<26 ; i++ )
            palpb.add(balpb[i]);

        pctrl.setLayout(gblbottom); //아래 패널
        cadd(bstart,0,0,2,1);
        cadd(blevel,2,0,1,1);
        cadd(breset,3,0,1,1);
        cadd(new Label("현재레벨 : ",Label.CENTER),0,1,1,1);
        cadd(tnowlevel,1,1,1,1);
        cadd(bhint,2,1,1,1);
        cadd(tnegaans,3,1,1,1);

        pword.setLayout(gbltop); //위 패널
        wadd(new Label("틀린개수 : ",Label.CENTER),0,0,1,1);
        wadd(txcnt,1,0,1,1);
        wadd(new Label("맞은개수 : ",Label.CENTER),2,0,1,1);
        wadd(tocnt,3,0,1,1);
        wadd(new Label("백분율 : ",Label.CENTER),4,0,1,1);
        wadd(tpercent,5,0,1,1);
        wadd(new Label("스코어 : ",Label.CENTER),6,0,1,1);
        wadd(tscore,7,0,1,1);
        wadd(tword,0,1,8,1);
        wadd(ttried,0,2,8,1);
        wadd(new Label("message : ",Label.CENTER),0,3,1,1);
        wadd(tmsg,1,3,5,1);
        wadd(new Label("남은기회 : ",Label.CENTER),6,3,1,1);
        wadd(tlchance,7,3,1,1);
        
        setLayout( new GridLayout(3,1)); //패널삽입
        add(pword);

by element | 2008/11/27 13:43 | 실험 프로젝트 | 트랙백 | 덧글(1)