2509회 채점자료 업데이트

This commit is contained in:
2025-10-01 17:32:30 +09:00
parent b2f99b92d0
commit 99250cd161
9 changed files with 935 additions and 8 deletions

View File

@@ -47,8 +47,8 @@ def copy_ent_files(source_root, target_root):
# 사용법 # 사용법
source_directory = r"D:\project\data\CAS_제2508회 정기\답안파일\(전체답안)1교시2교시나눔\B형" # 원본 디렉토리 경로 source_directory = r"D:\project\Entry\Entry-Scoring\시험자료\2509\A" # 원본 디렉토리 경로
target_directory = r".\ent\2508_CAS_2_B" target_directory = r".\ent\2509_CAT_3_A"
# target_directory_a = r"./output/A" # '1교시'의 타겟 경로 # target_directory_a = r"./output/A" # '1교시'의 타겟 경로
# target_directory_b = r"./output/B" # '2교시'의 타겟 경로 # target_directory_b = r"./output/B" # '2교시'의 타겟 경로
# target_directory_c = r"./output/C" # '3교시'의 타겟 경로 # target_directory_c = r"./output/C" # '3교시'의 타겟 경로

View File

@@ -50,8 +50,8 @@ def process_ent_files(ent_dir, output_dir):
# 실행 예 # 실행 예
if __name__ == "__main__": if __name__ == "__main__":
# test_names = ["2507_CAT_3_A"] test_names = ["2509_CAT_3_A"]
test_names = ["2508_CAS_2_A","2508_CAS_2_B"] # test_names = ["2508_CAS_2_A","2508_CAS_2_B"]
for test_name in test_names: for test_name in test_names:
ent_dir = f".\\ent\\{test_name}" ent_dir = f".\\ent\\{test_name}"
output_dir = f".\\output\\{test_name}" output_dir = f".\\output\\{test_name}"

Binary file not shown.

557
correct/2509_CAT_3_A.json Normal file
View File

@@ -0,0 +1,557 @@
{
"1-1": {
"type": "scene",
"ele": "$..objects[?(@.name=='화산')]",
"points": 2,
"desc": "문제 1/화산섬/[배경] 이름 설정/이름을 '화산'으로 변경하기",
"sort": 11
},
"1-3": {
"type": "scene",
"ele": "$..objects[?(@.name=='불')]",
"points": 2,
"desc": "문제 1/불(2)/[개체] 이름 설정 1/이름을 '불'로 변경하기",
"sort": 13
},
"1-4": {
"type": "scene",
"ele": "$..objects[?(@.name=='공룡')]",
"points": 2,
"desc": "문제 1/공룡/[개체] 이름 설정 2/이름 변경 없음",
"sort": 14
},
"1-5": {
"type": "scene",
"ele": "$..objects[?(@.name=='알')]",
"points": 2,
"desc": "문제 1/계란/[개체] 이름 설정 3/이름을 '알'로 변경하기",
"sort": 15
},
"1-6": {
"type": "scene",
"ele": "$..objects[?(@.name=='바위')]",
"points": 2,
"desc": "문제 1/바위(4)/[개체] 이름 설정 4/이름을 '바위'로 변경하기",
"sort": 16
},
"2-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'불')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.14,
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": [
"locate_xy",
"120",
"90"
],
"points": 2.14,
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '120' y: '90' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "130",
"points": 2.14,
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '130' 으로 정하기"
},
{
"ele": [
"$[0][3].type",
"$[0][3].params[0]"
],
"answer": [
"repeat_inf",
null
],
"points": 2.14,
"desc": "문제 2/불/반복/계속 반복하기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][0].type",
"$[0][3].statements[0][0].params[0].type"
],
"answer": [
"change_to_some_shape",
"get_pictures"
],
"points": 2.14,
"desc": "문제 2/불/[반복]의 세부 동작 1/'불(2)_3' 모양으로 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][1].type",
"$[0][3].statements[0][1].params[0].params[0]"
],
"answer": [
"wait_second",
"0.5"
],
"points": 2.14,
"desc": "문제 2/불/[반복]의 세부 동작 2/'0.5' 초 기다리기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][2].type",
"$[0][3].statements[0][2].params[0].type"
],
"answer": [
"change_to_some_shape",
"get_pictures"
],
"points": 2.14,
"desc": "문제 2/불/[반복]의 세부 동작 3/'불(2)_1' 모양으로 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][3].type",
"$[0][3].statements[0][3].params[0].params[0]"
],
"answer": [
"wait_second",
"0.5"
],
"points": 2.14,
"desc": "문제 2/불/[반복]의 세부 동작 4/'0.5' 초 기다리기",
"type": "list"
}
],
"sort": 102
},
"3-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'공룡')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.14,
"desc": "문제 2/공룡/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": [
"locate_xy",
"0",
"-20"
],
"points": 2.14,
"desc": "문제 2/공룡/[시작]의 세부 동작 1/x: '0' y: '-20' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[*].params",
"answer": [
"공룡알을 구하자",
"1"
],
"points": 2.14,
"desc": "문제 2/공룡/[시작]의 세부 동작 2/'공룡알을 구하자' 를 '1' 초 동안 '말하기'"
},
{
"ele": [
"$[0][3].type",
"$[0][3].params[0]"
],
"answer": [
"repeat_inf",
null
],
"points": 2.14,
"desc": "문제 2/공룡/반복/계속 반복하기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][0].type",
"$[0][3].statements[0][0].params[0].type",
"$[0][3].statements[0][0].params[0].params[0]"
],
"answer": [
"_if",
"is_press_some_key",
"38"
],
"points": 2.14,
"desc": "문제 2/공룡/만일 1/만일 '위쪽 화살표' 키가 눌러져 있는가? 라면",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][0].statements[0][0].type",
"$[0][3].statements[0][0].statements[0][0].params[0].params[0]"
],
"answer": [
"move_y",
"5"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 1]의 세부 동작/y 좌표를 '5' 만큼 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][1].type",
"$[0][3].statements[0][1].params[0].type",
"$[0][3].statements[0][1].params[0].params[0]"
],
"answer": [
"_if",
"is_press_some_key",
"40"
],
"points": 2.14,
"desc": "문제 2/공룡/만일 2/만일 '아래쪽 화살표' 키가 눌러져 있는가? 라면",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][1].statements[0][0].type",
"$[0][3].statements[0][1].statements[0][0].params[0].params[0]"
],
"answer": [
"move_y",
"-5"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 2]의 세부 동작/y 좌표를 '-5' 만큼 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][2].type",
"$[0][3].statements[0][2].params[0].type",
"$[0][3].statements[0][2].params[0].params[0]"
],
"answer": [
"_if",
"is_press_some_key",
"37"
],
"points": 2.14,
"desc": "문제 2/공룡/만일 3/만일 '왼쪽 화살표' 키가 눌러져 있는가? 라면",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][2].statements[0][0].type",
"$[0][3].statements[0][2].statements[0][0].params[0].params[0]"
],
"answer": [
"move_x",
"-5"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 3]의 세부 동작/x 좌표를 '-5' 만큼 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][3].type",
"$[0][3].statements[0][3].params[0].type",
"$[0][3].statements[0][3].params[0].params[0]"
],
"answer": [
"_if",
"is_press_some_key",
"39"
],
"points": 2.14,
"desc": "문제 2/공룡/만일 4/만일 '오른쪽 화살표' 키가 눌러져 있는가? 라면",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][3].statements[0][0].type",
"$[0][3].statements[0][3].statements[0][0].params[0].params[0]"
],
"answer": [
"move_x",
"5"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 4]의 세부 동작/x 좌표를 '5' 만큼 바꾸기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][4].type",
"$[0][3].statements[0][4].params[0].type"
],
"answer": [
"_if",
"reach_something"
],
"points": 2.14,
"desc": "문제 2/공룡/만일 5/만일 '불' 에 닿았는가? 라면",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][4].statements[0][0].type",
"$[0][3].statements[0][4].statements[0][0].params[0].params[0]",
"$[0][3].statements[0][4].statements[0][0].params[1]"
],
"answer": [
"dialog",
"앗 뜨거워!",
"speak"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 5]의 세부 동작 1/'앗 뜨거워!' 를 '말하기'",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][4].statements[0][1].type",
"$[0][3].statements[0][4].statements[0][1].params[0].params[0]"
],
"answer": [
"wait_second",
"1"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 5]의 세부 동작 2/'1' 초 기다리기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][4].statements[0][2].type",
"$[0][3].statements[0][4].statements[0][2].params[0]"
],
"answer": [
"stop_object",
"all"
],
"points": 2.14,
"desc": "문제 2/공룡/[만일 5]의 세부 동작 3/'모든' 코드 멈추기",
"type": "list"
}
],
"sort": 110
},
"4-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'알|계')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.14,
"desc": "문제 2/알/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": "$[0][1].params[0].params[0]",
"answer": "50",
"points": 2.14,
"desc": "문제 2/알/[시작]의 세부 동작 1/크기를 '50' 으로 정하기"
},
{
"ele": [
"$[0][2].type",
"$[0][2].params[0].params[0]"
],
"answer": [
"rotate_absolute",
"270"
],
"points": 2.14,
"desc": "문제 2/알/[시작]의 세부 동작 2/방향을 '270°' 로 정하기",
"type": "list"
},
{
"ele": [
"$[0][3].type",
"$[0][3].params[0]"
],
"answer": [
"repeat_inf",
null
],
"points": 2.14,
"desc": "문제 2/알/반복/계속 반복하기",
"type": "list"
},
{
"ele": "$[0][3].statements[0][0].type",
"answer": "show",
"points": 2.14,
"desc": "문제 2/알/[반복]의 세부 동작 1/모양 보이기"
},
{
"ele": [
"$[0][3].statements[0][1].type",
"$[0][3].statements[0][1].params[0].params[1].params[0]",
"$[0][3].statements[0][1].params[0].params[3].params[0]",
"$[0][3].statements[0][1].params[1].params[1].params[0]",
"$[0][3].statements[0][1].params[1].params[3].params[0]"
],
"answer": [
"locate_xy",
"55",
"160",
"5",
"10"
],
"points": 2.2,
"desc": "문제 2/알/[반복]의 세부 동작 2/x: '55 부터 160 사이의 무작위 수' y: '5 부터 10 사이의 무작위 수' 위치로 이동하기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][2].type",
"$[0][3].statements[0][2].params[0].params[0]",
"$[0][3].statements[0][2].params[1].params[1].params[0]",
"$[0][3].statements[0][2].params[1].params[3].params[0]",
"$[0][3].statements[0][2].params[2].params[0]"
],
"answer": [
"move_xy_time",
"2",
"-200",
"200",
"-140"
],
"points": 2.2,
"desc": "문제 2/알/[반복]의 세부 동작 3/'2' 초 동안 x: '-200 부터 200 사이의 무작위 수' y: '-140' 만큼 움직이기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][3].type",
"$[0][3].statements[0][3].params[0].type"
],
"answer": [
"_if",
"reach_something"
],
"points": 2.14,
"desc": "문제 2/알/만일/만일 '바위' 에 닿았는가? 라면",
"type": "list"
},
{
"ele": "$[0][3].statements[0][3].statements[0][0].params[*].params",
"answer": [
"공룡알이 깨졌다!",
"0.2"
],
"points": 2.14,
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡알이 깨졌다!' 를 '0.2' 초 동안 '말하기'"
},
{
"ele": "$[0][3].statements[0][3].statements[0][1].type",
"answer": "hide",
"points": 2.14,
"desc": "문제 2/알/[만일]의 세부 동작 2/모양 숨기기"
},
{
"ele": "$[1][0].params",
"answer": [
null,
"32"
],
"points": 2.14,
"desc": "문제 2/알/스페이스/'스페이스' 키를 눌렀을 때"
},
{
"ele": [
"$[1][1].type",
"$[1][1].params[0]"
],
"answer": [
"repeat_inf",
null
],
"points": 2.14,
"desc": "문제 2/알/반복/계속 반복하기",
"type": "list"
},
{
"ele": [
"$[1][1].statements[0][0].type",
"$[1][1].statements[0][0].params[0].type"
],
"answer": [
"_if",
"reach_something"
],
"points": 2.14,
"desc": "문제 2/알/만일/만일 '공룡' 에 닿았는가? 라면",
"type": "list"
},
{
"ele": "$[1][1].statements[0][0].statements[0][0].type",
"answer": "locate",
"points": 2.14,
"desc": "문제 2/알/[만일]의 세부 동작 1/'공룡' 위치로 이동하기"
},
{
"ele": [
"$[1][1].statements[0][0].statements[0][1].type",
"$[1][1].statements[0][0].statements[0][1].params[0].params[0]"
],
"answer": [
"move_x",
"-20"
],
"points": 2.14,
"desc": "문제 2/알/[만일]의 세부 동작 2/x 좌표를 '-20' 만큼 바꾸기",
"type": "list"
}
],
"sort": 126
},
"5-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'바위')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.14,
"desc": "문제 2/바위/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": [
"locate_xy",
"130",
"-120"
],
"points": 2.14,
"desc": "문제 2/바위/[시작]의 세부 동작 1/x: '130' y: '-120' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "150",
"points": 2.14,
"desc": "문제 2/바위/[시작]의 세부 동작 2/크기를 '150' 으로 정하기"
}
],
"sort": 141
}
}

View File

@@ -26,3 +26,11 @@ Traceback (most recent call last):
File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project
total_points += question_points total_points += question_points
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType' TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
[2025-10-01 15:43:18] [ERROR] [main:300] 🚫Error processing ./output/2509_CAT_3_A/2509_CAT_3_A\project.json: unsupported operand type(s) for +=: 'int' and 'NoneType'
Traceback (most recent call last):
File "D:\project\Entry\Entry-Scoring\main.py", line 295, in main
points = process_project(project_data, scoring_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\project\Entry\Entry-Scoring\main.py", line 162, in process_project
total_points += question_points
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'

View File

@@ -234,8 +234,8 @@ def main():
timestamp = datetime.now().strftime("%y%m%d") timestamp = datetime.now().strftime("%y%m%d")
test_mode = False # 테스트 모드 설정 test_mode = False # 테스트 모드 설정
# test_mode = True # 테스트 모드 설정 # test_mode = True # 테스트 모드 설정
exam_round = "2508" exam_round = "2509"
exam_names = ["CAS_2_A", "CAS_2_B"] # 여러 시험명을 리스트로 설정 exam_names = ["CAT_3_A"] # 여러 시험명을 리스트로 설정
excel_list = [] excel_list = []
for exam_name in exam_names: for exam_name in exam_names:
@@ -276,7 +276,7 @@ def main():
for file in sorted(files): # 파일도 정렬 for file in sorted(files): # 파일도 정렬
if file == 'project.json': if file == 'project.json':
full_path = os.path.join(root, file) full_path = os.path.join(root, file)
print(f"\nProcessing: {full_path}") print(f"\n🟠 Processing: {full_path}")
try: try:
# 디렉토리 패스 내에 학생 이름만 뽑아서 엑셀 컬럼 명으로 추가 # 디렉토리 패스 내에 학생 이름만 뽑아서 엑셀 컬럼 명으로 추가
match = re.search(r'(\d{6}[-_][^\\/]+)[\\/]', full_path) match = re.search(r'(\d{6}[-_][^\\/]+)[\\/]', full_path)

View File

@@ -60,7 +60,7 @@ def read_json(file_path):
def main(): def main():
# base_dir을 코드 내에서 직접 지정 # base_dir을 코드 내에서 직접 지정
base_dir = r".\output\2508_CAS_2_B" # 원하는 최상위 디렉토리 경로로 수정하세요 base_dir = r"D:\project\Entry\Entry-Scoring\output\2509_CAS_3_A" # 원하는 최상위 디렉토리 경로로 수정
# 하위 디렉토리 순회 # 하위 디렉토리 순회
for root, dirs, files in os.walk(base_dir): for root, dirs, files in os.walk(base_dir):

View File

@@ -0,0 +1,362 @@
{
"1-1": {
"type": "scene",
"ele": "$..objects[?(@.name=='실험실')]",
"points": 2,
"desc": "문제 1/교실 뒤(3)/[배경] 이름 설정/이름을 '실험실'으로 변경하기"
},
"1-2": {
"type": "scene",
"ele": "$..objects[?(@.name=='새로운 약')]",
"points": 2,
"desc": "문제 1/물약(빨강)/[개체] 이름 설정 1/이름을 '새로운 약'으로 변경하기"
},
"1-4": {
"type": "scene",
"ele": "$..objects[?(@.name=='불')]",
"points": 2,
"desc": "문제 1/불(2)/[개체] 이름 설정 2/이름을 '불'로 변경하기"
},
"1-5": {
"type": "scene",
"ele": "$..objects[?(@.name=='마법사')]",
"points": 2,
"desc": "문제 1/꼬마 마법사/[개체] 이름 설정 3/이름을 '마법사'로 변경하기"
},
"1-6": {
"type": "scene",
"ele": "$..objects[?(@.name=='마법의 약')]",
"points": 2,
"desc": "문제 1/마법의 약/[개체] 이름 설정 4/이름 변경 없음"
},
"2-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'새로운 약|물약')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.43,
"desc": "문제 2/새로운 약/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": ["locate_xy", "50", "5"],
"points": 2.43,
"desc": "문제 2/새로운 약/[시작]의 세부 동작 1/x: '50' y: '5' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "60",
"points": 2.43,
"desc": "문제 2/새로운 약/[시작]의 세부 동작 2/크기를 '60' 으로 정하기"
},
{
"ele": "$[1][0].type",
"answer": "when_object_click",
"points": 2.43,
"desc": "문제 2/새로운 약/오브젝트/오브젝트를 클릭했을 때"
},
{
"ele": ["$[1][1].type", "$[1][1].params[0]"],
"answer": ["repeat_inf", null],
"points": 2.43,
"desc": "문제 2/새로운 약/반복/계속 반복하기",
"type": "list"
},
{
"ele": "$[1][1].statements[0][0].type",
"answer": "locate",
"points": 2.43,
"desc": "문제 2/새로운 약/[반복]의 세부 동작/'마우스 포인터' 위치로 이동하기"
}
]
},
"3-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'불')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.43,
"desc": "문제 2/불/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": ["locate_xy", "-150", "-30"],
"points": 2.43,
"desc": "문제 2/불/[시작]의 세부 동작 1/x: '-150' y: '-30' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "90",
"points": 2.43,
"desc": "문제 2/불/[시작]의 세부 동작 2/크기를 '90' 으로 정하기"
},
{
"ele": ["$[0][3].type", "$[0][3].params[0]"],
"answer": ["repeat_inf", null],
"points": 2.43,
"desc": "문제 2/불/반복/계속 반복하기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][0].type",
"$[0][3].statements[0][0].params[0].params[1].params[0]",
"$[0][3].statements[0][0].params[0].params[3].params[0]",
"$[0][3].statements[0][0].params[1].params[1].params[0]",
"$[0][3].statements[0][0].params[1].params[3].params[0]"
],
"answer": ["locate_xy", "-150", "0", "-10", "40"],
"points": 2.43,
"desc": "문제 2/불/[반복]의 세부 동작 1/x: '-150 부터 0 사이의 무작위 수' y: '-10 부터 40 사이의 무작위 수' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][3].statements[0][1].type",
"answer": "hide",
"points": 2.43,
"desc": "문제 2/불/[반복]의 세부 동작 2/모양 숨기기"
},
{
"ele": [
"$[0][3].statements[0][2].type",
"$[0][3].statements[0][2].params[0].type",
"$[0][3].statements[0][2].params[0].params[1].params[0]",
"$[0][3].statements[0][2].params[0].params[3].params[0]"
],
"answer": ["wait_second", "calc_rand", "1", "2"],
"points": 2.43,
"desc": "문제 2/불/[반복]의 세부 동작 3/'1 부터 2 사이의 무작위 수' 초 기다리기",
"type": "list"
},
{
"ele": "$[0][3].statements[0][3].type",
"answer": "show",
"points": 2.43,
"desc": "문제 2/불/[반복]의 세부 동작 4/모양 보이기"
},
{
"ele": [
"$[0][3].statements[0][4].type",
"$[0][3].statements[0][4].params[0].params[0]"
],
"answer": ["wait_second", "0.5"],
"points": 2.43,
"desc": "문제 2/불/[반복]의 세부 동작 5/'0.5' 초 기다리기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][5].type",
"$[0][3].statements[0][5].params[0].type"
],
"answer": ["_if", "reach_something"],
"points": 2.43,
"desc": "문제 2/불/만일/만일 '새로운 약' 에 닿았는가? 라면",
"type": "list"
},
{
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
"answer": "300",
"points": 2.43,
"desc": "문제 2/불/[만일]의 세부 동작 1/크기를 '300' 으로 정하기"
},
{
"ele": [
"$[0][3].statements[0][5].statements[0][1].type",
"$[0][3].statements[0][5].statements[0][1].params[0].params[0]",
"$[0][3].statements[0][5].statements[0][1].params[1]"
],
"answer": ["dialog", "마법 실패", "speak"],
"points": 2.43,
"desc": "문제 2/불/[만일]의 세부 동작 2/'마법 실패' 를 '말하기'",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][5].statements[0][2].type",
"$[0][3].statements[0][5].statements[0][2].params[0]"
],
"answer": ["stop_object", "all"],
"points": 2.43,
"desc": "문제 2/불/[만일]의 세부 동작 3/'모든' 코드 멈추기",
"type": "list"
}
]
},
"4-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'마법사')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.43,
"desc": "문제 2/마법사/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": ["locate_xy", "135", "-20"],
"points": 2.43,
"desc": "문제 2/마법사/[시작]의 세부 동작 1/x: '135' y: '-20' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "180",
"points": 2.43,
"desc": "문제 2/마법사/[시작]의 세부 동작 2/크기를 '180' 으로 정하기"
},
{
"ele": "$[0][3].params[*].params",
"answer": ["마법 실험을 해봐야지!", "2"],
"points": 2.43,
"desc": "문제 2/마법사/[시작]의 세부 동작 3/'마법 실험을 해봐야지!' 를 '2' 초 동안 '말하기'"
}
]
},
"5-0": {
"type": "script",
"ele": "$.objects[?(@.name=~'마법의 약')].script",
"blocks": [
{
"ele": "$[0][0].type",
"answer": "when_run_button_click",
"points": 2.43,
"desc": "문제 2/마법의 약/시작/시작하기 버튼을 클릭했을 때"
},
{
"ele": [
"$[0][1].type",
"$[0][1].params[0].params[0]",
"$[0][1].params[1].params[0]"
],
"answer": ["locate_xy", "-40", "10"],
"points": 2.43,
"desc": "문제 2/마법의 약/[시작]의 세부 동작 1/x: '-40' y: '10' 위치로 이동하기",
"type": "list"
},
{
"ele": "$[0][2].params[0].params[0]",
"answer": "50",
"points": 2.43,
"desc": "문제 2/마법의 약/[시작]의 세부 동작 2/크기를 '50' 으로 정하기"
},
{
"ele": ["$[0][3].type", "$[0][3].params[0]"],
"answer": ["repeat_inf", null],
"points": 2.43,
"desc": "문제 2/마법의 약/반복/계속 반복하기",
"type": "list"
},
{
"ele": "$[0][3].statements[0][0].type",
"answer": "hide",
"points": 2.43,
"desc": "문제 2/마법의 약/[반복]의 세부 동작 1/모양 숨기기"
},
{
"ele": [
"$[0][3].statements[0][1].type",
"$[0][3].statements[0][1].params[0].params[1].params[0]",
"$[0][3].statements[0][1].params[0].params[3].params[0]"
],
"answer": ["locate_x", "-160", "60"],
"points": 2.43,
"desc": "문제 2/마법의 약/[반복]의 세부 동작 2/x: '-160 부터 60 사이의 무작위 수' 위치로 이동하기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][2].type",
"$[0][3].statements[0][2].params[0].params[0]"
],
"answer": ["wait_second", "2"],
"points": 2.43,
"desc": "문제 2/마법의 약/[반복]의 세부 동작 3/ '2' 초 기다리기",
"type": "list"
},
{
"ele": "$[0][3].statements[0][3].type",
"answer": "show",
"points": 2.43,
"desc": "문제 2/마법의 약/[반복]의 세부 동작 4/모양 보이기"
},
{
"ele": [
"$[0][3].statements[0][4].type",
"$[0][3].statements[0][4].params[0].params[0]"
],
"answer": ["wait_second", "0.5"],
"points": 2.43,
"desc": "문제 2/마법의 약/[반복]의 세부 동작 5/'0.5' 초 기다리기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][5].type",
"$[0][3].statements[0][5].params[0].type"
],
"answer": ["_if", "reach_something"],
"points": 2.43,
"desc": "문제 2/마법의 약/만일/만일 '새로운 약' 에 닿았는가? 라면",
"type": "list"
},
{
"ele": "$[0][3].statements[0][5].statements[0][0].params[0].params[0]",
"answer": "100",
"points": 2.43,
"desc": "문제 2/마법의 약/[만일]의 세부 동작 1/크기를 '100' 으로 정하기"
},
{
"ele": [
"$[0][3].statements[0][5].statements[0][1].type",
"$[0][3].statements[0][5].statements[0][1].params[0]",
"$[0][3].statements[0][5].statements[0][1].params[1].params[0]"
],
"answer": ["add_effect_amount", "color", "70"],
"points": 2.43,
"desc": "문제 2/마법의 약/[만일]의 세부 동작 2/'색깔' 효과를 '70' 만큼 주기",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][5].statements[0][2].type",
"$[0][3].statements[0][5].statements[0][2].params[0].params[0]",
"$[0][3].statements[0][5].statements[0][2].params[1]"
],
"answer": ["dialog", "마법 성공", "speak"],
"points": 2.43,
"desc": "문제 2/마법의 약/[만일]의 세부 동작 3/'마법 성공' 을 '말하기'",
"type": "list"
},
{
"ele": [
"$[0][3].statements[0][5].statements[0][3].type",
"$[0][3].statements[0][5].statements[0][3].params[0]"
],
"answer": ["stop_object", "all"],
"points": 2.43,
"desc": "문제 2/마법의 약/[만일]의 세부 동작 4/'모든' 코드 멈추기",
"type": "list"
}
]
}
}