¿¹Àü óÀ½ ÀÔ»çÇßÀ»¶§ ȸ»ç¿¡¼­ ÀÚ¹Ù ±âÃʱ³À°À» ¹Þ°í,
±×³É ¿¬½À»ï¾Æ Â¥ º»°Ì´Ï´Ù.
¿ø·¡ °£´ÜÇÑ ¾ÖÇø´ °­ÀÇ¶óµµ ÇØº¸·Á ÇßÁö¸¸,
¿ä»õ ȸ»çÀÏÀÌ ¹Ù»Û °ü°è·Î ¤Ñ¤Ñ;;

ÇÊ¿äÇÑ ºÐµéÀÌ °è½Å °Í °°¾Æ¼­ ±×³É ¿Ã¸³´Ï´Ù.
Âü°í ÇϽǺÐÀº Âü°í Çϼż­, ´õ ¸ÚÁø ÇÁ·Î±×·¥ ¸¸µé¾î ÁÖ¼¼¿ä~~~

Ȥ Áú¹® ÀÖÀ¸½Ã¸é °Ô½ÃÆÇÀ¸·Î.....^^;;

import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.net.URL;
import java.applet.*;

public class NewHtt extends java.applet.Applet
{
   String []sWords2 = 
   {
      "°¡³­ÇÑ »ç¶÷Àº ´öÇàÀ¸·Î, ºÎÀÚ´Â ¼±ÇàÀ¸·Î À̸§À» ¶³ÃÄ¾ß ÇÑ´Ù.",
      "°¡½Ã³ª¹«¸¦ ½É´Â ÀÚ´Â Àå¹Ì¸¦ ±â´ëÇØ¼­´Â ¾È µÈ´Ù."
   };
    

    String [] sWords = 
   {
      "°¡±î¿î ±æ ¸¶´ÙÇÏ°í ¸Õ ±æ·Î °£´Ù.",
      "°¡±î¿î ÀÌ¿ô ¸Õ ģôº¸´Ù ³´´Ù.",
      "È­°¡ º¹ÀÌ µÈ´Ù.",
      "Ȳ¼Ò µÞ°ÉÀ½ÁúÇÏ´Ù Áã Àâ´Â´Ù."
   };

    String cUp;
    String cCenter;
    String cDown;

    String [] words = sWords;
    // ÆùÆ® ¼³Á¤
    Font f = new Font("±¼¸²", Font.BOLD, 18);
    Font f2 = new Font("°íµñ", Font.BOLD,14);
    Font f3 = new Font("°íµñ", Font.PLAIN,14);
    Font f4 = new Font("°íµñ", Font.PLAIN, 12);
    //¶óº§
    Label lb0 = new Label("´Ü¹®¿¬½À v0.9");
    Label lb1 = new Label("ÇöÀç");
    Label lb2 = new Label("ÃÖ°í");
    Label lb3 = new Label("Æò±Õ");
    Label lb4 = new Label("¼Óµµ (Ÿ/ºÐ)");
    Button lb5 = new Button("Á¦ÀÛ: ÀÌ¿øµ¿(http://home.nownuri.net/~gresfa)");
    //ÅØ½ºÆ®Çʵå
    TextField t1 = new TextField(4);
    TextField t2 = new TextField(4);
    TextField t3 = new TextField(4);
    //È­¸é±¸¼ºÀ» À§ÇÑ ÆÐ³Î
    Panel pTop = new Panel();
    Panel pUp = new Panel();
    Panel pDown1 = new Panel();
    Panel pDown2 = new Panel();
    Panel pDownAll = new Panel();
    //´Ü¹® Ãâ·ÂÀ» À§ÇÑ ÅØ½ºÆ® Çʵå
    TextField textShort1 = new TextField(60);
    TextField textShort2 = new TextField(60);
    
    Button bWord = new Button("¸í¾ðÀ¸·Î ¹Ù²Ù±â");
    Button bEnd = new Button("óÀ½ºÎÅÍ");
    int number = 0;
    int count = 0;
    double stime = 0;
    int ctt = 0;
    int mtt = 0;
    int ett = 0;
    int ttt = 0;
    int total = 0;
    boolean sFlag = false;
    
    public void init()
    {
        cUp = getParameter("upcolor");
        cCenter = getParameter("centercolor");
        cDown = getParameter("downcolor");

        // ÆùÆ® ¼³Á¤
        textShort1.setFont(f);
        textShort1.setEditable(false);
        textShort2.setFont(f);
        lb1.setFont(f2);
        lb2.setFont(f2);
        lb3.setFont(f2);
        lb4.setFont(f2);
        lb5.setFont(f4);
        lb0.setFont(f2);
        t1.setFont(f3);
        t2.setFont(f3);
        t3.setFont(f3);
        t1.setEnabled(false);
        t2.setEnabled(false);
        t3.setEnabled(false);

        // È­¸é ±¸¼º
        setLayout(new BorderLayout());
        
        pTop.add(lb0);
        pTop.add(bWord);
        pTop.setBackground(color(cUp));
        pUp.add(textShort1, BorderLayout.NORTH);
        pUp.add(textShort2, BorderLayout.SOUTH);
        pUp.setBackground(color(cCenter));
        pDown1.add(lb4);
        pDown1.add(lb1);
        pDown1.add(t1);
        pDown1.add(lb2);
        pDown1.add(t2);
        pDown1.add(lb3);
        pDown1.add(t3);
        pDown1.add(bEnd);
        pDown2.add(lb5);
        pDownAll.setLayout(new BorderLayout());
        pDownAll.add(pDown1, BorderLayout.NORTH);
        pDownAll.add(pDown2, BorderLayout.SOUTH);
        pDownAll.setBackground(color(cDown));
        add(pTop, BorderLayout.NORTH);
        add(pUp, BorderLayout.CENTER);
        add(pDownAll, BorderLayout.SOUTH);
        nextWord();
        stime = new Date().getTime();
//  ¸®½º³Ê µî·Ï
        bWord.addActionListener(new ChangeWord());
        textShort2.addKeyListener(new KeyHandler());
        bEnd.addActionListener(new ActionHandler());
        lb5.addActionListener(new ShowLink());
    }
        
    public Color color(String str)
    {
        return new Color(Integer.parseInt(str,16));
    }

    public void nextWord()
    {
        callScore();
        count = 0;
        total++;
        sFlag = false;
        number = Math.abs(new Random().nextInt()%words.length);
        textShort1.setText(words[number]);
        textShort2.setText("");
        textShort2.requestFocus();
    }

    public void callScore()
    {
        if (total!=0)
        {
            double tTime = (new Date().getTime() - stime)/1000/60;
            ctt = (int)(count/tTime);
            if (ctt>mtt)
            {
                mtt = ctt;
            }
            ttt = ttt + ctt;
            ett = (int)ttt/total;
        }

        t1.setText(""+ctt);
        t2.setText(""+mtt);
        t3.setText(""+ett);
    }

    public void reset()
    {
        ctt = 0;
        mtt = 0;
        ett = 0;
        ttt = 0;
        total = 0;
    }

    public void changeWord()
    {
        if (bWord.getLabel().equals("¸í¾ðÀ¸·Î ¹Ù²Ù±â"))
        {
            words = sWords2;
            bWord.setLabel("¼Ó´ãÀ¸·Î ¹Ù²Ù±â");
        }
        else 
        {
            words = sWords;
            bWord.setLabel("¸í¾ðÀ¸·Î ¹Ù²Ù±â");
        }
    }
    
    
    public class ChangeWord implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            reset();
            changeWord();
            nextWord();
        }
    }
        
    public class ShowLink implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            try
            {
                URL u = new URL("http://home.nownuri.net/~gresfa/index.html");
                AppletContext text = getAppletContext(); 
                text.showDocument(u);
            }catch(Exception e) 
            { 
                showStatus("Error : " + e); 
            } 

        }
    }

    private class KeyHandler implements KeyListener
    {
                
        public void keyPressed(KeyEvent ke)
        {
                        
            if (sFlag==false)
            {
                stime = new Date().getTime();
                sFlag = true;
            }
            if ((ke.getKeyCode()==ke.VK_ENTER)&&(textShort1.getText().equals(textShort2.getText().trim())))
            {
                nextWord();
            }
                        
            if (ke.getKeyCode()==ke.VK_BACK_SPACE)
            {
                count--;
            }
        }

        public void keyReleased(KeyEvent ke)
        {
            if ((ke.getKeyCode()==ke.VK_SPACE)&&(textShort1.getText().equals(textShort2.getText().trim())))
            {
                nextWord();
            }
            
            count++;
            if ( textShort2.getText().substring(0, textShort2.getText().length()-1)
                .equals(textShort1.getText().substring(0, textShort2.getText().length()-1) ))
                textShort1.setForeground(Color.black);
            else
                textShort1.setForeground(Color.red);
        }

        public void keyTyped(KeyEvent ke)
        {
            
        }
    }

    private class ActionHandler implements ActionListener
    {
        public void actionPerformed(ActionEvent ae)
        {
            reset();
            nextWord();
        }
    }
    
}