터틀크래프트 스토리코딩

LEGO 블럭과 같은 코딩 명령어로 접근하는 터틀크래프트 스토리코딩

3D VR 놀이와 3D 프린팅으로 만들고 놀고 나누는 코딩

 

 

위 3차원 건축물(터북성)의 성벽, 기둥과 난간, 지붕과 계단 등을 만들 때 터틀크래프트에서는 2가지 방법으로 코딩을 할 수 있다. 첫 번째 방법은 거북이가 블럭 하나하나를 쌓아가며 만드는 doit 거북명령인 원소나열법 방법이고, 두 번째 방법은 beginxyz 아래에서 작동하는 정직구원 집합명령인 조건제시법 방법이다. 각자의 수준에 맞추어 편한 방법으로 시작하되, 목표는 짧은 코드이면서 빠르게 실행되는 코드이다. 이 것이 컴퓨팅 사고력 (computational thinking) 역량을 키우는 지름길이다. LEGO 블럭으로 재미있는 것을 만든 경험을 바탕으로, 터틀크래프트 스토리코딩을 통해 자기에게 의미있는 (personally meaningful) 건축물 등을 코딩으로 만들고, VR 과 3D 프린팅으로 보고 만지며 놀아보고, 또한 코딩을 통해 서로의 아이디어를 나누며 궁극적으로 수학적 사고와 컴퓨팅 사고력 역량을 키워보자 !! 또한 아래와 같이 고등학교 이차곡면 등과 관계된 수학적 구조물을 만들고, 3D 프린팅과 VR 놀이로 수학탐구 역량도 키워보자 !!

==============================================

 

위 터북성에서 시작해서 창의적으로 여러 3차원 건물을 지은 후, 삼차원 VR을 쓰고 성벽을 거닐고 계단도 올라가며 만들어진 건축물에서 놀아보고, 또한 3D 프린터로 건축을 뽑아보자. 어릴 때 레고 LEGO 장난감의 블럭으로 여러 모양을 만들며 놀아본 경험을 떠올려보자. 레고 블럭과 같은 구성의 도구를 학습자에게 주고, 그 구성의 도구로 Learning by Making (Design) 학습을 유도하는 구성주의 (constructionism) 이론은 스크래치 언어의 시작인 MIT 패펄트 교수의 LOGO 거북명령에서 시작하였다. MIT 거북명령 LOGO와 스크래치 언어 모두는 거북이와 고양이의 가자와 돌자 행동 명령에 기반을 둔다. 터틀크래프트에서도 마찬가지로 가자와 돌자 그리고 위와 아래로 3차원 행동을 하는 명령과 현재의 위치와 방향을 기억하는 도돌이표 (원래 위치로 되돌아가게 하는 표시) 명령을 하나의 문자에 대응시켜 거북문자 코딩으로 접근한다. 

위에서, 소문자 s와 t는 각각 앞으로 (step) 및 뒤로 가며 블럭을 만든다.  u 와 d는 각각 위로 (up) 아래로 (down) 가며 블럭을 만든다, 대문자 L과 R은 각각 왼쪽 (Left) 오른쪽 (Right) 방향으로 90도 돈다. 마지막으로, [ 은 현재의 위치와 방향을 기억시키고, ] 기호는 기억된 위치와 방향으로 되돌아간다. 헨젤과 그레텔 동화에 나오는 돌멩이나 음악의 도돌이표를 생각하면 이해하기 쉽다. 먼저 [beginxyz] 단추를 눌러 3차원 마인크래프트와 같은 환경을 만든다. 이 후, [실행] 단추를 눌러보자. 

A = ' s s[u] ' // A는 앞으로 가고, 앞으로 가고 위에 블럭 doit( s s[u] s s[u] s s[u] s s[u] ) // 앞으로 가고, 앞으로 가고 위에 블럭 ... 4번 반복 doit( L ) // 왼쪽으로 90도 회전하여 방향을 바꾼다 doit( AAAA L 4A L 4A L ; 16 ) // A를 네번하고 L 하고 ...... 반복한다

위의 코드에서, doit 은 거북에게 명령을 하는 신호이며, 소문자 s는 앞으로 가면서, u는 올라가면서, d는 내려가면서 블럭을 각각 하나씩 만든다.  MIT 거북수학과 컴퓨팅 사고력 역량을 위한 터북이 (TurBOOKi) 성을 만드는 프로젝트의  핵심 아이디어를 레고 (LEGO) 블럭으로 이해하자. 앞에서 문자 s, t, u, d, L, R 과 도돌이표 기호 [ ]  을 소개하였다. 이제 다음과 같은 모양의 레고 블럭과 그 블럭의 이름을 각각 S, Z, X, Y 라고 부르자. 폭이 넓고 모양이 있는 이런 블럭들을 연결시켜 터북이 성을 만들어보자.  

위에서, S는 거북이가 앞으로 가면서, 왼쪽과 오른쪽에 각각 성벽과 길을 만들되, 하나는 낮게 또 하나는 높게 위의 그림과 같이 만든다. Z는 높은 성벽과 길을 한개만 만든다. 성벽의 길은 폭이 3이고, 성벽까지 넣으면 폭이 5가 된다. 이렇게 성벽을 만들면서 왼쪽 오른쪽으로 회전을 하려면 성벽의 폭을 고려해야 한다. 왼쪽으로 회전하는 대문자 X는, 왼쪽으로 가는 통로는 비워두고, 가로 세로가 4인 모퉁이를 만든다. 대문자 Y는 오른쪽으로 가는 통로를 만들 때 쓴다. 이제 아래와 같이 만리장성과 같은 성벽을 만드는 코드를 만든 후, 먼저 [beginxyz] 눌러 3차원 세상을 만든 후, 이어서 [실행] 단추를 눌러보자.

doitsxyz // 대문자 SXYZ 거북문자 사용 goto(1,3,1) // (1,3,1) 로 이동, 동쪽방향 doit( SX SY SSX 4SX ) doit( 5SZ 5SX 4SX SSY SX S uu ZZZ s ) goto( 0,2,6, 3 ) // 마지막 3은 3직각방향 doit( s ; 0 ) // 0 번 블록으로 s 만듦 beginxyz ; item=6 // 6번 블럭, 좌표평면

goto(0,2,6,3) 명령은 주어진 좌표 (0,2,3) 과 방향(3) 으로 머리띠룰 두른 닌자 거북이를 보낸다. goto(0,2,3) 과 같이 방향을 나타내는 숫자가 없으면 0 직각 방향 즉 동쪽을 향하게 된다. 3 이라는 숫자가 있다면, 3 직각 방향 (270도) 인 남쪽을 향하게 된다. doit( s ; 0 )   명령의 s는 앞으로 가면서 블럭을 만들되 ; 다음에 있는 숫자인 0번 블럭 (빈 공간)으로 만들라는 것이다. 디폴트인 7번 블럭은 벽돌 모양이다. 디폴트 블럭을 바꾸려면 item 이란 변수를 사용한다. 위 코드에서 beginxyz 다음에 쓰인 item=6 에 의해, beginxyz 아래의 조건제시법 코드에서는 6번 블럭이 디폴트 블록으로 작동한다. beginxyz 위의 원소나열법 코드에 따로 item 명령이 없으면 item=7 명령이 이미 작동한 것으로 한다. [beginxyz] 단추로 조건제시법 코드를 작동시키고, 이어서 [실행] 단추로 원소나열법 코드를 작동시켜 작품을 완성한다.

 

3차원 입체를 정직구원체 집합으로 접근하는 터틀크래프트 블럭코딩

앞에서 소개한 doit 기반의 거북명령은 블럭을 하나하나 만들며 터북이 성을 만든다. 이제 터북이 성에 디즈니랜드에서 보는 그런 탑을 올려보자. 터틀크래프트에서 초등학교 수학에도 나오는 기둥이나 뿔 그리고 구의 모양을 활용할 때, 집합 명령을 사용하여 조건제시법 코딩으로 만든다 (doit 기반의 명령은 원소나열법 코딩). 아래와 같이, 터틀크래프트의 정직구원 명령은 집합의 어떤 조건에 맞는 블럭을 모두 모아서 만든 입체를 만든다. 정과 직은 각각 정사각형과 직사각형의 앞 글자이다. beginxyz 아래에 쓰이는 다음과 같은 정직구원 명령을 예를 살펴보자.

 

정직구원 집합명령은 모두 중심의 위치와 반지름 개념으로 입체를 만든다. 기둥과 뿔 등의 입체는 맨 아래의 부분이 있고 그 부분의 중심이 있다. 직사각형에서는 중심에서 오른쪽으로의 가로 길이외 위로의 세로 길이를 각각의 반지름으로 본다. 예를 들어, 집합 { 정( 5, 5, 1, 4 ) && z<5 }  명령은 맨 아랫 부분이 1층에 있고 그 부분의 중심좌표가 1층의 (5,5) 이다. 이제 여기를 시작점으로 한층 한층 5층 아래까지 올라가면서 각 층에서 중심이 (5,5) 이고 반지름 (즉 중심에서의 가로 세로의 길이) 이 1인 정사각기둥을 만든다. 여기서  && z<5  명령은 5층 아래라는 조건을 쓴 것이다. && 기호는 and (또한 이것도 만족하라는 논리) 표시이고,  z 좌표는 위로 올라가는 각 층의 값으로 z<5 라는 뜻은 4층 까지라는 것이다. 이제 아래의 [beginxyz] 단추를 눌러 정직구원 집합명령으로 입체를 만들어보자.

A='s s[u]' goto(0,0,5) 반복 4 { doit( 5A L ; 9 ) } beginxyz ; if(z<0 || z>13) return 집합 { 정(5,5,1,4) && z<5 } 집합 { 직(5,5,5,2,3) && z<10 ; 16 } 집합 { 정(5,5,10,14-z) ; 18 } 집합 { 원(-5,5,1,1) && z<5 ; 12 } 집합 { 구(-5,5,8,4) ; 13 }

위의 명령에서, 집합 { 정(5,5,10,14-z) ; 18 } 명령은 18번 블럭 (앵그리버드 블럭) 으로 사각뿔을 만드는 명령이다. 구체적으로, 맨 아래의 중심 좌표가 10층의 (5,5) 이며, 여기서 부터 중심을 따라 위호 한 층씩 올라가면서 반지름 (가로,세로) 을 14-z 로 하는 정사각형을 만들어 쌓으라는 것이다. 10층에서는 z=10 이기에, 중심이 (5,5,10) 이고 반지름이 4인 정사각형이 만들어지고, 11 층에서는 z=11 이기에 반지름이 14-z 에 의해 3, ..., 14층에서는 중심이 (5,5,14) 이고 반지름이 0 (중심점만 나타남), 15층 이상에서는 반지름 14-z 가 음수가 되기에 더 이상 사각형이 만들어지지 않는다 (음수인 반지름은 없기에). 따라서 올라가면서 점점 작아지는 정사각형이 쌓이기에 피라미드 모양의 사각뿔이 탑의 지붕으로 만들어진다. beginxyz 위의 반복 4 { doit( 5A L ; 9 ) } 명령은 9번 블럭 (바위모양 블럭) 으로, 문자 A에 저장된 명령을 5번 실행하고 이어서 L 하는 것을 총 5번 반복 (repeat) 하라는 반복 알고리즘이다. 이 것으로 탑의 베란다가 만들어진다. 다음은 성벽과 탑을 doit 거북명령과 정직구원 집합 명령을 융합하여 만든 것이다. [beginxyz] 단추를 누르면 beginxyz 아래의 코드에 의해 먼저 탑이 만들어지고, [실행] 단추를 누르면 beginxyz 위에 쓰인 코드로 성벽이 만들어진다.

doitsxyz // 대문자 S,X,Y,Z 레고 블럭을 씀 goto(1,3,1) // 거북이 위치 (1,3,1) doit( SX SY SSX 4SX ) doit( 5SZ 5SX 4SX SSY SX ) doit( Suu ZZZ s ) goto(0,2,6,3) // 거북이 위치시키기 doit(s;0) // 벽을 없애고 그 자리에 !! beginxyz; if(z<0 || z>22) return // 중앙에 있는 사각탑 집합 { 정(0,8,5,3) && z<13 } 집합 { 정(0,8,13,1) && z<20 } 집합 { 정(0,8,20,23-z); 16 } 집합 { 정(0,8,13,3) && z<15;0 } 집합 { 정(0,8,13,4) && z<15;9 } //왼쪽에 있는 원형 탑 (대칭위치) 집합 { 원(-12,8,5,3) && z<8 } 집합 { 원(-12,8,8,1) && z<13 } 집합 { 원(-12,8,13,16-z) ;8} // 오른쪽에 있는 원형탑 (대칭위치) 집합 { 원(12,8,5,3) && z<8 } 집합 { 원(12,8,8,1) && z<13 } 집합 { 원(12,8,13,16-z) ;8} //성벽으로 가는 계단 (창의코딩) 집합 { 정(0,z+13,0,1) && z<4 }

정직구원과 같은 집합 명령은 조건제시법 명령이며, 한개 한개 블럭을 만들어 이어가는 doit 거북명령은 원소나열법 명령이다. 조건제시법은 방정식과 부등식 등으로 조건의 수식을 직접 쓰거나, 또는 정직구원체 LEGO 블럭과 같은 명령으로 쓸 수가 있다. 창의적인 코딩에서는 beginxyz 아래의 조건제시법 코드를 [beginxyz] 단추로 만들고, beginxyz 위에 쓰인 원소나열법 명령을  [실행] 단추로 융합시켜 만들 수 있다. 

이제 조건제시법만 사용해서 수학과 코딩을 창의적으로 융합시키며 자신의 끼와 꿈을 코딩수학으로 만들며 체험해보자 !! 예를 들어, 터북이랜드의 거북성에 예쁜 탑을 세워보자 (마인크래프트의 주인공이 스티브인 것 처럼, 터틀크래프트의 주인공을 터북이라고 부르며, 터북이는 닌자옷을 입은 거북에게 명령) . 아래 코드는 beginxyz 아래에 조건제시법 명령만 있기에  [beginxyz] 단추만 누른다 (beginxyz 위에 명령이 없기에 [실행] 단추를 누를 필요가 없다). 이 코드를 hanaone.com 주소에서 실행시키고 [VR] 단추로 만들어진 터북이 성으로 삼차원 VR 놀이를 해보자. 또한 hanaone.com 주소를 통해 3D 프린터로 뽑아서 스노우볼도 만들어보자.

 

참고로, 맨 위에 제시된 3차원 수학적 곡면는 각각의 z 층에서 x-y 절단면을 만들면 타원과 쌍곡선 등의 이차곡선이 그려진다. 마치 MRI 사진이 각각의 단층촬영을 모아 3차원 입체를 만들듯이, 각각의 z 층의 이차곡선을 모으면 아래와 같이 등위곡선이 그려진다. 이러한 수학적 구조도 3D 프린팅하며 고등학교 입체기하와 코딩을 융합하여 탐구하여보자.

다음은 중학교 2학년 피타고리스 정리를 3차원에 응용한 수학 작품이다.

 

LEGO 블럭 집합명령과 논리로 만드는 터틀크래프트 창의코딩

조건제시법과 원소나열법 코딩의 융합 ( 컴퓨팅 사고력 기반 창의코딩 ) 

 

게시판의 맨 처음에 제시된 터북성 건축물을 만드는 코드는 무엇일까? 또한 만든 것을 어떻게 hanaone.com 주소를 통해 3D 프린터로 뽑아서 스노우볼도 만들 수 있을까? 우선 터북성 건축물의 기둥과 난간을 집합명령과 doit 명령으로 만드는 방법을 각각 비교해서 탐구하고, 자신에게 맞는 방법으로 창의적으로 건축물을 코딩으로 만들자. 우선 난간을 만드는 2가지 방법을 비교하며 탐구하자. 아래 코드에서, beginxyz 위의 doit 명령과 beginxyz 아래의 집합명령 코드를 실행시키며 탐구하자.

goto(-10,10,1,) X='sss[cuuuttC]' doit( s[uuu] 6X ) // 위는 doit 난간 beginxyz; // 아래는 집합 난간 함수 f(a) { if(a==0) return 1 else return 0 } 집합 { 직(0,1,1, 9,0) && z<=1 + 2*f(x%3) ; 16 } 집합 { 직(0,1,4, 9,0) && z==4 }

위의 코드는 (일부러) 어려운 내용이다. 이처럼 doit 거북명령을 떠나 여러 수학적 표현으로도 난간을 만들 수 있다. 위의 코드에서 x%3 수식은 x의 값을 3으로 나눈 나머지를 나타낸다. 예를 들어, x=3 인 경우에는 x%3=0 이고 x=4 인 경우에는 x%3=1 이 된다.  f(x%3) 이란 먼저 나머지를 구하고, 그 나머지 값이 a 라면 함수 상자 f 에 a를 보내어 f(a) 값을 받아 오라는 것이다.     

함수 f(a) { if(a==0)  { return 1 }   else return 0  }

함수 상자 f : 만일 들어온 것이 0 이면 1을 내보내고, 아니면 0 을 내보낸다 !!

따라서, x=3 또는 x=6 이면 1+f(x%3) 값은 3 이고, x=4 또는 x=5 이면 1+f(x%3) 값은 1 이다. 즉 x가 3의 배수이면 1+f(x%3) 값은 3 이고, 아니면 값은 1 이다. 그런데 z<=1 + 2*f(x%3) 조건의 뜻은 z 층수를 1 + 2*f(x%3 이하로 하라는 것이기에, x 좌표가 3의 배수이면 층수는 3 이하, 아니면 층수는 1 이 된다. 따라서 위와 같이 16번 블럭으로 3의 배수만 올라간 요철 모양이 만들어진다. 중학교 이상에서 배우는 함수와 변수 그리고 함수값 개념이다 !!

다음은 기둥을 만드는 doit 원소나열법 코드와 집합명령 코드이다. 

X = '5s[5u]s[5u][l5u][r5u][s5u]' goto(-15,-15,0) // 좌표로 거북이동 item=4 반복 4 { doit( 5X L ) item=item+1 } beginxyz ; k=-5; 반복 3 { 집합{ 원(5,k,3,1) && z<7 ; 14 } 집합{ 원(k,5,3,1) && z<7 ; 15 } 집합{ 원(-5,k,3,1) && z<7 ; 16 } 집합{ 원(k,-5,3,1) && z<7; 17 } k=k+5 }

 기둥 만들기

기둥 만들기

 

 

 

X = '5s[5u]s[5u][l5u][r5u][s5u]' goto(-20,-20,0) // 좌표로 거북이동 반복 4 { doit( 5X L ; 16) } beginxyz ; k=-15; 반복 7 { 집합{ 원(-15,k,3,1) && z<5 ; 4 } 집합{ 원(15,k,3,1) && z<5 ; 5 } 집합{ 원(k,-15,3,1) && z<5 ; 6 } 집합{ 원(k,15,3,1) && z<5 ; 7 } ; k=k+5 }

아래와 같은 파리의 개선문과 에펠탑 등의 건축물을 만들어보자. 위의 코드는 양쪽에서 출입할 수 있는 개선문과 같은 구조를 만든다.

 

beginxyz ; 집합 { sqrt(x, 0.3*(z+15)) < 7 && abs(y)<10 ; 8 } 집합 { sqrt(y, 0.3*(z+15)) < 7 && abs(x)<10 ; 9 } 집합 { 정(0,0,1,8) && z<10 ; 16 }beginxyz ; if( z<0 || nemo(x,y) > 20 || z>50 ) return 0 집합 { 구( 0,0,48, 2 ) ; 6 } z=0.2*z 집합{ 구(10,0,10,9) && z<=10 && abs(y)<1 ; 8 } 집합{ 구(10,0,10,10) && z<=10 && abs(y)<1 ; 9 } z=5*z 집합 { abs(x)+abs(y)<=4 && (z==15 || z==16) ; 8 } 집합 { abs(x)+abs(y)<=7 && z<=9 && z>=7 ; 9 }

아래 코드를 수정하여 snowball 스노우볼을 만들자

//X = '5s[24u]s[24u][l24u][r24u][s24u]' //goto(-15,-15,0) // 좌표로 거북이동 //반복 4 { doit( 5X L ; 16) } //위는 goto 와 doit 으로 기둥 만들기 Y = '4s[uu4t]' // 지붕 난간의 모양 goto(-18,-18,17) // 난간 시작위치 반복 4 { doit( 9Y L ; 46 ) } goto(-16,-16,28) // 방향은 0 직각 반복 2 { doit( 8Y L 8Y L; 46 ) } goto(-18,-18,20,3) // 마지막 거북위치 beginxyz ; // 조건제시법 명령 시작 if(z<0) return 0; // 속도개선 (지하x) 집합 {정(0,z-5,3, 1) && z<17} 집합 {직(0,z-10,3, 1,3) && z<18; 0} 집합 {정(0,z-17,17, 1) && z<31} 집합 {직(0,z-22,17, 1,3) && z<33; 0} // 위는 계단, 바로 아래는 지붕 코드 집합 {정(0,0,0,20-z) && z<3 ; 46 } 집합 {정(0,0,15,35-z) && z<17 ; 47 } 집합 {정(0,0,25,43-z)&& z<33;47} 집합 {직(0,0,33,41-z,8) ; 8 } // 아래는 기둥을 만드는 반복 명령 k=-15; 반복 7 { 집합{ 원(-15,k,3,1) && z<25 ; 16 } 집합{ 원(15,k,3,1) && z<25 ; 16 } 집합{ 원(k,-15,3,1) && z<25 && k != 0 ; 16 } 집합{ 원(k,15,3,1) && z<25 ; 16 } ; k=k+5 }

위 코드를 먼저 [beginxyz] 단추로 집합 명령을 실행시키고, 이어서 [실행] 단추를 눌러서 beginxyz 위에 있는 거북명령을 실행시키세요. 다음과 같은 그림이 나옵니다. 이제 이 것으로 삼차원 VR 놀이와 3D 프린터로 뽑아서 스노우볼 (snowball) 안에 넣어서 작품을 만들어보세요.

 


위의 코드에서, beginxyz 바로 아래에 쓰여진  if( z<0 ) return 0  명령은 0층 아래의 지하 세계와 33층 위는 0 블럭 즉 빈 공간으로 두라는 것이다. 이와 같은 명령으로 블럭을 만들지 않는 빈 공간의 위치를 빨리 거북에게 알려주어 실행 속도를 높이려고 쓴 것이다. beginxyz 조건제시법은 약 210만개의 좌표에 블럭을 지정하여 만들기에 빨리 실행시키는 코딩 방법이 중요하다. 위의 코드에서 기둥을 만드는 코드가 가장 탐구의 대상이 되는데, 에서 기둥을 

X = '5s[24u]s[24u][l24u][r24u][s24u]' goto(-15,-15,0) // 좌표로 거북이동 반복 4 { doit( 5X L ; 16) } beginxyz ; // 조건제시법 명령 시작 if(z<0) return 0; // 속도개선 (지하x) goto(-10,-10,0) // 좌표로 거북이동 X = ' 5s[2u] ' 반복 4 { doit( 4X L ; 46 ) } beginxyz ; 집합 { nemo(x,y)==5 && z>0 && z<3 && ( abs(x)==abs(y) || x==0 || y==0 ) ; 37 }


 

if( z<6 ) { 집합 { nemo(x,y)<15 && nemo(x,y)>12 && z>3 ; 0 } 집합 { nemo(x,y)<16 && nemo(x,y)>11 && z < 6 - abs(x+y)%2 ; 16 } } 집합{원(0,0,1,7) && z<15} ; 집합 { 원(0,0,14,6) && z<20; 5} 집합{원(0,0,20,5) && z<24; z-19} ; 집합{ 원(0,0,24,29-z) ;16} 집합 {원(0,0,30,35-z) ; 6 } ; 집합 { 구(0,0,30,5) && z<30 ; 6 } 집합 {직(0,0,35,0,0) && z<41; 15 } 집합 {직(0,0,38,1,0) && z<39; 15 } // return 0 // 3D 프린트용 obj 경우

 또한 beginxyz 바로 아래에 다음과 같은 명령을 추가하면 동그란 성벽으로 둘러쌓인 건축물을 만들 수 있습니다.

beginxyz ;    // 조건제시법 명령 시작
if(z<0) return 0;  // 속도개선 (지하층 NO)
if(z<6) {
  집합 { sqrt(x,y)< 19 && sqrt(x,y) > 16 &&
             z> 3 ; 0 } 
  집합 { sqrt(x,y)< 20 && sqrt(x,y) > 15 &&
             z < 6-  abs(x+y)%2  ; 46 }
}

코딩언어에서 a%b 란 a를 b로 나눈 나머지를 뜻한다. 따라서 각각의 좌표 (x,y) 에 대해 abs(x+y)%2 의 값은 엑스좌표와 와이좌표를 더한값의 절대값이 짝수이면 0 이고 홀수이면 1이 된다 (참고: 자바스크립트에서는 -3%2 = -1 이지만, 파이썬에서는 -3%2 = 1 이 된다. 그래서 자바스크립트에서는 abs(a)%b 로 계산). 이것을 이용하여 각 위치에서  z < 6-  abs(x+y))%2  에 의해 성벽을 쌓으면 짝수 위치는 6-0 으로 홀수 위치에서는 6-1 로 높이가 달라져 요철이 만들어지며 성벽 모양이 만들어진다.

위의 명령과 실행 결과를 이해하고, 아래의 명령을 실행시켜 보자.

goto(-10,-10,0) // 좌표로 거북이동 X = ' 5s[2u] ' 반복 4 { doit( 4X L ; 46 ) } beginxyz ; 집합 { nemo(x,y)==5 && z>0 && z<3 && ( abs(x)==abs(y) || x==0 || y==0 ) ; 37 }

 

설명

beginxyz ; 집합 { 정(20,20,1, 10-z) && z>0 } 집합 { nemo(x,y) <= 10-z && z>0 ; 46 }

지붕 만들기

 

지붕 만들기

beginxyz ; 집합 { 정(z,5,1, 1) && z<5 } 집합 { 정(-5,z,1, 1) && z<5 ; 2 } 집합 { 정(-z,-5,1, 1) && z<5 ; 6 } 집합 { 정(5,-z,1, 1) && z<5 ; 16 }

계단 만들기

계단 만들기

 

(( 로마 판테온 신전 ))

 

 

아래의 코드를 기반으로 만들어보자.

// 판테온 신전의 기둥을 만든다 // 판테온 신전의 내부를 만든다 beginxyz ; // 조건제시법 명령 시작 if(z<0) return 0; // 속도개선 (지하x) 집합 {직(0,-9,0,20-z,25-z) && z<3 ; 6 } 집합 {직(0,-10,1,5,17) && z<10 ; 0 } 집합 {원(0,0,1,13) && z<15 ; 0 } 집합 {원(0,0,1,15) && z<15 ; 16 } 집합 {구(0,0,15,13) && z>14 ; 0 } 집합 {원(0,0,28,4) && z<32 ; 0 } 집합 {구(0,0,15,15) && z>14 ; 9 } 집합 {직(0,-5,1,10,15) && z<15 ; 16 } 집합 {직(0,-25,10, 2*(15-z), 5) } // return 0 // 3D 프린트용 obj 경우

위 코드를 발전시켜 다음과 같은 그리스의 산토리니 또는 파르테논 신전 등 여러 건축물을 만들어보자

 LEGO 블럭으로 로마의 콜로세움이나 판테온 신전과 같은 고대 건축물을 만들 수 있듯이, 터틀크래프트에서는 정직구원 LEGO 블럭코딩을 통해 만들고, 3D 프린터와 VR 등으로 즐기는 창의코딩이 가능하다. 이제 고대 건축물을 창의코딩으로 만들어보자. 

 

 

 

 

 

그리이스 산토리니 섬 

첨부