이번에는 로또 번호 생성기를 제작해 보겠다.
위의 그림과 같이 "HorizontalArrangement" 속에 6개의 버튼을 넣어서 6개의 숫자가 표시되록 한다. 각각의 버튼은 텍스트의 색깔을 달리해서 나오는 숫자가 잘 보이도록 한다. 각 버튼은 "num1", num2", ~,"num6"등의 이름이 붙여져 있는데 여기에 45개의 숫자에서 추출한 번호가 표시된다. 버튼을 사용하던 라벨을 사용하던 텍스트 박스를 사용하던 그것은 상관없고 본인 편한대로 사용하면 됩니다. 저는 버튼을 사용했습니다.
그 아래 "645 선택"이란 버튼을 누르면 45개의 숫자 중에서 6개의 숫자가 선택되어 화면에 표시된다.
"Blocks" 패널 화면에서 "Built-in" 안에 있는 "Lists" 요소를 클릭해서 "make a list" 블럭을 "Viwer"패널에 드래그 해서 꺼낸다.
전역변수 "number645_list"를 만들고 "make a list" 블럭을 끼워넣는다. "make a list" 블럭에는 45개의 홈을 추가해서 1부터 45까지 번호를 기입한다.
"Lists" 요소를 클릭하면 위와같이 dropbox 가 열리는데 "select list item list"블럭과 "remove list item list" 블럭을 꺼내 "Viewer" 패널에 가져다 놓는다.
이제 "Blcoks" 패널속의 "Procedures" 요소 6개를 "Viewer" 화면에 꺼집어 내고 위의 그림과 같이 각 블럭을 배치합니다.
먼저 "Blocks" 패널속의 "Math"를 클릭해서 "random integer from ~ to ~"를 꺼집어 내어서 전역변수 "number645_selectIdex1"에 끼워 넣습니다. 아래 그림에 이 프로그램에서 사용되는 전체 전역변수가 정리되어 있으므로 참고 하시기 바랍니다. "random integer from ~ to ~"는 45개의 숫자 중에서 임의로 1개의 숫자를 생성하는 블럭입니다.
45개의 숫자 중에서 하나가 선택되면 "select list item list" 블럭에 끼워넣습니다. "list" 홈에는 "number645_list" 이라는 전체 숫자 리스트를 주고 "index" 홈에는 "random integer from ~ to ~"에서 생성한 하나의 번호, 즉 index를 끼워넣습니다.
그리고 한번 생성된 번호는 다시 사용하면 안되기 때문에 "remove list item list" 블럭을 이용해서 그 번호를 제거합니다.
"remove list item list" 블럭의 list 홈에는 "number645_list" 이라는 전체 숫자 리스트를 주고 "index" 홈에는 방금 생성된 번호, 이것을 index로 주어서 그 번호를 제거합니다.
따라서 "randomNum1" 프로시져 블럭이 실행되면 45개의 번호 중에서 한개를 선택하고, 그 선택한 번호를 첫번째 "num1" 버튼에 표시하고 그 번호는 전체 숫자 리스트에서 제거합니다.
"randomNum2" 프로시져 블럭이 실행되면 44개의 번호 중에서 한개를 선택하고 그 선택한 번호를 두번째 "num2" 버튼에 표시하고 그 번호는 전체 숫자 리스트에서 제거합니다.
"randomNum3" 프로시져 블럭이 실행되면 43개의 번호 중에서 한개를 선택하고, 그 선택한 번호를 첫번째 "num3" 버튼에 표시하고 그 번호는 전체 숫자 리스트에서 제거합니다.
이런식으로 계속 반복해서 "randomNum6"블럭은 40개의 숫자중에서 한개를 선택하고 그 선택한 번호를 여섯번째 "num6" 버튼에 표시하고 그 번호는 전체 숫자 리스트에서 제거합니다.
이제 마지막으로 "645선택" 버튼을 누르면 전체 45개의 숫자 리스트를 먼저 불러오고, 그 다음 1번부터 6번까지 순차적으로 "randomNum" 블럭을 실행시켜 6개의 숫자를 화면에 표시합니다.
위의 그림은 실제 6개의 숫자를 생성해서 스마트폰 화면에 표시한 그림입니다.
*구글 플레이 스토어에서 "로또 족집게2" <kussonjj 작>를 검색하시면 위와 같은 원리로 제작해서 좀 더 업그레이드 한 본인의 앱을 만나실 수 있습니다. TinyWebDB를 이용해서 제가 제공하는 족집게 번호를 만날 수 있습니다.
'SW 배움터 > 앱인벤터2' 카테고리의 다른 글
앱인벤터2 강좌 9: for each 블럭을 이용한 덧셈 (0) | 2017.01.25 |
---|---|
앱인벤터2 강좌 8: 애니메이션 연습 (0) | 2017.01.14 |
앱인벤터2 강좌 6: TinyDB 와 TinyWebDB 사용법 (11) | 2017.01.02 |
앱인벤터2 강좌 5: delay를 주는 2가지 방법 (12) | 2016.12.29 |
앱인벤터2 강좌 4: 두더지 잡기 (11) | 2016.12.22 |