Java

2024.04.30 Swing -7 (로또 게임 만들기)

정훈5 2024. 4. 30. 14:12
package ch07;

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

import javax.swing.JButton;
import javax.swing.JFrame;

public class LottoFrame extends JFrame implements ActionListener {
	
	private JButton button;
	
	public LottoFrame() {
		initData();
		setInitLayout();
		addEventListener();
	}
	
	private void initData() {
		
		setTitle("Lotto Game");
		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button = new JButton("Game Start");
	}
	
	private void setInitLayout() {
		add(button, BorderLayout.NORTH);
		setVisible(true);
	}
	
	private void addEventListener() {
		button.addActionListener(this);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("그림을 그려라! ");
		// 이벤트가 일어나면 그림을 다시 그려라
		
		
		repaint(); // 다시 그림을 그려라 요청하는 명령어 // F5
	}
	
	@Override
	public void paint(Graphics g) {
		super.paint(g);
		g.drawString("로또 번호를 클릭하세요", 230, 200);
		g.drawString("7", 100, 300);
		g.drawString("15", 120, 300);
		g.drawString("30", 140, 300);
		g.drawString("33", 160, 300);
		g.drawString("43", 180, 300);
		g.drawString("45", 200, 300);
	}
	
	
	public static void main(String[] args) {
		new LottoFrame();
	}

}

 

package ch07;

import java.util.Arrays;
import java.util.Random;

// 클래스를 --> 단일 책임 원칙을 설정하는 것이 좋다.
//
public class LottoRandomNumber {

	final int LOTTO_NUMBER_COUNT = 6;

	// 6개의 랜덤 번호를 생성하는 메서드가 필요하다.
	public int[] createNumber() {

		int lottoWinNum[] = new int[LOTTO_NUMBER_COUNT];
		Random random = new Random();
		// outer for -> 0 --> inner for --> 동작 안함
		// outer for -> 1 --> inner for --> 한번 동작
		// outer for -> 2 --> inner for --> 두번 동작

		for (int i = 0; i < lottoWinNum.length; i++) {
			lottoWinNum[i] = random.nextInt(45) + 1;
			for (int j = 0; i < i; j++) {

				if (lottoWinNum[j] == lottoWinNum[i]) {
					// 값이 중복된 상태이다.
					i--; // i의 값을 빼서 다시 수행하라
				}

			}
		}
		// 중복 제거 완료
		Arrays.sort(lottoWinNum); // 오름차순으로 자동 정렬ㄴ

		return lottoWinNum;
	}

	// 코드 테스트 메인
	public static void main(String[] args) {
		LottoRandomNumber randomNumber = new LottoRandomNumber();
		int resultArray[] = randomNumber.createNumber();
		for (int i = 0; i < resultArray.length; i++) {
			System.out.println(resultArray[i]);
		}
	}

}

 


package ch07;

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

import javax.swing.JButton;
import javax.swing.JFrame;

public class LottoFrame extends JFrame implements ActionListener {

	private JButton button;
	private LottoRandomNumber lottoRandomNumber;
	private boolean isStart = true;

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

	private void initData() {

		setTitle("Lotto Game");
		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button = new JButton("Game Start");
		lottoRandomNumber = new LottoRandomNumber(); // 포함관계
	}

	private void setInitLayout() {
		add(button, BorderLayout.NORTH);
		setVisible(true);
	}

	private void addEventListener() {
		button.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		System.out.println("그림을 그려라! ");
		// 이벤트가 일어나면 그림을 다시 그려라
		isStart = false;
		repaint(); // 다시 그림을 그려라 요청하는 명령어 // F5
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);

		Font f = new Font("궁서체", Font.BOLD, 20);
		g.setFont(f);

		if (isStart) {
			g.drawString("로또 번호를 클릭하세요", 230, 200);
		} else {
			int getNumbers[] = lottoRandomNumber.createNumber();
			g.drawString(getNumbers[0] + " ", 100, 300);
			g.drawString(getNumbers[1] + " ", 120, 300);
			g.drawString(getNumbers[2] + " ", 140, 300);
			g.drawString(getNumbers[3] + " ", 160, 300);
			g.drawString(getNumbers[4] + " ", 180, 300);
			g.drawString(getNumbers[5] + " ", 200, 300);
		}

	}

	public static void main(String[] args) {
		new LottoFrame();
	}

}

 

package ch07;

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

import javax.swing.JButton;
import javax.swing.JFrame;

public class LottoFrame extends JFrame implements ActionListener {

	private JButton button;
	private LottoRandomNumber lottoRandomNumber;
	private boolean isStart = true;
	private int NUMBER_DISTANCE = 60;

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

	private void initData() {

		setTitle("Lotto Game");
		setSize(600, 400);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		button = new JButton("Game Start");
		lottoRandomNumber = new LottoRandomNumber(); // 포함관계
	}

	private void setInitLayout() {
		add(button, BorderLayout.NORTH);
		setVisible(true);
	}

	private void addEventListener() {
		button.addActionListener(this);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		// System.out.println("그림을 그려라! ");
		// 이벤트가 일어나면 그림을 다시 그려라
		isStart = false;
		repaint(); // 다시 그림을 그려라 요청하는 명령어 // F5
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);

		Font f = new Font("궁서체", Font.BOLD, 20);
		g.setFont(f);

		if (isStart) {
			g.drawString("로또 번호를 클릭하세요", 230, 200);
		} else {
			int getNumbers[] = lottoRandomNumber.createNumber();
			for (int i = 0; i < getNumbers.length; i++) {
				g.drawString(getNumbers[i] + " ", 150 + (i * NUMBER_DISTANCE), 200);
			}

//			g.drawString(getNumbers[1] + " ", 120, 300);
//			g.drawString(getNumbers[2] + " ", 140, 300);
//			g.drawString(getNumbers[3] + " ", 160, 300);
//			g.drawString(getNumbers[4] + " ", 180, 300);
//			g.drawString(getNumbers[5] + " ", 200, 300);
		}

	}

	public static void main(String[] args) {
		new LottoFrame();
	}

}

 

결과물