본문 바로가기
Programming/LOGO

LOGO : 변수(Variables) - 9, Coloring (1)

by The Programmer 2024. 4. 26.

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

 

위 코드의 실행 결과는 다음과 같습니다.

 

[ 그림 9 - 1. 도형의 컬러링 (1) ]

 

 

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 소스 코드 파일입니다.

Ch_03_Variable_Ex_009_Circle_v2_.lgo
0.00MB

 

 

 

Happy Programming!^.^;