본문 바로가기
스크래치/올펜 플렛포머 만들기

올펜 플랫포머 만들기3- 맵만들기 1

by 할거없네 2019. 2. 7.

이전 강좌에 이어서 맵만들기를 해봅니다.

맵을 만드는 기능을 넣을 예정인데요,

먼저 마우스를 따라다니는 블록을 그려주기로 합니다.



위와 같이 블록을 하나 만들어 줍니다.

여기에 블록을 만들 것인데, 마우스를 따라다니는 사각형입니다.





마우스를 중심으로 가로세로 20의 사각형을 그려줍니다.






일단 잘 그려지는지 메인함수에 넣었습니다.







잘 따라 옵니다.

이번에는 20x20의 칸이므로, 블록의 위치가 20칸마다 움직이게 할 예정입니다.






마우스 대신 x, y의 변수로 바꿔 넣고,






마우스 값 대신 위와 같이 넣습니다.

위의 값은

마우스의 좌표에서 10을 빼고, 그것을 20으로 나눈 뒤 소숫점 버리고 다시 20을 곱합니다.

그렇게 되면 마우스의 좌표 기준으로 20칸씩을 움직이게 됩니다.

공식의 원리는

마우스 좌표값이 10~29의 값이라면 10을 빼서 0~19가 되고

20으로 나누면 0~0.95의 값이 됩니다.

여기에 버림을 하면 값은 0이 되며, 20을 곱해도 0입니다.

여기서 20이 추가할 때마다 1이 증가되고, 20이 감소할때마다 -1이 증가하게 됩니다. 즉, 계단식의 함수가 만들어 집니다.





메인함수를 좀 더 보기 쉽게 하기 위해서 블록 하나 더 만들어서 정리하도록 하겠습니다.






map_mouse로 넣고 정의를 위와 같으 블록으로 대체합니다.






이제 마우스를 따라다니는 블록에 주소를 넣어줄 차례입니다.

좀더 이해하기 편하게 하기 위해서 엑셀로 숫자표시하겠습니다.






칸 한개당 20x20의 크기이며 스크래치의 화면은 480x360의 해상도이므로

가로 24개, 세로 18개의 칸을 만들 수 있습니다.

여기서 위에서부터 숫자를 다시 채워넣기로 해보겠습니다.





총 432개(24*18)의 숫자가 넣어졌습니다.

이걸 리스트로 만들어서, 첫번째 값이 1이면 땅, 0이면 허공으로 할 것입니다.





맵 데이터 리스트를 만들어 주고,





초기값을 블록에 리스트의 초기값을 넣어줍니다.

일단 0으로 다 넣어주기로 합니다.





다음은 맵을 그려주는 블록을 만들고,





i라는 임시 변수를 만들어서





i가 1에서 맵데이터의 길이만큼 증가하면서 i번째의 맵데이터가 0인지 1인지 확인하도록 반복문을 만듭니다.





그리고 1이면 점을 찍어주도록 블록을 조금 더 추가하고 위치를 잘 정해줍니다.





이 블록의 위치도 역시 메인 루프 안으로 넣었습니다.





맵그리기는 맵을 로딩할때 한번만 하면 되지만, 맵을 수정하는 기능을 넣게 되면 실시간으로 반영되는게 편하기 때문에 메인루프 안에 들어갔습니다.






제가 미처 생각을 못한 부분이 있었는데요, 좌우위아래 반칸이 하나씩 있었습니다. 따라서 반칸의 위치도 점을 찍으려면 26x20 칸의 점을 찍어줘야 합니다.





총 520개가 되겠네요.





초기값으로 리스트의 수를 520으로 늘려주고,





위와 같이 첫줄에 대한 부분을 수정하기 위해 위로 한칸 올리고, 왼쪽 시작칸도 한칸 움직이도록 해줍니다.





최종 맵을 그리는 블록은 위와 같으며,







결과는 위와 같습니다.

스크립트:

https://scratch.mit.edu/projects/280555682/

맵을 만드는 부분은 좀 기기 때문에 나눠서 올리도록 하겠습니다.

다음에는 마우스로 맵을 수정하는 기능을 추가할 것입니다.


댓글