본문 바로가기
프로그래밍

로또 게임 만들기[0]

by minimax95 2020. 5. 26.

이번 포스팅에서는 로또 게임을 직접 만들어 보고자 합니다.

 

먼저 게임 시나리오를 간략히 말씀드리자면 

1~45까지의 숫자 중 6개를 임의로 선택하여 자신의 로또 번호를 만듭니다.

시작 버튼을 클릭하면 로또 번호 생성기에 의해 자동으로 로또 번호가 생성되고

본인이 선택한 로또 번호의 정답 개수가 6개 일치 시 1등, 

5개 일치시 2등, 4개 일치 시 3등,  3개는 4등, 2개는 5등 나머지는 꽝으로 출력하는 시나리오입니다.

현실 세계의 로또와는 조금 다르지만 누가 알겠습니까?

자신이 만든 로또 게임의 숫자가 현실 세계에서 1등 당첨이 될 수도 있다는 사실^^!

그 누구도 모르는 일이지요.

 

그럼 UI부터 만들어 보겠습니다.

아래 그림처럼 45개의 임의의 숫자를 선택할 수 있고

[추첨 Start!] 버튼 클릭시 로또 추첨기가 자동으로 로또 당첨번호를 추출하고

추첨 결과를 알려주도록 UI를 구성하였습니다.

 

이제 UI에서 구성한 내용을 소스코드로 구현할 차례입니다.

먼저 필요한 멤버들을 구성해 줍니다.

본인이 선택한 6개의 숫자를 담을 변수, 로또 추첨기가 랜덤으로 추출한 6개의 숫자를 담을 변수,

추첨 결과를 알려줄 텍스트 문구를 담는 컬렉션, 랜덤 숫자를 생성해 줄 랜덤 클래스 인스턴스 등을

아래와 같이 준비합니다.

 

ArrayList _myLottoList;             // 본인의 로또번호
ArrayList _randomLottoList;       // 로또 추첨기 당첨번호
string[] _resultLottoString;        // 로또 당점 결과 코멘트
Random random;                   // 로또 랜덤 번호 생성
static int SEED = 15;               // 랜덤 시작 값(동일 번호가 나올 확률을 줄여줌

 

다음은 각 숫자버튼 클릭 시 발생하는 버튼 클릭 처리기를 구현하겠습니다.

UI에서 버튼을 더블클릭하면 아래와 같이 버튼 처리기가 생성됩니다.

private void button1_MouseClick(object sender, MouseEventArgs e)
{
}

 

이 버튼 처리기 내부에서 클릭 시 버튼 색상을 변경하고 클릭한 숫자를 본인의 로또 선택 컬렉션에 담아줍니다.

버튼은 토글 형태로 구현하기 위해 다시 반복해서 클릭하면 색상을 원래 색으로 변경하고

컬렉션에 담았던 숫자를 제거하는 로직을 추가해 넣겠습니다.

private void button1_MouseClick(object sender, MouseEventArgs e)
{
    if(button_1.BackColor == Color.FromName("Control"))  
    {
        button_1.BackColor = Color.FromName("DeepSkyBlue");  // 버튼 기본 색상을 "DeepSkyBlue" 색으로 변경함
        InsertNum(1);      // 선택한 숫자 입력
    }
    else
    {
        ReMoveNum(1);   // 선택한 숫자 제거
        button_1.BackColor = Color.FromName("Control");  // 버튼 기본 색상을 "Control" 색으로 설정함
     }
}

 

나머지 버튼들도 약간의 노가다를 통해서 45번까지 동일하게 작업해 줍니다.

 

다음은 [추첨 Start!] 버튼 처리기를 구현해보겠습니다.

동일하게 해당 버튼을 더블 클릭하면 클릭 이벤트 처리기가 자동으로 생성되고 내부에 아래와 같이 소스코드를 구현해줍니다.

 

여기서 눈여겨 볼 부분은 추첨 시작 버튼도 토글 형태로 만들고 추첨 시작 버튼을 누르면 버튼의 Text가 "다시 도전"으로 변경되면서 핵심 함수인 LottoNumMake( ) 함수와 ResultLotto( ) 함수가 실행됩니다.

게임 결과 확인 후 다시 버튼 클릭 시 버튼의 Text는 "추첨 Start!"로 변경되도록 하고

이때 ClearLotto( )함수를 통해서 게임을 초기화하는 기능도 별도로 구현해 주어야 합니다.

 

그럼 위에서 등장한 핵심 함수들을 다음 포스팅에서 계속 설명하도록 하겠습니다.

다음 포스팅도 기대해 주세요.

감사합니다.

 

 

댓글