diff --git a/2401B.json b/2401B.json new file mode 100644 index 0000000..9d5bff3 --- /dev/null +++ b/2401B.json @@ -0,0 +1,90 @@ +{ + "1-1": { + "type": "scene", + "ele": "$.scenes[0].name", + "answer": "꽃밭", + "points": 1.7, + "desc": "장면 1 이름 변경" + }, + "1-2": { + "type": "scene", + "ele": "$.scenes[1].name", + "answer": "숲속", + "points": 1.7, + "desc": "장면 2 이름 변경" + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='당근')]", + "points": 1.7, + "desc": "장면 2 이름 변경" + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='하트')]", + "points": 1.7, + "desc": "장면 2 이름 변경" + }, + "2": { + "type": "script", + "ele": "$.objects[?(@.name=='미어캣')].script[*]", + "blocks": [ + { + "ele": "$[*][?(@.type=='when_run_button_click')]", + "points": 1.33, + "desc": "시작하기 버튼을 눌렀을 때" + }, + { + "ele": "$[*][?(@.type=='hide')]", + "points": 1.33, + "desc": "모양 숨기기 블럭" + }, + { + "ele": "$[*][?(@.type=='set_scale_size')].params[0].params[0]", + "answer": "60", + "points": 1.33, + "desc": "크기 60으로 설정" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')]", + "points": 1.33, + "desc": "반복하기" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')].statements[0][0].params[*].params[?(@.type=='number')].params", + "answer": [ + "-200", + "200", + "-100", + "100" + ], + "points": 1.33, + "desc": "x" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')].statements[*][1].type", + "answer": "wait_second", + "points": 1.33, + "desc": "1초 기다리기" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')].statements[*][2].type", + "answer": "show", + "points": 1.33, + "desc": "모양 보이기" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')].statements[*][3].type", + "answer": "wait_second", + "points": 1.33, + "desc": "1초 기다리기" + }, + { + "ele": "$[*][?(@.type=='repeat_inf')].statements[*][4].type", + "answer": "hide", + "points": 1.33, + "desc": "모양 숨기기" + } + ] + } +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5b6ae8b --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +# Entry 채점 프로그램 + +### main.py +scoring.json 기준표 작성 \ No newline at end of file diff --git a/copyFiles.py b/copyFiles.py new file mode 100644 index 0000000..10465f1 --- /dev/null +++ b/copyFiles.py @@ -0,0 +1,51 @@ +import os +import shutil +import unicodedata + +def copy_dic_subdirs(source_root, target_root_b, target_root_c): + for root, dirs, files in os.walk(source_root): + for dir_name in dirs: + + parent_dir = os.path.basename(os.path.dirname(os.path.join(root, dir_name))) + target_root = None + parent_dir = unicodedata.normalize('NFC', parent_dir) + + # 부모 디렉토리가 '2교시'인지, '3교시'인지 확인 + if parent_dir == '1교시': + target_root = target_root_b + elif parent_dir == '2교시': + target_root = target_root_c + + if target_root: + source_dic_path = os.path.join(root, dir_name) + target_dic_path = os.path.join(target_root, dir_name) + + # DIC 하위 디렉토리와 파일 복사 + shutil.copytree(source_dic_path, target_dic_path, dirs_exist_ok=True) + print(f"Copied {source_dic_path} to {target_dic_path}") + + else: + print(f"Skipping {dir_name} under {parent_dir}, as it doesn't match '2교시' or '3교시'.") + +def copy_ent_files(source_root, target_root): + # 대상 디렉토리가 없으면 생성 + os.makedirs(target_root, exist_ok=True) + + for root, dirs, files in os.walk(source_root): + for file in files: + if file.endswith('.ent'): + source_file_path = os.path.join(root, file) + target_file_path = os.path.join(target_root, file) + + # 파일 복사 + shutil.copy2(source_file_path, target_file_path) + print(f"Copied {source_file_path} to {target_file_path}") + +# 사용법 +source_directory = r"/Users/waterdrw/Downloads/제2502회 코딩활용능력 2급 수시4_답안파일" # 원본 디렉토리 경로 +target_directory = r"./output/" +target_directory_a = r"./output/A" # '1교시'의 타겟 경로 +target_directory_b = r"./output/B" # '2교시'의 타겟 경로 +target_directory_c = r"./output/C" # '3교시'의 타겟 경로 + +copy_ent_files(source_directory, target_directory) diff --git a/jsonPathTest.py b/jsonPathTest.py new file mode 100644 index 0000000..fd9623d --- /dev/null +++ b/jsonPathTest.py @@ -0,0 +1,82 @@ +import json +from jsonpath_ng import parse + +# JSON 데이터 +json_data = [ + { + "id": "ro4n", + "x": 0, + "y": 0, + "type": "wait_second", + "params": [ + { + "id": "6xf0", + "x": 0, + "y": 0, + "type": "number", + "params": ["1"], + "statements": [], + "movable": None, + "deletable": 1, + "emphasized": False, + "readOnly": None, + "copyable": True, + "assemble": True, + "extensions": [] + }, + None + ], + "statements": [], + "movable": None, + "deletable": 1, + "emphasized": False, + "readOnly": None, + "copyable": True, + "assemble": True, + "extensions": [] + }, + { + "id": "kkqk", + "x": 0, + "y": 0, + "type": "wait_second", + "params": [ + { + "id": "167c", + "x": 0, + "y": 0, + "type": "number", + "params": ["1"], + "statements": [], + "movable": None, + "deletable": 1, + "emphasized": False, + "readOnly": None, + "copyable": True, + "assemble": True, + "extensions": [] + }, + None + ], + "statements": [], + "movable": None, + "deletable": 1, + "emphasized": False, + "readOnly": None, + "copyable": True, + "assemble": True, + "extensions": [] + } +] + +# JSONPath 표현식 +jsonpath_expr = parse("$[?(@.type=='wait_second')][0]") + +# 첫 번째 "wait_second" 요소 찾기 +matches = [match.value for match in jsonpath_expr.find(json_data)] + +# 출력 +if matches: + print("첫 번째 wait_second 요소:", json.dumps(matches[0], indent=4, ensure_ascii=False)) +else: + print("❌ 해당 요소를 찾을 수 없습니다.") diff --git a/main.py b/main.py index aceb547..8e93f45 100644 --- a/main.py +++ b/main.py @@ -1,8 +1,9 @@ from jsonpath_ng.ext import parse import json +from itertools import chain # 파일 경로 설정 -project_json_path = './sample/제2410회 코딩활용능력 2급 B형 정답/project.json' +project_json_path = './sample/제2502회 코딩활용능력 2급 B형 정답/project.json' scoring_json_path = './scoring.json' # JSON 파일 읽기 @@ -20,8 +21,21 @@ def find_script_element(project_data, jsonpath_expr): jsonpath_expr = parse(jsonpath_expr) match = jsonpath_expr.find(project_data) + if not match: + return None + return match[0].value +# jsonpath_expr_list 로 넘어온 jsonpath들을 하나씩 parse 해주고 결과를 result 리스트로 반환 +def find_list_element(data, jsonpath_expr_list): + result = [] + + for jsonpath_expr in jsonpath_expr_list: + jsonpath_expr = parse(jsonpath_expr) + result.append([match.value for match in jsonpath_expr.find(data)]) + + return result + @@ -30,33 +44,77 @@ def main(): project_data = read_json(project_json_path) scoring_data = read_json(scoring_json_path) - total_points = 0 + total_points = 0 for key, value in scoring_data.items(): ele = value.get('ele') type = value.get('type') blocks = value.get('blocks') + # 정답 + answer = value.get('answer') + print(f"example: {key}") if type == "scene": exists = find_element(project_data, ele) if exists: - # print(f"No elements found for {ele}") - total_points += value.get('points') - # else: - # print(f"Element '{ele}' exists in project.json: {exists}") + print(f"elements found for {ele}") + if exists == answer: + total_points += value.get('points') + elif exists and answer == None: + total_points += value.get('points') + print(f"{ele} found "); + else : + print(f"{exists} not found"); + else: + print(f"Element '{ele}' exists in project.json: {exists}") if type == "script": - exists = find_script_element(project_data, ele) - temp = json.loads(exists) - for block in blocks: - block_exists = find_element(temp, block.get('ele')) + exists = find_script_element(project_data, ele) - # 블록에 따라 params 값이나 statements 값이 있는 경우 처리 추가 필요 + if exists == None: + temp = None + else: + temp = json.loads(exists) - if block_exists: - total_points += block.get('points') - # else: - # print(f"No elements found for {block.get('ele')}") + innerKey= 1; + for block in blocks: + innerType = block.get('type') + + if temp == None: + print(f"{key}-{innerKey}: Script Not exist") + innerKey = innerKey + 1 + continue + + if innerType == "list": + block_exists = find_list_element(temp, block.get('ele')) + + else: + block_exists = find_element(temp, block.get('ele')) + + # 정답 + answer = block.get('answer', None) + + if isinstance(answer, list): + flat_matches = list(chain.from_iterable(block_exists)) + + else: + flat_matches = block_exists[0] + + + # 블록에 따라 params 값이나 statements 값이 있는 경우 처리 추가 필요 + if block_exists: + if answer is not None and answer != flat_matches: + print(f"{key}-{innerKey}: {answer} != {flat_matches}") + elif answer is not None and answer == flat_matches: + print(f"{key}-{innerKey}: {answer} == {flat_matches}") + total_points += block.get('points') + elif answer is None and block_exists: + total_points += block.get('points') + print(f"{key}-{innerKey}: exist ele: {block_exists}") + else: + print(f"No elements found for {block.get('ele')}") + + innerKey = innerKey + 1 print(f"Total Points: {total_points}") diff --git a/scoring.json b/scoring.json index f9d0fa8..953084d 100644 --- a/scoring.json +++ b/scoring.json @@ -1,29 +1,235 @@ { - "0": { + "1-1": { "type": "scene", "ele": "$.scenes[0].name", - "value": "장면 1", - "points": 10 + "answer": "꽃밭", + "points": 1.77, + "desc": "장면 1 이름 변경" }, - "1": { + "1-2": { "type": "scene", "ele": "$.scenes[1].name", - "value": "장면 2", - "points": 10 + "answer": "숲속", + "points": 1.77, + "desc": "장면 2 이름 변경" + }, + "1-3": { + "type": "scene", + "ele": "$..objects[?(@.name=='당근')]", + "points": 1.77, + "desc": "장면 2 이름 변경" + }, + "1-4": { + "type": "scene", + "ele": "$..objects[?(@.name=='하트')]", + "points": 1.77, + "desc": "장면 2 이름 변경" + }, + "2-1": { + "type": "scene", + "ele": "$.variables[?(@.name=='당근')]['value', 'object']", + "answer": [ + "10", + null + ], + "points": 1.77, + "desc": "변수 기본값, 전체 사용 여부" + }, + "2-2": { + "type": "scene", + "ele": "$.variables[?(@.name=='점수')]['value', 'object']", + "answer": [ + 0, + null + ], + "points": 1.77, + "desc": "변수 기본값, 전체 사용 여부" + }, + "2-3": { + "type": "scene", + "ele": "$.messages[?@.name=='종료']", + "points": 1.77, + "desc": "시그널 작성 여부" }, "2": { "type": "script", - "ele": "$.objects[?(@.name=='미어캣')].script[*]", + "ele": "$.objects[?(@.name=='당근')].script", "blocks": [ - { - "ele": "$[*][?(@.type=='hide')]", - "points": 10 + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.77, + "desc": "시작하기 버튼을 눌렀을 때" }, { - "ele": "$[*][?(@.type=='set_scale_size')].params[0].params[0]", - "points": 10 + "ele": "$[0][1].params[0].params[0]", + "points": 1.77, + "answer": "45", + "desc": "크기 지정" + }, + { + "ele": "$[0][2]['params']", + "points": 1.77, + "answer": [ + "FORWARD", + null + ], + "desc": "물체 앞으로 보내기" + }, + { + "type": "list", + "ele": [ + "$[0][3].params[0].params[?(@.type=='get_variable')].type", + "$[0][3].params[0].params[?(@=='LESS')]", + "$[0][3].params[0].params[?(@.type=='text')].params[0]" + ], + "answer": [ + "get_variable", + "LESS", + "1" + ], + "points": 1.77, + "desc": "x:0, y:-100 으로 이동" + }, + { + "ele": "$[0][3].statements[0][?@.type=='locate_xy'].params[*].params", + "answer": [ + "0", + "-120" + ], + "points": 1.77, + "desc": "x:0, y:-120 으로 이동" + }, + { + "ele": "$[0][3].statements[0][1].params[0].params[0]", + "answer": "32", + "points": 1.77, + "desc": "스페이스(32) 를 눌렀을 때" + }, + { + "ele": "$[0][3].statements[0][1].statements[0][0].params[0].params[0]", + "answer": "0.2", + "points": 1.77, + "desc": "0.2초 기다리기" + }, + { + "ele": "$[0][3].statements[0][1].statements[0][1].params[1].params[0]", + "answer": "-1", + "points": 1.77, + "desc": "변수에 -1" + }, + { + "type": "list", + "ele": [ + "$[0][3].statements[0][1].statements[0][2].params[0].params[0]", + "$[0][3].statements[0][1].statements[0][2].params[1]" + ], + "answer": [ + "0.5", + "mouse" + ], + "points": 1.77, + "desc": "0.5초 동안 마우스 좌표 위치로 이동" + }, + { + "type": "list", + "ele": [ + "$[0][3].statements[0][2].type", + "$[0][3].statements[0][2].params[0].type" + ], + "answer": [ + "_if", + "reach_something" + ], + "points": 1.77, + "desc": "if reach something" + }, + { + "ele": "$[0][3].statements[0][2].statements[0][0].params[1].params[0]", + "answer": "10", + "points": 1.77, + "desc": "변수에 10" + }, + { + "ele": "$[0][3].statements[0][2].statements[0][1].params[*].params", + "answer": [ + "성공!", + "0.5" + ], + "points": 1.77, + "desc": "dialog_time 시작!을 0.5초" + }, + { + "ele": "$[0][4].type", + "answer": "message_cast", + "points": 1.77, + "desc": "신호 보내기" + }, + { + "ele": "$[0][5].type", + "answer": "hide", + "points": 1.77, + "desc": "신호 보내기" + } + ] + }, + "3": { + "type": "script", + "ele": "$.objects[?(@.name=='하트')].script", + "blocks": [] + }, + "5": { + "type": "script", + "ele": "$.objects[?(@.name=='상자')].script", + "blocks": [ + { + "ele": "$[0][0].type", + "answer": "when_run_button_click", + "points": 1.77, + "desc": "시작하기 버튼을 눌렀을 때" + }, + { + "ele": "$[*][?(@.type=='change_object_index')].params[0]", + "points": 1.77, + "answer": "FORWARD", + "desc": "물체 앞으로 보내기" + }, + { + "ele": "$[0][2].params[*].params", + "answer": [ + "0", + "-100" + ], + "points": 1.77, + "desc": "x:0, y:-100 으로 이동" + }, + { + "ele": "$[0][3].params[0].params[0]", + "points": 1.77, + "answer": "90", + "desc": "크기 지정" + }, + { + "ele": "$[0][4].params[*].params", + "answer": [ + "시작!", + "0.5" + ], + "points": 1.77, + "desc": "dialog_time 시작!을 0.5초" + }, + { + "ele": "$[1][0].type", + "answer": "when_message_cast", + "points": 1.77, + "desc": "신호를 받았을 때" + }, + { + "ele": "$[1][1].type", + "answer": "hide", + "points": 1.77, + "desc": "숨기기" } - ] } } \ No newline at end of file diff --git a/scripts.json b/scripts.json index 9ecbd5d..afbe8b7 100644 --- a/scripts.json +++ b/scripts.json @@ -1,9 +1,9 @@ [ [ { - "id": "w44a", + "id": "om8f", "x": 50, - "y": 30, + "y": 70, "type": "when_run_button_click", "params": [ null @@ -18,7 +18,469 @@ "extensions": [] }, { - "id": "lks0", + "id": "y31p", + "x": 0, + "y": 0, + "type": "set_scale_size", + "params": [ + { + "id": "vohi", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "45" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "ybwv", + "x": 0, + "y": 0, + "type": "change_object_index", + "params": [ + "FORWARD", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "g6zh", + "x": 0, + "y": 0, + "type": "repeat_while_true", + "params": [ + { + "id": "t4xt", + "x": 0, + "y": 0, + "type": "boolean_basic_operator", + "params": [ + { + "id": "fe87", + "x": 0, + "y": 0, + "type": "get_variable", + "params": [ + "ofvf", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + "LESS", + { + "id": "7eqj", + "x": 0, + "y": 0, + "type": "text", + "params": [ + "1" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + } + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + "until", + null + ], + "statements": [ + [ + { + "id": "6dad", + "x": 0, + "y": 0, + "type": "locate_xy", + "params": [ + { + "id": "bj58", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "0" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "oeup", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "-120" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "bdne", + "x": 0, + "y": 0, + "type": "_if", + "params": [ + { + "id": "kzo7", + "x": 0, + "y": 0, + "type": "is_press_some_key", + "params": [ + "32", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [ + [ + { + "id": "skya", + "x": 0, + "y": 0, + "type": "wait_second", + "params": [ + { + "id": "lw8x", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "0.2" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "cwhq", + "x": 0, + "y": 0, + "type": "change_variable", + "params": [ + "ofvf", + { + "id": "zzzs", + "x": 0, + "y": 0, + "type": "text", + "params": [ + "-1" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "fi2n", + "x": 0, + "y": 0, + "type": "locate_object_time", + "params": [ + { + "id": "kwih", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "0.5" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + "mouse", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + } + ] + ], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "w10m", + "x": 0, + "y": 0, + "type": "_if", + "params": [ + { + "id": "3mja", + "x": 0, + "y": 0, + "type": "reach_something", + "params": [ + null, + "1dcp", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [ + [ + { + "id": "1o2h", + "x": 0, + "y": 0, + "type": "change_variable", + "params": [ + "cyzm", + { + "id": "v14q", + "x": 0, + "y": 0, + "type": "text", + "params": [ + "10" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "f6lo", + "x": 0, + "y": 0, + "type": "dialog_time", + "params": [ + { + "id": "sydb", + "x": 0, + "y": 0, + "type": "text", + "params": [ + "성공!" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "qxvc", + "x": 0, + "y": 0, + "type": "number", + "params": [ + "0.5" + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + "speak", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + } + ] + ], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + } + ] + ], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "b4zg", + "x": 0, + "y": 0, + "type": "message_cast", + "params": [ + "4tjs", + null + ], + "statements": [], + "movable": null, + "deletable": 1, + "emphasized": false, + "readOnly": null, + "copyable": true, + "assemble": true, + "extensions": [] + }, + { + "id": "937f", "x": 0, "y": 0, "type": "hide", @@ -33,397 +495,6 @@ "copyable": true, "assemble": true, "extensions": [] - }, - { - "id": "3wtk", - "x": 0, - "y": 0, - "type": "set_scale_size", - "params": [ - { - "id": "cs1e", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "60" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "0ihj", - "x": 0, - "y": 0, - "type": "repeat_inf", - "params": [ - null, - null - ], - "statements": [ - [ - { - "id": "orn8", - "x": 0, - "y": 0, - "type": "locate_xy", - "params": [ - { - "id": "dmfl", - "x": 0, - "y": 0, - "type": "calc_rand", - "params": [ - null, - { - "id": "8u37", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "-200" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null, - { - "id": "ouuv", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "200" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "8j47", - "x": 0, - "y": 0, - "type": "calc_rand", - "params": [ - null, - { - "id": "669m", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "-100" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null, - { - "id": "kaq0", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "100" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "ro4n", - "x": 0, - "y": 0, - "type": "wait_second", - "params": [ - { - "id": "6xf0", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "1" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "r39u", - "x": 0, - "y": 0, - "type": "show", - "params": [ - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "kkqk", - "x": 0, - "y": 0, - "type": "wait_second", - "params": [ - { - "id": "167c", - "x": 0, - "y": 0, - "type": "number", - "params": [ - "1" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "0qng", - "x": 0, - "y": 0, - "type": "hide", - "params": [ - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - } - ] - ], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - } - ], - [ - { - "id": "knwd", - "x": 53, - "y": 343, - "type": "when_message_cast", - "params": [ - null, - "m0l6" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "40hi", - "x": 0, - "y": 0, - "type": "_if", - "params": [ - { - "id": "sbmy", - "x": 0, - "y": 0, - "type": "reach_something", - "params": [ - null, - "xskt", - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [ - [ - { - "id": "jy0j", - "x": 0, - "y": 0, - "type": "hide", - "params": [ - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - { - "id": "w887", - "x": 0, - "y": 0, - "type": "change_variable", - "params": [ - "v94h", - { - "id": "grbn", - "x": 0, - "y": 0, - "type": "text", - "params": [ - "-10" - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - }, - null - ], - "statements": [], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] - } - ] - ], - "movable": null, - "deletable": 1, - "emphasized": false, - "readOnly": null, - "copyable": true, - "assemble": true, - "extensions": [] } ] ] \ No newline at end of file