トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Javaの応用:番号たたき

 番号たたき

3x3のボタンがランダムに表示/非表示するときに表示されている間にそのボタンを押せばスコア+1点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package sample.game;

import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class BangoTataki extends JFrame {
    final static int MAX_SCORE=20;
    private int score = 0;
    private JLabel status = new JLabel("番号を押してください");
    private JPanel buttonPanel = new JPanel(new GridLayout(3,3));    //3x3のパネル
    private JButton[] button = new JButton[9];    //3x3なので9つのボタンを用意
    public BangoTataki() {
        super("番号たたき");
        //ボタンパネルの初期化
        for(int i=0;i<9;i++) {
            button[i] = new JButton(""+(i+1));
            button[i].setFont(new Font("SansSerif",Font.PLAIN,50));
            button[i].setEnabled(false);
            button[i].addActionListener(new ActionListener(){
                @Override
                public void actionPerformed(ActionEvent e) {
                    ((JButton)e.getSource()).setEnabled(false);
                    score++;
                }
            });
            buttonPanel.add(button[i]);
        }
        addKeyListener(new KeyAdapter(){
            @Override
            public void keyPressed(KeyEvent e){
                if('0'<e.getKeyChar()||e.getKeyChar()<='9'){
                    if(button[e.getKeyChar()-'1'].isEnabled()) {
                        score++;
                        button[e.getKeyChar()-'1'].setEnabled(false);
                    }
                }
            }
        });
        add(buttonPanel,BorderLayout.CENTER);
        add(status,BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //×押したら終了
        pack();
        setVisible(true); //表示
        //ゲーム開始
        Random random = new Random();
        while(true) {
            for(int i=0;i<MAX_SCORE;i++) {
                int activeNo = random.nextInt(9);
                button[activeNo].setEnabled(true);
                try {
                    Thread.sleep(800);
                } catch (InterruptedException e) {}
                button[activeNo].setEnabled(false);
                status.setText("スコア:"+score+"/"+(i+1));
            }
            int rtv = JOptionPane.showConfirmDialog(this,
                    "<html>スコアは満"+MAX_SCORE+"点中"+score+"点でした。<br>"+
                    "再チャレンジしますか?",
                    "終了&再チャレンジ?",
                    JOptionPane.YES_NO_OPTION);
            if(rtv==JOptionPane.YES_OPTION) {
                score=0;
            } else {
                System.exit(0);
            }
        }
    }
    public static void main(String[] args) {
        new BangoTataki();
    }
}

 課題

  1. ボタンの数字をキーボードから入力したときに点数が追加されるような改造を行いなさい。
    • 例えば以下のようなコードを追加する
1
2
3
4
5
6
7
8
9
10
11
        addKeyListener(new KeyAdapter(){
            @Override
            public void keyPressed(KeyEvent e){
                if('0'<e.getKeyChar()||e.getKeyChar()<='9'){
                    if(button[e.getKeyChar()-'1'].isEnabled()) {
                        score++;
                        button[e.getKeyChar()-'1'].setEnabled(false);
                    }
                }
            }
        });
BangoTataki.java

最終更新時間:2008年07月04日 12時04分47秒