본문 바로가기
Code/GUI

[Java Code] 로또 게임 구현

by 스응 2023. 2. 19.
728x90
728x90

  - 1 ~ 45 범위의 랜덤한 정수 6개

 

코드

#  랜덤 정수 추출 기능 파일

public class LottoRandomNumber {

    public int[] lottoNumber() {
        // 메서드에서 리턴할 것이므로 멤버변수로 선언하지 않아도 됨
        int[] lotto = new int[6];

        // 한 곳에서만 사용된다면 지역변수로 선언
        Random r = new Random();  

        for (int i = 0; i < lotto.length; i++) {
            // 1 ~ 45 범위의 정수 난수를 생성해서 배열에 넣기
            lotto[i] = r.nextInt(45) + 1;
            // 중복 제거
            for (int j = 0; j < i; j++) {
                if (lotto[i] == lotto[j]) {
                    i--; // 이번 반복을 취소하고 다시 하도록 함
                }
            }
        } // end of for

        // 오름차순 정렬
        Arrays.sort(lotto);
        return lotto;
    }
}

#  GUI 구현 파일

public class LottoFrame extends JFrame implements ActionListener {

    JButton button;
    int[] lotto = new int[6];

    public LottoFrame() {
        initData();
        setInitLayout();
        addEventListener();
    }

    private void initData() {
        setTitle("Lotto Game");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        button = new JButton("Lotto Start");
    }

    private void setInitLayout() {
        // root 패널의 레이아웃은 기본값인 BorderLayout을 사용함
        add(button, BorderLayout.NORTH); // 버튼을 위쪽에 추가
        setVisible(true);
    }

    private void addEventListener() {
        // 이벤트 등록
        button.addActionListener(this);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("게임 시작 ~");
        LottoRandomNumberBefore lottoRandomNumber = new LottoRandomNumberBefore(); // 객체 생성
        lotto = lottoRandomNumber.lottoNumber(); // 번호 생성
        // 콘솔에 번호 출력
        for (int i = 0; i < lotto.length; i++) {
            System.out.println("lotto : " + lotto[i]);
        }
        repaint();
    }

    // paint는 직접 호출하지 않아도, 실행의 흐름이 이미 정해져 있어서
    // 자동으로 호출이 됨
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        // 폰트 설정
        Font f = new Font("궁서체", Font.ITALIC, 25);
        g.setFont(f);

        // 로또 번호가 생성되어 있지 않은 상태이면
        if (lotto[0] == 0) {
            g.drawString("버튼을 눌러 번호를 확인하세요!", 120, 200);
            return; // 아래 코드 실행 X
        }
        // 로또 번호가 생성된 상태면
        int x = 35;
        for (int i = 0; i < lotto.length; i++) {
            if (i == 0) {
                g.drawString(lotto[i] + "", x, 200);
            } else {
                g.drawString(lotto[i] + "", x += 100, 200);
            }
        } // end of for

    } // end of paint

    // 코드 실행
    public static void main(String[] args) {
        new LottoFrame();
    }
}

 

실행

 

320x100
반응형

댓글