본문 바로가기
프로그래밍

로또 게임 만들기[1]

by minimax95 2020. 5. 27.

지난 포스팅에 이어서 로또 게임 만들기를 이어서 설명드리겠습니다.

지난 시간까지 UI와 기본 구현 사항들에 대해서 설명드렸고 이번 포스팅에서는 핵심 기능을 담당하는 함수에 대해서 설명드리겠습니다.

 

로또 게임 만들기의 핵심이 되는 기능은 바로 랜덤으로 로또 번호를 추출하는 기능과 내가 선택한 로또 번호의 적중 여부를 판독할 수 있는 기능입니다.

랜덤으로 로또 번호를 생성하는 LottoNumMake( ) 함수입니다.

구현 사항은 아래와 같습니다.

 

6개의 숫자를 생성할 때까지 While문들 돌면서 _randomLottoList에 숫자를 Add 하고

random 객체의 Next( ) 함수를 통해서 새로운 수를 만들어 내고 있습니다.

이때 _randomLottoList 컬렉션에 중복되는 수가 있는지 판별하여 중복되지 않는다면 _randomLottoList에

Add( ) 하도록 구현하였습니다.

 

다음은 ResultLotto( ) 함수입니다.

다소 길게 보이지만 내용은 간단합니다.

먼저 내가 선택한 로또번호가 담겨있는 _myLottoList 컬렉션을 정렬하고 CheckListEquals( )함수를 통해서 로또 번호 생성기가 추출한 번호와 일치 여부를 Check 하도록 구현하였습니다.

CheckListEquals( ) 함수는 아래와 같이 구현합니다.

CheckListEquals( ) 함수에서는 두 개의 ArrayList 매개변수를 받아서 내부에서 비교 구문을 통해 각 컬렉션의 값을 비교하고 같은 수가 있을 경우  nResult를 1씩 증가시켜 최종 결과를 반환하도록 구현해 줍니다.

 

핵심기능을 담당하는 LottoNumMake( ) 함수와 ResultLotto( ) 함수, 그리고 CheckListEquals( ) 함수에 대해서 설명을 드렸습니다.

이 밖에도 몇 가지 함수들을 만들어야 하는데 각 숫자 버튼을 클릭할 때 포함되었던 InsertNum( ) 함수와 RemoveNum( ) 함수, 게임을 초기화하는 ClearLotto( ) 함수입니다.

InsertNum( ) 함수에서는 숫자를 인자로 받아 _myLottoList컬렉션에 값을 넣어주는 기능을 담당하며 아래와 같이 소스코드를 구현할 수 있습니다.

6개의 숫자가 찰 때까지 컬렉션이 값을 받아들이고 6개가 초과되면 클릭 시 버튼 색상을 원래대로 변경하고 메시지 박스를 띄워 주도록 하였습니다.

 

RemoveNum( ) 함수는 아래와 같이 구현해 보았습니다.

심플하게 컬렉션이 입력된 숫자가 있는지 체크하여 포함되어 있다면 컬렉션에 저장된 숫자를 삭제해 줍니다.

 

마지막으로 ClearLotto( )함수는 [다시 도전] 버튼 클릭 시 전체 게임을 초기화하는 함수입니다.

초기화 함수에서는 각 컬렉션에 저장되어 있는 숫자들을 삭제해 주고 선택했던 버튼의 색상을 원래 'Control' 색상으로 변경하도록 하였습니다. 그리고 결과를 기록했던 panel1의 값을 '0'으로 초기화해주었습니다.

 

여기서 눈여겨볼 부분은 From 1 객체에서 label에 접근할 때 this.Controls [strButton]을 통해서 For구문의 i 증가 값을 이용해서 각 label 객체의 색상을 변경해 준 부분입니다. Form 객체에서는 내부의 Control 객체를 Controls 컬렉션에 담고 있기 때문에 this를 통해 Controls객체에 접근하여 For문 i 변수 증가를 통해 Key를 대입하여 접근할 수 있습니다.

 

최종적으로 빌드하여 결과를 실행하면 아래와 같은 결과 화면을 볼 수 있습니다.

아쉽게도 꽝입니다.

 

실제 게임을 많이 돌려보면 5등에 당첨되는 것도 정말 쉽지 않음을 알 수 있습니다.

1등 당첨, 확률적으로는 불가능하지만,

매주 로또 1등 희망의 꿈을 꾸는 것도 그리 나쁘지만은 않은 것 같습니다.

 

감사합니다.

댓글