1. Introduction
여러가지 도형에 색깔을 칠해보겠습니다. 다음 사항들을 학습하는데 주안점이 있습니다. 7 개의 원들을 서로 이어붙이기!
1) output
2) if
3) print
4) setFloodColor
5) fill
6) 직접 원 그리기.
2. Code
코드가 약간 긴 편이지만, 그렇게 어려운 코드는 없어 보입니다. ^.^;
to cBLUE
output [ 0 0 255 ]
end
to cDEEPBLUE
output [ 0 0 128 ]
end
to cGREEN
output [ 0 255 0 ]
end
to circle1
repeat 360 [ fd :cSide rt :cAngle ]
end
to circle7
repeat 7 [
if repCount=1 [ setFloodColor cRED ]
if repCount=2 [ setFloodColor cORANGE ]
if repCount=3 [ setFloodColor cYELLOW ]
if repCount=4 [ setFloodColor cGREEN ]
if repCount=5 [ setFloodColor cBLUE ]
if repCount=6 [ setFloodColor cDEEPBLUE ]
if repCount=7 [ setFloodColor cPURPLE ]
circle1 fillColor move1
print repCount ;; special variable, <repCount>.
]
end
to cORANGE
output [ 255 128 0 ]
end
to cPURPLE
output [ 150 90 255 ]
end
to cRED
output [ 255 0 0 ]
end
to cYELLOW
output [ 255 255 0 ]
end
to fillColor
pu rt 90 fd 5 pd
fill
pu back 5 lt 90 pd
end
to main
setup
circle7
ht
end
to move1
pu rt 90 fd 2*:r lt 90 pd ;; go to next circle.
end
to setup
make "cSide 1
make "cAngle 1
make "r 57.7 ;; why? Is this correct?
Window Home CS PPT PD ST
pu lt 90 fd 480 rt 90 pd
end
3. Result
위 코드의 실행 결과는 다음과 같습니다.
4. Notes
1) output : 함수 내부에서 사용되어 파라미터로 사용된 값(여기서는 output [ 0 0 255 ]에서 처럼 output 바로 다음에 오는 항목을 의미함, [ 0 0 255 ]를 의미함)을 그 함수의 반환값으로 내어 놓습니다. C언어 계열 프로그래밍 언어에서의 return의 역할과 비슷합니다.
2) if : 조건문을 표현합니다. 조건으로 주어진 표현식에 대해서 진위 검사를 거쳐서 참True일 경우에 블록 [ ... ] 명령어 리스트를 실행할 수 있습니다. 비슷한 명령어로 ifelse도 있습니다. (도움말 index 참고할 것.)
3) print : 특정 변수값이나 문자열을 출력합니다. 문자열일 경우, 블록 명령어 리스트로 출력할 수 있습니다. 약간의 차이는 있지만 출력용으로 비슷한 명령어로 label 명령어가 있습니다. (도움말 index 참고할 것.)
4) setFloodColor : 면 색을 결정합니다. 블록 리스트 형태로 파라미터를 받습니다. 예,
setFloodColor [ 255 0 0 ] ;; 빨강색
칠하고자 하는 면 색상을 결정만 하고 실제로 색을 칠하지는 않습니다.
참고. setFC, setPenColor, setPC
5) fill : 미리 결정된 색상으로 실제로 면에 색을 칠합니다. 거북이의 현재 위치를 기준으로 색상을 칠합니다. 그 위치가 닫힌 도형 내부이어야 합니다.
◈ ◈ ◈ 생각해 볼 문제 ◈ ◈ ◈
1. 위 코드 중, setup 함수에 보면 다음 코드가 있습니다.
make "r 57.7
변수 r의 값을 57.7로 만드는데,
1) 이 값은 무슨 뜻이며,
2) 이 값은 대체 어떻게 결정된 것일까요?
2. circle7 함수에는 다음 코드가 있습니다.
if repCount=1 [ setFloodColor cRED ]
이 코드 뒷부분 [ setFloodColor cRED ] 부분은 cRED 함수의 내용을 직접 옮겨와서 다음과 같이 다시 작성될 수도 있습니다.
[ setFloodColor [ 255 0 0 ] ]
내장 함수 setFloodColor 파라미터로 직접 색상값 숫자들을 직접 사용하지 않고 함수 형태로 대응해 간접적으로 사용할 때, 왜 이렇게 할까요? 장단점 같은 것이 있을까요?
3. 다음 코드처럼 원을 그릴 때, 원의 크기 결정은 어떻게 할 수 있나요?
to circle1
repeat 360 [ fd :cSide rt :cAngle ]
end
5. Ref.
1) FMSLogo 공식 도움말.
6. Files
FMSLogo 소스 코드 파일입니다.
Happy Programming!^.^;
'Programming > LOGO' 카테고리의 다른 글
LOGO : 변수(Variables) - 11 - 눈꽃송이SnowFlake. (0) | 2024.05.12 |
---|---|
LOGO : 변수(Variables) - 10 - ColorBox 120 (0) | 2024.04.28 |
LOGO : 변수(Variables) - 8 (0) | 2024.04.21 |
LOGO : 변수(Variables) - 7 (0) | 2024.04.14 |
LOGO 변수(Variables) - 6 (0) | 2024.03.25 |