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

Javaの応用:数当てゲーム

数当てゲーム

 enum

 ソース

ゲーム本体

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
package sample.game;

import java.util.Random;

public class NumberGuess {
    private Random numberGenerator = new Random();
    private int secretNumber;
    private int maxNumber=100;
    private int counter;
    private char answer;
    public NumberGuess() {
        getReset();
    }
    public void setGuess(int number) {
        counter++;
        if(secretNumber>number) {
            answer='小';
        } else if(secretNumber<number) {
            answer='大';
        } else{
            answer='当';
        }
    }
    public void getReset() {
        secretNumber = numberGenerator.nextInt(maxNumber)+1;
        counter=0;
    }
    public int getMaxNumber() {
        return maxNumber;
    }
    public void setMaxNumber(int maxNumber) {
        this.maxNumber = maxNumber;
    }
    public int getCounter() {
        return counter;
    }
    public char getAnswer() {
        return answer;
    }
}

CUIインターフェース

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
package sample.game;


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NumberGuessCUI {
    public static void main(String[] args) throws IOException {
        NumberGuess ng = new NumberGuess();
        System.out.println("1から"+ng.getMaxNumber()+"までの数字を当ててください。");
        System.out.println("数字を入力しEnterを押してください。");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        for(String line;(line=reader.readLine())!=null;) {
            try {
                ng.setGuess(Integer.parseInt(line));
                System.out.print(ng.getCounter()+"回目:");
                switch(ng.getAnswer()) {
                case '小':
                    System.out.println("はずれです。その数字より大きいです");
                    break;
                case '大':
                    System.out.println("はずれです。その数字より小さいです");
                    break;
                default:
                    System.out.println("あたりです。");
                    System.exit(0);
                }
            } catch(NumberFormatException e ) {
                System.out.println("数字を入力してください。");
            }
        }
    }
}

GUIインターフェース

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
package sample.game;


import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class NumberGuessGUI extends JFrame {
    private JLabel display = new JLabel(" ");
    private JTextField textField = new JTextField();
    private NumberGuess ng = new NumberGuess();
    public NumberGuessGUI() {
        super("数当てゲーム");
        add(new JLabel("1から" + ng.getMaxNumber() + "までの数字を当ててください。"),
                BorderLayout.NORTH);
        textField.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                try {
                    int guessNo = Integer.parseInt(textField.getText());
                    textField.setText("");
                    ng.setGuess(guessNo);
                    switch (ng.getAnswer()) {
                    case '小':
                        display(ng.getCounter() + "回目:はずれです。"+guessNo+"より大きいです");
                        break;
                    case '大':
                        display(ng.getCounter() + "回目:はずれです。"+guessNo+"より小さいです");
                        break;
                    default:
                        showWinDialog();
                    }
                } catch (NumberFormatException e) {
                    display("数字を入力してください。");
                }
            }
        });
        add(textField, BorderLayout.CENTER);
        add(display, BorderLayout.SOUTH);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //×押したら終了
        setSize(300,100); //大きさを整える
        setVisible(true); //表示
    }
    private void display(String str) {
        display.setText(str);
    }
    private void showWinDialog() {
        int rtv = JOptionPane.showConfirmDialog(this,
                "<html>"+ng.getCounter()+
                "回目:<span style=\"color:red\">あたりです。</span><br>" +
                "再チャレンジしますか?",
                "当たり&再チャレンジ?",
                JOptionPane.YES_NO_OPTION);
        if(rtv==JOptionPane.YES_OPTION) {
            ng.getReset();
            textField.setText("");
        } else {
            System.exit(0);
        }
    }
    public static void main(String[] args) {
        new NumberGuessGUI();
    }
}
NumberGuess.java NumberGuessCUI.java NumberGuessGUI.java

最終更新時間:2007年06月29日 18時54分43秒