스크래치 게임만들기 역사퀴즈 2.0 완결

지난 시간에 이어서 역사 퀴즈 스크래치 게임만들기를 완성해 보도록 하겠습니다. 지난 시간에 만든 코드는 데이터를 추가할 경우 코드가 같이 늘어나게 되어 있었습니다.



그렇게 만들게 되면 100개의 퀴즈 문제를 만든다고 하면 코드가 많이 늘어나게 될 텐데요. 이번에는 데이만 추가되는 관리가 간편하게 코딩을 하도록 하겠습니다.


스크래치 게임만들기 역사퀴즈 2.0 완결




# 프로그램 실행 조건

이번 프로그램에 몇 가지를 더 조건을 넣어보도록 하겠습니다.

1. 문제가 랜덤으로 출제 될 것

2. 정답 또는 틀렸을 때 메세지를 내보낼 것

3. 문제를 맞췄을 경우 다시 재 출제 되지 않도록 할 것

4. 틀린 문제는 다시 출제 할 것

5. 모든 문제를 맞췄을 경우 프로그램을 끝내는 메세지를 보낼 것


위에 조건을 만족시키니 이한 프로그램을 구현해 보도록 하겠는데요. 우선 어떻게 알고리즘을 만들면 좋을지 생각을 해야합니다.


역사인물 문제 리스트와 역사인물정답 리스트에 저장되어 있는 번호를 이용해서 만들어 볼 텐데요. 이 번호가 각각 서로 매칭이 되는 것을 확인 할 수 있습니다. 1번 문제에 1번 답이 나오게 하면 되는 것이지요 1↔1 


그리고 랜덤으로 문제가 나타나야 하니깐 리스트 길이를 확인해서 1~문제 항목 갯수까지 랜덤으로 범위를 정하면 됩니다. 랜덤 숫자 범위는 1부터 문제 항목수로 정하는 것입니다.


그리고 조건 3번을 만들기 위해서 맞췄던 문제는 리스트에서 삭제하도록 만들면 됩니다. 틀린문제는 삭제를 안하게 되니 4번 조건도 만들어 지는 것이지요.


마지막 조건을 완성하기 위해서는 길이가 정답을 맞췄을 때 1개식 데이터를 삭제한다면 0 되는 순간 메세지를 나타나게 하면 됩니다.




# 역사퀴즈 2.0 코딩하기

그럼 하나하나 다시 코드를 보면서 설명하겠습니다. 먼저 프로그램을 실행할 때 데이터를 초기하 하는 것 부터 시작합니다. 아래 코드를 보면 크게 3부분으로 나누어 있습니다.


1번 부분은 문제 리스트에 데이터가 0의 갯수보다 많다면 2번 코드를 실행 시킵니다. 2번 코드는 역사인물문제 리스트에 데이터 갯수가 0이 될 때까지 하나씩 삭제를 합니다. 


그리고 3번코드는 역사인물문제 리스트의 항목 갯수가 0이 된다면 다시 순서대로 데이터를 추가 됩니다.  왜? 기존에 있던 데이터를 지우고 다시 만들었을까요? 


그 이유는 정답을 맞추면 하나씩 삭제를 할 것인데요. 만약 중간에 게임을 멈추게 되면 그 데이터그 그냥 남아 있을 수 있기 때문입니다. 그러면 데이터가 중복 될 수 있기 때문에 데이터를 초기화 시켜 주는 것입니다.


역사인물정답 리스트도 같은 방법으로 초기화 시켜줍니다.



그럼 이제 모든 데이터를 초기화 시켜줬으니 문제를 푸는 알고리즘을 만들어 보겠습니다.


코드 중 중요하다고 생각되는 부분에 표시를 해 두었습니다. 1번은 [문항수]라는 변수를 하나 만들었습니다. 여러분도 [데이터]-[변수만들기] 에서 변수를 만들어 주시기 바랍니다.  이 [문항수]가 가장 핵심적인 역할을 합니다.


[문항수] 변수도 초기화를 시켜줍니다. 게임 시작시 준비 시간을 잠시 줍니다. 그 다음 [무한 반복하기] 블록에 2번과 3번 블록을 넣어줍니다.


아래 코드는 모두 정답을 맞출 때까지 리스트의 항목수가 0이 될때까지 계속해서 문제를 출제합니다. 만약 0이 되면 그 때 블록을 벗어나 "이제 끝났습니다~ "라는 메세지가 2초동안 말하게 되는 것입니다.


만약 리스트 항목수의 갯수가 0개가 아니라면 변수 [문항수]수에 1부터 리스트 항목 수 사이에 난수를 발생 시켜 정하도록합니다. 현재 갯수가 5개이니 절대로 5초과 되는 난수는 발생하지 않습니다.


난수가 발생했을 때 그 번호로 질문을 합니다. 예를 들어 4라는 난수가 생겼으면 4번의 해당하는 문제를 출제하게 됩지다. 


3번 코드는 대답으로 받은 값과 [문상수]에 들어있는 숫자의 정답 항목의 답과 비교하게 됩니다. 만약 정답이라다면 "정답입니다"라는 메세지를 내보내고 [문상수]에 들어 있는 숫자의 문제와 정답을 삭제합니다.


다시 예를 들면 4라는 난수가 발생하여 4번째에 들어있는 문제를 출제하고 4번째에 있는 정답과 비교하여 같다면 둘다 삭제하는 것입니다.


그럼 데이터가 5개에서 4개로 줄어들겠지요 그럼 다시 난수가 1~4 사이에 생기게 됩니다. 이런식으로 계속해서 줄여 나가게 되는 것이지요.


이 코드의 좋은 점은 데이만 추가 시키면 되는 것입니다. 다른 곳에는 손볼 필요가 없지요.


# 실행 동영상

동영상을 보시면 쉽게 어떻게 동작이 되는지 이해하실 수 있으실 것입니다. 



나중에는 질문과 정답을 모두 숨겨서 놓으셔야 합니다. 리스트에서 체크표시를 해제시켜면 리스트 항목이 안보입니다.


자료를 공유해 놓았습니다.  https://scratch.mit.edu/projects/170825432/  접속하면 게임도 즐기실 수 있습니다. 필요하신 분들은 저장하시거 리믹스를 하시면 됩니다. 오늘도 즐거운 프로그래밍하시기 바랍니다.(익스플로러에서 동작합니다.)


댓글(4)

  • 버블프라이스 2017.08.11 01:44 신고

    요즘 코딩이 유행인가보더라고요-
    역사퀴즈 2.0 완결 포스트 잘보고 갑니다.

    답글 수정

    • 아빠달 2017.08.11 10:17 신고

      개인적으로고 프로그래밍 교육에 찬성을 하는데요. 이게 단순이 프로그램을 작성하는 것이 아니라 알고리즘을 배우면서 다양한 사고를 할 수 있다는 점에서 좋은건데..

      단순이 책보고 코드를 짜라고하고 암기하라고 하는 교육을 한다면 정말 문제가 많을 것 같다는 생각입니다. 그런 교육이 안되길 바랄뿐입니다.

      수정

  • *저녁노을* 2017.08.11 05:50 신고

    게임은 하나도 모르는 노을입니다.ㅎㅎㅎ

    잘 보고 공감하고 갑니다.

    즐거운 주말 되세요

    답글 수정

Designed by CMSFactory.NET