엔트리 채점 기능 수정 및 채점표 작성

This commit is contained in:
2025-02-14 00:47:21 +09:00
parent 49139c7543
commit 2e1ef0fc8a
7 changed files with 984 additions and 422 deletions

90
2401B.json Normal file
View File

@@ -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": "모양 숨기기"
}
]
}
}

4
README.md Normal file
View File

@@ -0,0 +1,4 @@
# Entry 채점 프로그램
### main.py
scoring.json 기준표 작성

51
copyFiles.py Normal file
View File

@@ -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)

82
jsonPathTest.py Normal file
View File

@@ -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("❌ 해당 요소를 찾을 수 없습니다.")

80
main.py
View File

@@ -1,8 +1,9 @@
from jsonpath_ng.ext import parse from jsonpath_ng.ext import parse
import json 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' scoring_json_path = './scoring.json'
# JSON 파일 읽기 # JSON 파일 읽기
@@ -20,8 +21,21 @@ def find_script_element(project_data, jsonpath_expr):
jsonpath_expr = parse(jsonpath_expr) jsonpath_expr = parse(jsonpath_expr)
match = jsonpath_expr.find(project_data) match = jsonpath_expr.find(project_data)
if not match:
return None
return match[0].value 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
@@ -36,27 +50,71 @@ def main():
ele = value.get('ele') ele = value.get('ele')
type = value.get('type') type = value.get('type')
blocks = value.get('blocks') blocks = value.get('blocks')
# 정답
answer = value.get('answer')
print(f"example: {key}")
if type == "scene": if type == "scene":
exists = find_element(project_data, ele) exists = find_element(project_data, ele)
if exists: if exists:
# print(f"No elements found for {ele}") print(f"elements found for {ele}")
total_points += value.get('points') if exists == answer:
# else: total_points += value.get('points')
# print(f"Element '{ele}' exists in project.json: {exists}") 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": if type == "script":
exists = find_script_element(project_data, ele) exists = find_script_element(project_data, ele)
temp = json.loads(exists)
if exists == None:
temp = None
else:
temp = json.loads(exists)
innerKey= 1;
for block in blocks: for block in blocks:
block_exists = find_element(temp, block.get('ele')) 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 값이 있는 경우 처리 추가 필요 # 블록에 따라 params 값이나 statements 값이 있는 경우 처리 추가 필요
if block_exists: if block_exists:
total_points += block.get('points') if answer is not None and answer != flat_matches:
# else: print(f"{key}-{innerKey}: {answer} != {flat_matches}")
# print(f"No elements found for {block.get('ele')}") 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}") print(f"Total Points: {total_points}")

View File

@@ -1,29 +1,235 @@
{ {
"0": { "1-1": {
"type": "scene", "type": "scene",
"ele": "$.scenes[0].name", "ele": "$.scenes[0].name",
"value": "장면 1", "answer": "꽃밭",
"points": 10 "points": 1.77,
"desc": "장면 1 이름 변경"
}, },
"1": { "1-2": {
"type": "scene", "type": "scene",
"ele": "$.scenes[1].name", "ele": "$.scenes[1].name",
"value": "장면 2", "answer": "숲속",
"points": 10 "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": { "2": {
"type": "script", "type": "script",
"ele": "$.objects[?(@.name=='미어캣')].script[*]", "ele": "$.objects[?(@.name=='당근')].script",
"blocks": [ "blocks": [
{ {
"ele": "$[*][?(@.type=='hide')]", "ele": "$[0][0].type",
"points": 10 "answer": "when_run_button_click",
"points": 1.77,
"desc": "시작하기 버튼을 눌렀을 때"
}, },
{ {
"ele": "$[*][?(@.type=='set_scale_size')].params[0].params[0]", "ele": "$[0][1].params[0].params[0]",
"points": 10 "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": "숨기기"
} }
] ]
} }
} }

View File

@@ -1,9 +1,9 @@
[ [
[ [
{ {
"id": "w44a", "id": "om8f",
"x": 50, "x": 50,
"y": 30, "y": 70,
"type": "when_run_button_click", "type": "when_run_button_click",
"params": [ "params": [
null null
@@ -18,7 +18,469 @@
"extensions": [] "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, "x": 0,
"y": 0, "y": 0,
"type": "hide", "type": "hide",
@@ -33,397 +495,6 @@
"copyable": true, "copyable": true,
"assemble": true, "assemble": true,
"extensions": [] "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": []
} }
] ]
] ]