본문 바로가기
앱인벤터/실전 앱

앱인벤터 로또 번호 생성기

by 이지이지(EGEasy) 2021. 6. 14.

로또 번호 생성기 앱

 

안녕하세요. 이지이지입니다.

이번 포스팅에서는 앱인벤터에서 위와 같은 로또 번호 생성기 앱을 만들어 보도록 하겠습니다.

 

이 앱을 통해 다음과 같은 내용을 학습할 수 있습니다.

 

1. Clock 컴포넌트

2. 랜덤 숫자 발생하기

3. 리스트에서 중복된 내용 삭제하기

4. 숫자 정렬하기

5. 나눗셈에서 나머지의 활용

6. Any Component 활용

 

먼저 다음 앱인벤터 파일을 내려받아 참고하며 학습하시기 바랍니다.

 

 

MyLotto.aia
0.03MB

 

    화면 구성

로또 번호 생성기의 화면 구성은 매우 심플합니다.

화면 구성

Clock1 컴포넌트의 속성을 위 처럼 지정해줍니다.

특히 TimerInterval은 반드시 100으로 설정해주시고,

이 포스팅이 끝난 후 이해가 되었을 때 스스로 바꾸어 보도록 합니다.

 

    블록 코딩

다음 이미지는 로또 번호 생성기의 전체 블록입니다.

단순히 6개의 숫자만 추출하는 것이면 블록이 굉장히 간단할 수 있으나,

진행 효과와 숫자 정렬을 위해 블록이 조금 복잡하게 되었습니다.

전체 블록 코딩


 

각 블록별로 설명을 드리겠습니다. 먼저 변수들에 대한 설명입니다.

변수 블록

 

① 로또의 보너스 번호 포함 7개의 숫자를 저장할 리스트 변수입니다.

리스트에 저장하는 이유는:

    1. 중복값을 찾기가 쉽다.

    2. 정렬할 때 사용하기 쉽다.

 

② Clock1에서 흘러간 시간을 저장하기 위한 변수입니다.

→ Clock1은 TimerInterval이 100(=0.1초)으로 설정되어 있는데, 1000(1초)까지는 생생함을 주기 위해 로또의 각 번호에 계속 난수를 발생하도록 하는 역할을 합니다.

 

③ 로또 7개의 숫자 중, 채워진 개수를 저장할 변수입니다.

 

④ 로또의 숫자 7개를 모두 추출한 후, 오름차순으로 정렬할 때 임시로 값을 저장해 둘 변수입니다.

 

⑤ 로또 번호마다 일일이 텍스트를 지정하면 블록이 늘어나고 지저분해보이기 때문에,

Any component를 사용하기 위한 변수입니다.

 


 

다음은 [번호 생성하기] 버튼을 클릭했을 때 실행되는 블록입니다.

번호 생성하기 버튼 블록

 

① [번호 생성하기] 버튼을 클릭했을 때

 

②~③ 리스트 변수 no_buttons의 각 항목의 텍스트를 공백으로 하라. 

※ ③ 블록은 앱인벤터 블록화면의 [Any component]-[Any Button]에 있습니다.

 

④~⑥ 나머지 변수들을 초기화합니다. 이전에 값이 남아 있을 수 있으므로 초기화하는 것입니다.

 

⑦ Clock1이 실행될 수 있도록 합니다.

 


 

다음은 Clock1의 블록입니다. 실제로 로또 번호가 생성되는 블록입니다.

Clock1 블록

 

① Clock1의 TimerInterval에 지정된 만큼 시간이 흘렀을 때

→ 이 예제에서는 100(0.1초)으로 설정되어 있습니다. 0.1초마다 이벤트가 발생합니다.

※ 1,000 = 1초를 나타냅니다.

 

② 만약 변수 no_filled가 7보다 작다면; 그렇지 않다면 ⑫로 이동

→ 로또의 번호가 보너스 번호 포함 7개 이므로, 7보다 작다면이라는 조건을 주었습니다.

이 예제에서 7번째 보너스 번호는 no_filled가 6일때 채워지게 됩니다.

 

③ 만약 변수 time_past가 1000보다 작다면; 그렇지 않다면 ⑦로 이동

→ 이 예제에서는 생동감을 주기 위해  각 번호는 1초가 되기 전까지 계속 난수를 뿌려 숫자가 바뀌게 되고, 진행과정은 "번호 생성 중..."으로 보여줍니다. 1000이 되면 다음 자리의 숫자로 넘어가 계속 같은 과정을 반복하는 것입니다.

 

④ time_past는 Clock1이 한 번 실행될 때 마다 100씩 증가하게 되어 있습니다.

100, 200, 300 ... 800, 900

그래서 time_past를 100으로 나누었을 때 나머지가 0이라면, "번호 생성 중." 마침표 하나,

나머지가 1이라면, "번호 생성 중.." 마침표 둘,

나머지가 2라면, "번호 생성 중..." 마침표 세개가 나오도록 하였습니다.

 

⑤ 리스트 변수 no_buttons 중 변수 no filled+1번째 button의 텍스트를 1~45사이의 랜덤 숫자로 나타냅니다.

 

⑥ 변수 time_past에 100을 더해 줍니다.

→ Clock1이 100(0.1초)의 인터벌로 되어 있어, 100, 200, 300...800,900 으로 증가하게 됩니다.

만약 1,000이 된다면 더 이상 난수를 발생하지 않고 버튼에 확정된 번호가 들어가게 됩니다.

 

⑦ 만약 변수 time_past의 값이 1,000보다 작지 않고(1초가 흘렀다는 것을 의미합니다.),

만약 ⑤과정에서 생성된 버튼의 텍스트가 리스트 변수 no_list에 없다면; 그렇지 않다면 ⑪로 이동

→ 로또 번호가 중복되지 않았음을 의미합니다.

 

⑧ 리스트 변수 no_list에 ⑤과정에서 생성된 버튼의 텍스트를 저장해 둡니다.

 

⑨ 번호가 하나 ⑧에서 저장되었으므로, 변수 no_filled의 값에 1을 더해줍니다.

 

⑩ ⑥에서 1초가 흐른 것을 의미하므로, time_past 변수를 0으로 초기화합니다.

 

⑪ 만약 ⑦에서 버튼의 텍스트가 리스트 변수 no_list에 포함되어 있다면 time_past 변수를 0으로 초기화합니다.

→ ⑨과 다르게 no_filled의 값에 1을 더해주지 않았으므로 계속 로또의 같은 자리의 번호를 추출합니다.

→ 중복값에 대한 처리를 해 준 것입니다.

 

지금까지의 코딩으로 로또 번호 생성은 모두 끝이 났습니다.

 

 


 

지금부터는 정렬을 위한 코딩입니다.

 

⑫ 1부터 변수 no_List-1만큼 1씩 증가하며 do 블록을 실행합니다.

→ 변수 no_List에는 로또 번호 7개가 담겨 있으며 보너스 번호는 정렬하지 않을 것이므로 1을 빼준 것입니다.

 

⑬ 만약 number가 6이라면 for 문을 빠져나오라.

→ 아래 블록들에서 보면 number가 5일때 6과 비교하므로 number가 5이면 로또의 개수 6개가 모두 정렬이 됩니다.

그래서 for문을 벗어나게 하는 것입니다.

 

⑭ 만약 변수 no_List에서 number번째 숫자가 number+1번째 숫자 보다 크다면

 

⑮ 변수 temp_No에 no_List에서 number번째 숫자를 저장합니다.

 

ⓐ 변수 no_List의 number번째 숫자를 number+1의 숫자로 교체합니다.

→ number번째 숫자가 number+1의 숫자보다 크기 때문입니다.

 

ⓑ 변수 no_List의 number+1의 숫자를 변수 temp_No에 저장해 두었던 값(number번째 숫자)으로 하라.

 

ⓒ  1부터 변수 no_List-1만큼 1씩 증가하며 do 블록을 실행합니다.

 

ⓓ 각 버튼의 텍스트를 no_List에 있는 숫자로 차례대로 지정합니다.

 

ⓔ 생성과정의 레이블의 텍스트를 "번호 생성 완료!!!"로 합니다.

 


 

이상 앱인벤터로 로또 생성기 앱을 만드는 과정에 대해 설명드렸습니다.

응용하셔서 여러분만의 로또 앱을 만들어 보세요~~~

 

댓글