前提・実現したいこと
最初の画面でeasyもしくはhardを押してタイピングゲームが始まるようにしたいです。
easyの場合は5回、hardの場合は10回タイピングできるようにしたいです。
今最初の画面で上に残り単語、真ん中にタイピングの文字、下にはeasyとhardのボタンを配置はできているのですが、easyまたはhardを押した場合easyなら5、hardなら10を返してタイピングプログラムを回したいのですがそのやり方がよくわかりません。どのようにすればeasyまたはhardボタンを押した際に正しく動作するのか教えてほしいです。
発生している問題・エラーメッセージ
エラーメッセージ
package ex09; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Random; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Keytamesi2 extends JFrame implements ActionListener{ private static final String[] StrArray = null; JLabel jl,jl1; JPanel pane1=new JPanel(); JButton[] jb=new JButton[2]; int miss=0; int clearnum = 0; int clear=0; public static void main(String[] args) { new Keytamesi2(); int i=0; String[] StrArray = new String[1000];// try { File file = new File("C://java//words.txt"); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); // String lineStr;//1行分代入変数 String lineStr;// テキストファイルの文字を配列に入れたい i=0; while((lineStr=br.readLine())!=null) { System.out.println(lineStr); StrArray[i]=lineStr; i=i+1; } br.close(); }catch(IOException e) { e.printStackTrace(); } } Keytamesi2(){ this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(500,400); this.setTitle("KeyTyping2"); setstartLabel(); setJButton(); } void setstartLabel(){ jl = new JLabel("タイピング"); jl.setFont(new Font(null,Font.PLAIN,40)); jl.setHorizontalAlignment(JLabel.CENTER); jl.setForeground(Color.BLUE); jl.setOpaque(true); this.getContentPane().add(BorderLayout.CENTER,jl); System.out.println(jl.getText().length()); this.setVisible(true); jl1 = new JLabel("残り単語"); jl1.setFont(new Font(null,Font.PLAIN,20)); jl1.setHorizontalAlignment(JLabel.CENTER); jl1.setForeground(Color.BLACK); this.getContentPane().add(BorderLayout.NORTH,jl1); System.out.println(jl1.getText().length()); this.setVisible(true); } void setJButton(){ pane1.setLayout(new GridLayout(1,2)); this.getContentPane().add(BorderLayout.SOUTH,pane1); jb[0]=new JButton("easy"); pane1.add(jb[0]); jb[1]=new JButton("hard"); pane1.add(jb[1]); jb[0].addActionListener (this); jb[1].addActionListener (this); this.setVisible(true); } public void actionPerformed(ActionEvent e) { // TODO 自動生成されたメソッド・スタブ if(e.getSource()==jb[0]) { //EasyMode(); clear=5; }else if(e.getSource()==jb[1]) { //HardMode(); clear=10; } } // void EasyMode() { // // //easyボタン押された後の動作 // //ランダムで5回出したい。 // int clear=5; // return // // } // void HardMode() { // // //10回 // int clear=10; // return // // } String Random() { Random ran = new Random(); int num = ran.nextInt(StrArray.length); return StrArray[num]; } public void keyTyped(KeyEvent e) { String str = jl.getText(); System.out.println(e.getKeyChar()); char ch = e.getKeyChar(); if(str.charAt(0) == ch) { jl.setForeground(Color.BLUE); str = (str.substring(1)); if(str.length() == 0) { str = Random(); clearnum++; } if(clearnum == clear) { jl.setText("ミスタイプは"+ miss +"回でした"); }else { jl.setText(str); } }else { jl.setForeground(Color.RED); miss++; } } public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー