코딩배우기

스크래치 코딩 2

오미자컴 2023. 8. 18. 23:01

사각형을 40도씩 방향을 바꾸면서 한 바퀴만큼 그리려면 어떻게 해야 하나요?
9번 반복합니다. 왜?
한 바퀴인 360도 나누기 40도는 9이므로
길이가 100인 직선 그리기를 90도씩 방향을 바꾸면서 4번 반복해 사각형을 그립니다. 이 반복을 다시 9번 합니다. 이중 루프.

이중 루프 코딩


사각형을 일정 각도씩 방향을 바꾸면서 한 바퀴만큼 그리려면 어떻게 해야 하나요?
‘반복 횟수’ 변수를 만들고, ‘반복 횟수’ 변수를 1로 정합니다.
20번 반복합니다. 
만약 360 나누기 ‘반복횟수’의 나머지가 0이면 반복횟수만큼 반복하도록 합니다.
시계 방향으로 360도 나누기 ‘반복횟수’도 돌기를 합니다.
반복횟수번 반복하기가 끝나면, 반복횟수를 1만큼 바꿉니다. 
펜을 올리고, x는 -200부터 200사이의 난수로, y는 -140부터 140사이의 난수로 이동한 후, 다시 펜을 내립니다.

일정 각도 돌며 사각형 그리기 코딩 1


일정 각도 돌며 사각형 그리기 코딩 2


함수란 뭔가요?
프로시저(procedure)라고 하는데 프로그램의 일부 기능을 담당하는 연속적인 문장들의 묶음입니다
미리 만들어 놓은 처리 절차를 호출하여 사용합니다
스크래치에선 ‘내 블록’으로 필요한 함수를 만들어 사용합니다. ‘내 블록’ 카테고리를 클릭해 ‘블록 만들기’ 단추를 클릭하고, 함수 이름을 정합니다. 이때 매개변수(입력값)을 지정해 줄 수 있습니다.
내 블록을 만들면, 호출할 블록도 함께 만들어집니다. 호출할 블록에서 인수(입력값)을 넣으면 함수인 내 블록에 매개변수로 들어갑니다.

내 블록을 만들 때 보이는 ‘입력값 추가하기’란 뭔가요?
입력값이란 처리의 재료가 되는 값입니다. 보통 ‘인수’라고 합니다. 
왜 입력값을 추가하나요?
입력값을 바꿔 호출함으로써 하나의 블록에 여러 가지 처리를 시킬 수 있습니다 

입력값 사용의 예


고양이를 클릭했을 때 크기가 각각 다른 별을 그리고 싶은데 어떻게 해야 하나요?
내 블록으로 ‘별’을 만드는데 입력값(‘크기’)을 하나 넣을 수 있게 합니다
‘별 크기 정의하기’ 블록 아래에 별을 그리는 코딩을 합니다
고양이 크기를 30%로 줄이고 난수로 x좌표는 -120에서 120까지 y좌표는 -100에서 100까지 위치로 이동하여 펜을 내리고 색깔을 바꿔가며 ‘별’ 블록이 입력값으로 넘겨준 크기만큼 움직이면서 시계 반대방향(혹은 시계방향, 모양이 조금 다릅니다)으로 144도 돌며 5번 반복하여 그립니다.

별 그리기 코딩


별 그리기 난수 코딩


함수를 사용하는 장점은?
코딩이 간결해집니다
같은 처리를 재이용할 수 있습니다
입력값으로 처리를 변경할 수 있습니다

‘스페이스 키를 눌렀을 때’ 사용자가 입력한 다각형을 그리려면 어떻게 해야 하나요?
몇 각형으로 그릴지 묻고 기다리기
‘다각형’ 블록을 만들고 ‘대답’을 입력값으로 받습니다
변수 ‘각도’를 만들고, ‘각도’를 ‘360/모서리 수’로 정합니다
변수 ‘반지름’을 만들고, ‘대답’에 따라 ‘반지름’을 정합니다
 ‘반지름’만큼 움직이고, ‘각도’만큼 시계 반대 방향으로 회전하여 ‘모서리 수’만큼 반복합니다

110각형 이상이 되면 다각형이 일그러지는데 어떻게 해야 하나요?
‘길이’ 매개 인수를  (5/대답) * 100으로 합니다.
5각형 기준으로 길이를 100으로 한 것입니다.
시간은 3각형 기준으로 1초 : 3/대답


병렬 처리란 뭔가요?
여러 기능을 동시에 처리하는 것입니다
멀티 태스킹(multi-tasking) : 여러 프로그램 실행
멀티 스레딩(multi-threading) : 프로그램 하나가 여러 작업을 동시에 처리 
초록 깃발을 클릭했을 때 이벤트가 발생하면서 고양이가 야옹 소리를 무한 반복하기 시작합니다. 스페이스 바를 눌렀을 때 이벤트가 발생하면서 고양이가 마우스 포인터를 무한히 따라가기 시작합니다.

병렬처리


10초 후에 멈추게 하려면?


컴퓨팅 사고력이란 뭔가요?
Computational thinking. 모든 문제에 컴퓨터 과학의 기본 개념들을 적용하고 문제 해결을 위해 창의적으로 논리적으로 생각하며 서로 협동하는 자세로 포기하지 않고 오류를 해결하는 사고 방식.
추상화 : 공통되는 특성이나 속성을 추출하고(일반화), 불필요한 요소를 없앰(캡슐화). 무지개 색깔을 모아 저장하는 리스트. 
분해 : 처리 가능한 수준의 작업 단위가 될 때까지 계속 쪼개는 작업. 해결 가능한 수준의 문제 단위까지 작게 쪼갬. 모듈화. 함수.
패턴인식 : 인공지능의 한 분야. 사물을 구별할 수 있는 특징들을 모아 패턴을 정의. 2로 나누었을 때 나머지가 0이면 짝수이고 아니면 홀수인 패턴.
알고리즘 : 9세기 페르시아의 수학자인 알-콰리즈미의 이름에서 유래. 어떤 문제를 해결하기 위한 방법. 순서도. 동전 100개 중 무게가 가벼운 동전 1개가 섞여 있습니다. 이 동전을 양팔 저울을 이용해 찾으려면?
동전들을 절반씩 나눠 저울에 달아 가벼운 쪽만 계속 선택.

숫자 맞추기 게임을 만들려면 어떻게 해야 하나요?
사용자가 고양이가 1에서 99 사이에 생각해둔 숫자를 입력하도록 합니다
‘정답’ 변수를 만들고 1에서 99 사이의 난수로 정합니다. 이 ‘정답’이 생각해둔 숫자입니다.
고양이는 사용자가 입력한 숫자가 생각해둔 숫자보다 큰지 작은지 말해줍니다. 7번 반복합니다.
맞추면 축하하는 말을 하고 프로그램을 멈춥니다
7번 안에 못 맞추면 다음 기회에 다시 해보라는 말을 하고 프로그램을 멈춥니다

숫자 맞추기 게임 코딩


홀짝 게임을 어떻게  만들까요?
홀과 짝 중에 하나를 입력하게 합니다.
야옹이가 1에서 99사이 난수 중 하나를 선택하게 하고 이를 2로 나누어 나머지가 0이면 짝이라고 말하게 하고, 아니면 홀이라고 말하게 합니다.
사용자가 맞추면 축하한다는 말을 하게 합니다.
‘q’를 입력할 때까지 게임을 계속합니다.

홀짝 게임 코딩 1


홀짝 게임 코딩 2


홀짝 게임 코딩 3


홀짝 게임 코딩 다른 버전 1


홀짝 게임 코딩 다른 버전 2


사용자가 q 눌렀을 때, 시간도 멈추려면?


재귀 호출이란 무엇인가요?
프로시저(함수)가 자기 자신을 호출하는 것
조건을 만족하면 재귀 호출을 중단해야 합니다
스크래치에선 변수를 사용하여 재귀호출을 대신합니다
일례로 최종 결과값 변수를 만들고 함수를 호출할 때마다 결과값을 변경하다가 더 이상 재귀호출이 발생하지 않을 때 최종적인 결과값을 갖도록 합니다

임의의 양의 정수까지 어떻게 더하나요?
변수 ‘결과값’을 0으로 정하고 
사용자로부터 얼마까지 더하고 싶은지 입력을 받습니다
‘다더하기’ 함수(나만의 블록)을 만들고 입력값으로 ‘매개변수’를 넣습니다. ‘대답’을 매개변수로 넣습니다.
먼저 결과값을 ‘대답(매개변수)’만큼 바꿉니다. 예를 들어 대답이 3이었으면, 결과값은 3이 됩니다.
‘매개변수’에서 1을 뺀 값, 그러니까 2만큼 결과값을 바꿉니다. 결과값은 재귀호출이 되어 3에다가 다시 2만큼 더하여 5가 됩니다. 
‘매개변수’가 1이면 결과값에 1만큼을 더 더합니다.
대답한 3 + 2 + 1을 한 셈입니다

임의의 양의 정수까지 더하기 코딩


복제란 뭔가요?
Cloning. 스프라이트를 복사하는 것. 복제된 스프라이트를 가리키기도 하며 클론이라고도 합니다.
복제된 클론은 원래 스프라이트와 스크립트를 공유하지만, 개별적으로 동작합니다.
복제 기능을 이용하려면,
‘제어’ 카테고리에서 ‘나 자신 복제하기’ 블록을 사용합니다
‘복제되었을 때’ 이벤트 블록은 복제 되었을 때 그 다음에 이어지는 스크립트를 실행합니다.
‘이 복제본 삭제하기’ 블록은 실행한 클론을 삭제.
‘멈추기 모두’ 블록을 사용하면, 모든 복제가 삭제.

키보드로 움직이기 코딩


이벤트란 무엇인가요?
마우스 클릭이나 키보드 누르기 등 프로그램에 뭔가를 시키는 것(신호, 사건)을 말합니다
녹색 깃발을 클릭하면, 스크래치를 시작하는 신호를 줍니다.
키 입력, 스프라이트 클릭, 무대 클릭 등 여러 이벤트가 있습니다. 이들 이벤트는 병렬 처리 됩니다.
메시지를 전달하고 받는 것도 이벤트입니다

메시지란 무엇인가요?
스프라이트나 배경 사이에서 통신하는 기능입니다
보내는 쪽과 받는 쪽이 있고
받는 쪽은 그 메시지가 신호가 되어 스크립트를 실행합니다
보내는 쪽 : ‘메시지1 신호 보내기’ 블록, ‘메시지1 신호 보내고 기다리기’ 블록
받는 쪽 : ‘메시지1 신호를 받았을 때’ 이벤트 블록
메시지를 여러 스프라이트에 동시에 보낼 수 있습니다

메시지는 어떻게 만드나요?
이벤트 블록 카테고리에서 ‘메시지1 신호 보내기’ 블록을 가져와 ‘메시지1’를 클릭하고 펼침 메뉴에서 ‘새로운 메시지’ 클릭
새로운 메시지로 적절한 이름을 정하고
그 이름으로 만들어진 메시지 신호 보내기 블록을 활용합니다

메시지 만들기


동그라미를 따라다니는 네모를 재미 있게 게임으로 만들려면 어떻게 해야 하나요?
빨간 동그라미와 파란 네모를 그립니다
동그라미는 벽에 닿지 않게 반복적으로 난수 위치로 이동합니다. 네모가 닿으면, 점수를 얻고, 에너지를 0.2초 얻으며, 다시 난수 위치로  이동합니다.
네모는 4만큼 계속 움직이도록 합니다(숫자가 클 수록 난이도가 높습니다). 방향키를 누르면 그 방향으로 4만큼 움직이게 합니다. 벽에 닿으면, x:0 y:0 위치로 이동하고, 에너지가 0이 되고, 점수를 1점 잃습니다. 계속 자기 복제를 합니다. 자기 복제를 하면 에너지만큼의 시간 동안 자신을 복제한 후, 자신을 삭제합니다.
네모는 동그라미에 닿으면 에너지를 얻어 네모가 길어집니다. 벽에 닿으면 에너지가 없어져 짧아집니다.
100초 동안 게임을 합니다.

동그라미 코딩


네모 코딩 1


네모 코딩 2


배경 코딩