SW 배움터/앱인벤터2

앱인벤터2 강좌 17: 암산왕1

kusson 2017. 6. 10. 14:28
반응형
728x170

이번에는 유초등학생들이 사용할 수 있는 덧셈 앱을 제작해 보겠다. 앱인벤터로 더하기 빼기 계산을 하는 것은 아주 쉬운일이나 적당한 알고리즘으로 학생들이 좋아할 만한 암산앱을 개발하는 것은 쉬운일이 아니다. 코딩작업을 얼마해보지 않은 사람은 어떤 방향으로 앱을 개발하는 것이 좋을지 생각하는 것 조차 쉽지 않을 것이다. 한자리와 한자리 암산을 계산하는 것은 너무 단순하니 두자리와 한자리 숫자를 암산하는 문제를 생각해보자. 시작 버튼을 누르면 화면에 두개의 숫자가 표시되고 아래에 답과 비슷한 숫자가 4개 표시된다. 그러면 게이머는 맞는 버튼을 클릭하게 되고 맞으면 스코어가 1점씩 올라간다. 그리고 화면에는 다시 문제가 표시된다.

 디자이너 에디터에 위와 같이 컴포넌트들을 배치한다. 상단에는 점수를 표시하는 Label들을 배치하고 그 아래에는 문제를 표시하는 Label을 배치한다. resultImage에는 답이 맞는지 틀리는지를 표시하는 OK, NO 사인이 표시될 것이다. 하단에 있는 4개의 버튼은 정답과 오답이 표시될 버튼이자, 또한 선택용 버튼이다. 두개의 클락은 OK, NO 알림을 표시하기 위해 필요한 것들이고 상태에 따라 소리도 울린다. TinyDB(secondLevelDB)는 점수를 저장하기 위해 필요한 DB이다.

 

변수들을 선언한다. 변수뒤의 숫자들은 각각의 버튼에 표시될 숫자와 관계가 있다. 각각의 의미는 아래의 그림을 설명하면서 말하겠다.

 

 4개의 버튼을 누르면 내부적으로 어떤 처리가 일어나는지를 표시하고 있다. 1번 버튼을 누르면 먼저 정답을 1번 버튼에 나타난 숫자와 비교한다. 정답과 1번 버튼의 숫자가 맞으면 점수를 1점 올리고 그 점수를 이전 최고점수와 비교하는 블럭을 불러온다. 그리고 정답이 맞으면 OK 알림이 잠시 뜬다. 틀리면 NO 알림이 뜨면서 땡 소리가 울린다. 위의 과정을 마치면 다음 문제를 표시하기 위한 루틴으로 넘어간다.

 

 정답을 누르면 점수가 한점씩 올라가면서 그 점수를 TinyDB에 저장한다. 처음 이 앱을 실행할 때는 최고 점수가 0이기 때문에 점수가 올라갈때마다 그 점수가 최고 점수가 되지만 두번째 이 앱을 실행하면 그 전의 최고 점수가 표시되어 있다. 따라서 점수가 올라가면 그 점수를 이전의 최고 점수와 비교하면서 이전 최고 점수를 넘어서야 DB에 저장하게 된다. tag 값에 따라 그 점수를 저장하므로 의미있는 이름을 tag로 설정한다. Screen3.Initialize는 이 앱을 두번이상 실행했을 때 그 전 최고점수를 불러와서 상단에 표시하고 첫번째 문제도 출제한다.

 

 

 여기가 이 앱의 핵심부분이다. start블럭은 Screen3.Initialize에서 불러오는 것으로 게임을 실행하면 바로 화면에 문제를 출제하기 위한 루틴이다. 두개의 숫자 중에서 앞의 숫자는 10부터 100까지의 수 중에서 하나를 선택하고 두번째 숫자는 1부터 10까지의 수 중에서 하나를 선택해 화면에 표시한다. 버튼에는 정답과 1~3 차이나는 숫자를 표시해 유저를 어렵게 만든다. Start1블럭은 1번 버튼을 눌렀을때 처리하는 루틴이다. 각각의 버튼을 눌렀을때 처리하는 루틴이 달라야 정답이 다른 버튼에 무작위로 나오게 된다. 그렇지 않다면 하나의 버튼에만 정답이 계속 나오게 돼서 게임이 재미가 없을 것이다. 각각의 버튼에 나오는 오차의 편차를 어떻게 주느냐 하는 것이 알고리즘의 핵심이다. 필자는 각 버튼에 편차를 따로 주는 식으로 이 문제를 해결했다. 더 재미있게 답을 출력하는 알고리즘도 있을 수 있으므로 이 글을 보시는 분은 각자가 더 재미있는 알고리즘을 개발해서 적용하면 좋을 것이다.

 

반응형
그리드형