본문 바로가기

정보기술, IT/IT source

GUI를 이용한 로또 프로그램




GUI는 Graphical User Interface로 사용자가 그래픽을 통해서 하드웨어와 상호작용하는 환경을 말한다. 따라서 DOS와 같은 텍스트 기반의 인터페이스와는 대조적이다.


GUI의 요소를 살펴보면 윈도,스크롤바,아이콘 이미지, 단추들을 포함한다. AWT로 작성된 GUI 어플리케이션 역시 플랫폼 독립적이라서 여러 종류 OS에서 코드를 


수정하지 않고도 실행이 가능하지만, 위도우나 버튼과 같은 GUI 컴포넌트들을 직접 구현하지 않고 해당 OS의 컴포넌트를 사용하기 때문에 AWT로 작성된 


GUI어플리케이션의 외양이 실행되는 OS마다 달라질 수 있다. 또한, 여러 종류의 GUI기반의 OS들이 공통적으로 가지고 있는 컴포넌트만으로 구성해야 하기 때문에 


AWT가 제공할 수 있는 GUI컴포넌트의 수가 제한적이다. 대신 OS에서 제공하는 컴포넌트는 해당 OS에 최적화되어 있기 때문에 자바로 구현한 컴포넌트보다 속도가


더 빠르다. GUI의 간단한 설명은 잠시 마치고 GUI를 통한 로또 프로그램을 작성하는 코드를 보도록 하겠다. 


먼저 클래스는 객체화를 유지하기 위해 3개의 클래스로 구분하여 작성되었다.  : Main, MyFrame, LottoManager

 

1) 먼저 실행할 클래스인 Main 클래스를 지정하여 만듭니다.


 ex)

 public class Main {

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


2) 두번째 클래스는 MyFrame 클래스로 로또 화면을 보여줄 객체 클래스를 생성하여 준다. 


    Frame 클래스는 보여줄 화면과 뽑힌 공을 출력시켜줄 display를 호출합니다.


  ex)

 public class MyFrame extends Frame {
 public MyFrame(){
  setVisible(true);
  setSize(500,400);
 }

 @Override
 public void paint(Graphics g) {
    LottoManager mgr=new LottoManager();
  mgr.display(g);
 }
 
}; 


3)  LottoManager 클래스는 우리의 공 번호를 선택해줄 번호를 섞어서 출력해 줄 객체 클래스이다. 


   코딩에 대한 자세한 설명은 주석으로 설명이 되어 있습니다.


   여기서 중요한 부분은 배열이 섞이는 방법입니다.


   45개의 숫자 배열을 temp라는 변수를 하나 선언해서 숫자를 섞어 줄수 있도록 하는 것이 포인트 입니다. 


   다 섞고 나서 배열의 0번째부터 6개의 숫자를 뽑아오는 방법입니다.



   ex)

 public class LottoManager {
 public void display(Graphics g){
  int[] ball = new int[45];  1~45까지의 숫자를 담을 배열 선언
  for(int i=0;i<ball.length;i++){ //+1을 해서 0이 안나오도록 코딩. 1~45를 배열에 담음.
   ball[i]=i+1; 
  }
  int temp = 0;  // 배열을 섞기 위한 임시값과 섞일 배열값을 초기화.
  int j= 0;
  
  for(int i=0;i<100;i++){ //적당히 배열의 값을 섞기 위해 100번을 섞는다.
   j = (int)(Math.random()* 45) ; //배열 범위 0~44의 임의의 값을 얻는다.  얻어진 임의의 값을 임시변수에 넣고 0번째의 배열과 섞는다.
   temp=ball[0];
   ball[0]=ball[j];
   ball[j]=temp;
  }
  
  for(int i=0; i<6; i++){
   System.out.print(ball[i]+" ");
  }
  int x = 100;
  int y = 100;
  for(int i =0; i<6; i++){
   g.drawString(""+ball[i], x+18+(i*60), y);
   g.drawOval(x+(i*60), 70, 50, 50);