보석은 예쁘죠
보석 한개보다 좋은 건 여러개의 보석이죠
이제 우리는 loop을 사용해서 여러개의 보석을 만들줄 알죠
for loop을 사용해 한 줄에 12개의 보석을 만들어보죠
왼쪽에서 오른쪽으로요
이렇게요
for 안에 변수 i = 0; i는 12보다 작고; i++
이 줄을 복사해서 for문 안에다가 붙여넣어요
이렇게 하면 12개의 보석이 맨 윗줄 한 칸에 겹쳐서 나와요
근데 우리는 화면을 가로질러서 나오게하고 싶어요
그렇다는 건 x값이 바꿔야한다는거죠
지금은 36인데, 매번 값이 다르게 나오게하고 싶어요
i값을 이용해서 하면 됩니다
간단하게 i 곱하기 36 이렇게 하면
첫번째 값은 0이고, 다음은 36, 72....
이제 한 줄의 보석이 나오네요
인디아나존스나 알라딘 영화를 보면
보석을 발견할 때
보통 이렇게 한 줄의 보석만을 발견하지 않죠
보석 더미를 발견하죠
그럼 어떻게 하면 보석을 쭈욱
스크린 밑에까지 나오게 할 수 있을까요?
우선 이 for loop을 복사 붙여넣기 한 후
y를 매번 바꿔줍니다
60 그 다음에는 90
이제 보석 3줄이 생겼네요
하지만 이 방법이 좋지 않은게
매줄마다 복사 붙여넣기 한 후 값을 바꿔줘야되요
이렇게 반복적인 코드를 작성하면
"loop을 사용해야지" 라는 생각이 들지만
이미 loop을 쓰고 있어요
그렇다면 이런 반복적인 코드 작성의 해결책은 뭘까요?
Nested for loop (겹쳐진 for loop) 이라는 것이 있습니다 loop 안에 loop 입니다
바깥쪽 loop을 만든 후에
이건 스크린 밑으로 내려가는 걸 해주는 loop이고
안쪽 loop은 보석 한 줄을
왼쪽에서 오른쪽으로 나타나게 합니다
어떻게 하는지 보여드리죠
변수 i를 사용하고 있으니 다른 변수 j를 사용하죠
변수 j = 0; j는 13보다 작고; j++
이게 위에서 아래로 내려가는 것을 담당하는 저희의 바깥쪽 loop이 됩니다
기존에 사용했던 for loop을 안에다가 넣습니다
들여쓰기를 고치고, 기존의 것을 지웁니다
이렇게하면 한 줄에 똑같은 보석이 겹치게 나옵니다
그러니 y의 값이 변하게 해줘야겠죠
기존의 것을 그대로 가져왔기 때문에
y값이 항상 90입니다
매 행마다 y의 값이 바뀌게 하고 싶어요
x는 i값을 이용하니, y는 j를 이용하게 합니다
x에서 했던 방식대로 j 곱하기 30을 합니다
짜잔! 멋집니다.
다시 우리가 한 것을 살펴보죠
바깥쪽 loop은 j가 13이 될 때까지 실행하며
매번 안쪽 loop을 실행시킵니다
안쪽 loop은 i가 12이 될 때까지 실행하고
매번 i와 j를 이용하여 x와 y위치에 보석을 그립니다
따라서 i의 값이 j의 값보다 훨씬 더 자주 변하죠
더 잘 이해하기 위해 실제로 i 값과 j 값이 변하는 것을 시각적으로 보도록 합시다
이미지 출력 부분을 주석처리하고
색이 나오게 한 후
text 명령어를 이용해 j값이 보이게하죠
이 위치에 j가 나타나도록 입력합니다
이제 j가 0부터 12까지 나오는게 보이네요
이건 보석의 행의 위치와 같죠
이제 i의 값이 어떻게 변해 가는지를 보도록 합시다
다른 색깔이 나오게 한 다음
i를 입력해서
x 값이 화면의 가로로 나오게 x값이 변하게 해줍니다
y에도 똑같이 해주고요
i가 0부터 11까지 나오는게 보이네요
i가 더 자주 변하는 걸 알 수 있죠
그리고 이 줄의 코드가 윗줄의 코드보다 더 많이 실행됩니다
왜냐하면 이 줄은 안쪽 loop이 실행될때마다 실행되는데
윗 줄의 코드는 바깥loop이 실행될때만 실행되니까요
i와 j값을 출력해봤는데요
nested for loop을 더 잘 이해하셨기를 바랍니다
다시 보석 문제로 돌아가보죠
nested for loop에서 많은 걸 할 수 있는데요
이 세상에 있는 것들 중에서
2차원 무늬들은 체스보드나 퀼트
미국 국기의 별, 멋진 패턴, 벽지모양 등이 있는데
우선 이 코드를 이용해
이미지를 바꿔보도록 하죠
하트모양이 나오도록 해보죠
짠!