import java.applet.Applet; import java.awt.Label; import java.awt.Button; import java.awt.TextField; import java.awt.Choice; import java.awt.Font; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import java.util.Random; /** Klassen utgör en applet som genererar ord med skramlad stavning där användaren får två försök på sig att gissa rätt. Engelska eller svenska kan väljas. */ public class ordgiss_c extends Applet { /** Inre klass som ger lyssnarfunktionalitet för knapparna i appleten */ private class ordgiss_listener implements ActionListener { public void actionPerformed( ActionEvent aev ) { Object source = aev.getSource(); if ( (source == klar_btn) || (source == svar_txf) ) { handle_klar_btn(); } else if ( source == nytt_btn ) { handle_nytt_btn(); } // if } // actionPerformed } // ordgiss_listener /** Inre klass som ger lyssnarfunktionalitet för komboboxen i appleten */ private class sprak_cbx_listener implements ItemListener { public void itemStateChanged(ItemEvent iev) { handle_sprak_cbx(); } // itemStateChanged } // sprak_cbx_listener /** Genererar nytt skrammelord. Fyller i skrammellabel. @param this instansvariablerna @return aktuellt_index för ord satt, antal_forsok nollställd, lablar initialiserade */ private void fixa_skrammelord() { /* JDK 1.2.2 Funkar ej i browser IE4.0 this.aktuellt_index = ordgiss_c.randnums.nextInt( this.orden.length ); */ this.aktuellt_index = Math.abs( ordgiss_c.randnums.nextInt() ) % this.orden.length; this.antal_forsok = 0; this.mixproblem_lbl.setText( this.skramlen[this.aktuellt_index] ); this.svar_txf.setText( "" ); this.svar_txf.requestFocus(); } // fixa_skrammelord /** Kontrollerar användarens svar. Vid rätt eller andra försöket genereras nytt skrammelord. Vid fel och första försöket får användaren en ny chans. @param this instansvariablerna @return Vid fel svar och antal_forsok == 0 räknas antal_forsok upp, ANNARS visas resultat i en label och fixa_skrammelord anropas. */ private void handle_klar_btn() { String svar = this.svar_txf.getText(); String facit = this.orden[this.aktuellt_index]; String skramlad = this.skramlen[this.aktuellt_index]; if ( svar.equalsIgnoreCase( facit ) ) { this.rattfel_lbl.setBackground( Color.green ); this.rattfel_lbl.setText( "Bra! " + skramlad + " skulle bli " + facit ); this.fixa_skrammelord(); } else if ( this.antal_forsok == 0 ) { this.antal_forsok++; this.rattfel_lbl.setBackground( Color.red ); this.rattfel_lbl.setText( "Nej. Försök en gång till." ); } else { this.rattfel_lbl.setBackground( Color.yellow ); this.rattfel_lbl.setText( "Nej. " + skramlad + " skulle ha blivit " + facit ); this.fixa_skrammelord(); } // if } // handle_klar_btn /** Genererar nytt skrammelord, sätter en meddelandelabel @param this instansvariablerna @return Meddelandelabel satt och fixa_skrammelord anropad */ private void handle_nytt_btn() { this.rattfel_lbl.setBackground( Color.red ); this.rattfel_lbl.setText( "Du svarade aldrig på förra ..." ); this.fixa_skrammelord(); } // handle_nytt_btn /** Hanterar byte av språk @param this instansvariablerna @return orden, skramlen pekar ut nya ordvektorer. Anropar fixa_skrammelord */ private void handle_sprak_cbx() { String val = this.sprak_cbx.getSelectedItem(); if ( val.equals( "Svenska ord" ) ) { this.orden = ordgiss_c.svenska_orden; this.skramlen = ordgiss_c.svenska_skramlen; } else { this.orden = ordgiss_c.engelska_orden; this.skramlen = ordgiss_c.engelska_skramlen; } // if this.fixa_skrammelord(); } // handle_nytt_btn /** Initierar appleten @param this instansvariablerna @return Lablar, knappar och kombo initialsatta. Gissorden satta till svenska och fixa_skrammelord anropad. */ public void init() { super.setLayout( null ); super.setBackground( Color.yellow ); super.setForeground( Color.blue ); /* Funkar inte i IExplorer 4.0 */ super.setFont( new Font( "Helvetica", Font.BOLD, 15 ) ); this.mixord_lbl = new Label("Mixord:"); this.mixproblem_lbl = new Label("mixproblem"); this.rattord_lbl = new Label("Rätt ord:"); this.rattfel_lbl = new Label(""); this.svar_txf = new TextField(); this.nytt_btn = new Button( "Nytt" ); this.klar_btn = new Button( "Klar" ); this.sprak_cbx = new Choice(); this.sprak_cbx.addItem( "Svenska ord" ); this.sprak_cbx.addItem( "Engelska ord" ); super.add( this.mixord_lbl ); super.add( this.mixproblem_lbl ); super.add( this.rattord_lbl ); super.add( this.rattfel_lbl ); super.add( this.svar_txf ); super.add( this.nytt_btn ); super.add( this.klar_btn ); super.add( this.sprak_cbx ); this.mixord_lbl.setBounds( 10, 10, 70, 15 ); this.mixproblem_lbl.setBounds( 90, 10, 80, 15 ); this.rattord_lbl.setBounds( 10, 30, 70, 15 ); this.rattfel_lbl.setBounds( 10, 60, 300, 15); this.svar_txf.setBounds( 90, 28, 150, 20 ); this.nytt_btn.setBounds( 10, 100, 30, 20 ); this.klar_btn.setBounds( 50, 100, 30, 20 ); this.sprak_cbx.setBounds( 10, 200, 150, 20 ); ordgiss_listener listener = new ordgiss_listener(); this.svar_txf.addActionListener( listener ); this.nytt_btn.addActionListener( listener ); this.klar_btn.addActionListener( listener ); this.sprak_cbx.addItemListener( new sprak_cbx_listener() ); this.mixproblem_lbl.setBackground( Color.red ); this.svar_txf.setBackground( Color.white ); this.orden = ordgiss_c.svenska_orden; this.skramlen = ordgiss_c.svenska_skramlen; this.fixa_skrammelord(); } // init /** Skrift före skramlade ordet */ private Label mixord_lbl; /** För visning av skramlade ordet */ private Label mixproblem_lbl; /** Skrift före textfältet */ private Label rattord_lbl; /** För visning av rätt/fel */ private Label rattfel_lbl; /** För användarens svar */ private TextField svar_txf; /** Om användaren vill ha nytt ord utan att svara först */ private Button nytt_btn; /** Då användaren anser sig klar. Enter fungerar också, se actionlyssnaren */ private Button klar_btn; /** För byte av språk */ private Choice sprak_cbx; /** Index för aktuellt ord */ private int aktuellt_index; /** Antal hittills gjorda försök */ private int antal_forsok; /** De rätta orden. Pekar ut antingen svenska eller engelska ord, se static-vektorer */ private String orden[]; /** De skramlade orden. Pekar ut antingen svenska eller engelska skrammel, se static-vektorer */ private String skramlen[]; /** För slumpgenerering */ private static Random randnums = new Random(); /** De svenska orden, facit. Mappade mot samma index som svenska_skramlen */ private static String svenska_orden[] = { "gränssnitt", "endast", "signalerar", "generera", "typ", "använda", "fält", "information", "utvecklingsmiljö", "exempel" }; // orden /** De svenska orden, skramlade. Mappade mot samma index som svenska_orden */ private static String svenska_skramlen[] = { "ttinssnärg", "dsatne", "aarrilgsne", "eeerrang", "ypt", "aadnänv", "äflt", "foniromanit", "mivecljöingutkls", "emlpexe" }; // svenska_skramlen /** De engelska orden. Mappade mot samma index som engelska_skramlen */ private static String engelska_orden[] = { "interface", "only", "signals", "generate", "type", "use", "field", "information", "environment", "example" }; // engelska_orden /** De engelska orden, skramlade. Mappade mot samma index som engelska_orden */ private static String engelska_skramlen[] = { "ntifcaere", "oyln", "ssialgn", "negetera", "pyte", "sue", "fedli", "ifonrotiman", "viennmroten", "amexepl" }; // engelska_skramlen } // ordgiss_c