It Study/POWER JAVA(기본서)

POWER JAVA 10장 Lab1 가위,바위,보 게임 (주석)

prlkt5200 2022. 11. 2. 10:07
반응형
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
 
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
//해당 클래스는 JFrame 상속과 ActionListener를 구현한다
public class RockPaperScissor extends JFrame implements ActionListener {
    
    //상수를 통해 가위,바위,보의 값을 정해놓는다.
    final int SCISSOR = 0;
    final int ROCK = 1;
    final int PAPER = 2;
 
    //panel 객체와 lable 객체, button 객체를 위한 참조변수를 설정한다.
    private JPanel panel;
    private JLabel output, information;
    private JButton rock, paper, scissor;
 
    public RockPaperScissor() {
        
        //frame의 제목과 크기를 설정해준다.
        setTitle("가위, 바위, 보");
        setSize(400150);
 
        //panel 객체를 생성하고 동시에 layout을 설정해준다.
        panel = new JPanel();
        panel.setLayout(new GridLayout(03));
 
        //가위,바위,보 게임을 위한 안내문을 적어놓은 label
        information = new JLabel("아래의 버튼 중에서 하나를 클릭하시오");
        
        //응원글을 적어놓은 label
        output = new JLabel("Good Luck");
        
        //button 3개에 각자의 이름을 적어놓는다.
        scissor = new JButton("0: 가위");
        rock = new JButton("1: 바위");
        paper = new JButton("2: 보");
 
        //각 버튼 객체에서 발생하는 이벤트를 현재 frame 클래스에서 처리하겠다는 의미이다.
        //실제로 아래에서 보면 이벤트를 처리하기 위한 actionPerformed();가 이 frame 클래스에 
        //정의되어 있다.
        scissor.addActionListener(this);
        rock.addActionListener(this);
        paper.addActionListener(this);
 
        //button을 panel에 추가시켜준다.
        panel.add(scissor);
        panel.add(rock);
        panel.add(paper);
 
        //각각의 label과 button을 layout 설정을 통해 위치를 잡아준다.
        //그리고 frame에서 나올 수 있도록 설정해준다.
        add(information, BorderLayout.NORTH);
        add(panel, BorderLayout.CENTER);
        add(output, BorderLayout.SOUTH);
        setVisible(true);
    }
 
    public static void main(String[] args) {
        
        //이 frame 클래스의 객체를 생성한다.
        RockPaperScissor f = new RockPaperScissor();
 
    }
 
    //이벤트를 처리하기 위한 메소드이다.
    @Override
    public void actionPerformed(ActionEvent e) {
        
        //이벤트 객체를 매개변수로 받는데, 이 이벤트 객체의 이벤트소스를 e.getSource();로
        //불러내서 (JButton)으로 형변환해서 참조변수 b와 바인딩 해준다.
        JButton b = (JButton) e.getSource();
        
        //참조변수 b를 통해서 불러온 문자열에 첫번째 문자를 반환하고, 곧바로 parseInt();를 통해 
        //정수형으로 치환한다.
        int user = Integer.parseInt("" + b.getText().charAt(0));
        
        //Random 객체를 생성
        Random random = new Random();
        
        //0~2까지 난수 발생한다.
        int computer = random.nextInt(3);
        if (user == computer)
            output.setText("인간과 컴퓨터가 비겼음");
        //이 조건식은 컴퓨터가 0은 1, 1은 2, 2는 3의 값을 반환하고 이것이랑 user의 값을 비교하는 것을 의미한다.
        //활용은 다음과 같다
        //ex: user는 0(가위), computer도 0(실제로 computer가 받은 값은 2(보)이며, 조건식에 따라 0의 값을 반환한 것)
        //그 둘이 같다는 것은 인간 승리!
 
        else if (user == (computer + 1) % 3)
            output.setText("인간: " + user + " 컴퓨터: " + computer + " 인간 승리");
        else
            output.setText("인간: " + user + " 컴퓨터: " + computer + " 컴퓨터 승리");
    }
}
cs
반응형