밑에서 만들던거 디버그 메뉴 만드는중

ㅇㄹ | 조회 수 160 | 2016.09.07. 18:34

FOR,IF,SELECTCASE문은 추가됬고(WHILE 같은건 시간문제)

들여쓰기도 만들었고

 

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            EmueraERB erb = new EmueraERB("SYSTEM");
            EmueraMethod init = new EmueraMethod("EVENTFIRST");


            BaseLibrary.GetInput(init, "입력해주세요", "실패했습니다", "[0]Start", "[1]Load", "[2]Debug");


            //SELECT 테스트

            init.Add(
                new SelectCaseStatement("LOCAL:0".ToLine(),
                    new PrintLine("아무것도 아닙니다", PrintFlag.NEWLINE).ToState(),
                    Tuple.Create("1".ToLine(), new PrintLine("1입니다", PrintFlag.NEWLINE).ToState()),
                    Tuple.Create("2".ToLine(), new PrintLine("2입니다", PrintFlag.NEWLINE | PrintFlag.FORM).ToState())));

 

            BaseLibrary.DebugMenu(init, "디버그 메뉴");
            erb.Methods.Add(init);
            erb.WriteTo(AppDomain.CurrentDomain.BaseDirectory);
        }
    }
}

 

디버그 호출하면

 

@EVENTFIRST
    PRINTL 입력해주세요
    PRINTL
    PRINTL [0]Start
    PRINTL [1]Load
    PRINTL [2]Debug
    $EVENTFIRST_GET_INPUT_LOOP
    INPUT
    IF RESULT != 0 && RESULT != 1 && RESULT != 2
        PRINTL 실패했습니다
        GOTO EVENTFIRST_GET_INPUT_LOOP
    ENDIF
    SELECTCASE LOCAL:0
        CASE 1
            PRINTL 1입니다
        CASE 2
            PRINTFORML 2입니다
        CASEELSE
            PRINTL 아무것도 아닙니다
    ENDSELECT
    PRINTL 디버그 메뉴
    PRINTL
    PRINTL [0] 캐릭터 편집
    PRINTL [1] FLAG 편집
    PRINTL [2] TFLAG 편집
    PRINTL [3] ITEM 편집
    PRINTL [4] ITEMSALES 편집
    PRINTL [5] MONEY 편집
    PRINTL [6] TCVAR 편집
    PRINTL [7] DAY 편집
    PRINTL [8] TIME 편집
    PRINTL [9] MASTER 편집
    PRINTL [10] TARGET 편집
    PRINTL [11] ASSI 편집
    PRINTL [12] PLAYER 편집
    PRINTL [13] ASSIPLAY 편집
    PRINTL [14] PBAND 편집
    $EVENTFIRST_GET_INPUT_LOOP_1
    INPUT
    IF RESULT != 0 && RESULT != 1 && RESULT != 2 && RESULT != 3 && RESULT != 4 && RESULT != 5 && RESULT != 6 && RESULT != 7 && RESULT != 8 && RESULT != 9 && RESULT != 10 && RESULT != 11 && RESULT != 12 && RESULT != 13 && RESULT != 14
        PRINTL 다시 입력해주세요
        GOTO EVENTFIRST_GET_INPUT_LOOP_1
    ENDIF
    SELECTCASE RESULT:0
        CASE 1
            PRINTL FLAG이 선택됨
            VARSIZE FLAG
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [1]FLAG:{COUNT} = {FLAG:COUNT}
            NEXT
        CASE 2
            PRINTL TFLAG이 선택됨
            VARSIZE TFLAG
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [2]TFLAG:{COUNT} = {TFLAG:COUNT}
            NEXT
        CASE 3
            PRINTL ITEM이 선택됨
            VARSIZE ITEM
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [3]ITEM:{COUNT} = {ITEM:COUNT}
            NEXT
        CASE 4
            PRINTL ITEMSALES이 선택됨
            VARSIZE ITEMSALES
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [4]ITEMSALES:{COUNT} = {ITEMSALES:COUNT}
            NEXT
        CASE 5
            PRINTL MONEY이 선택됨
            VARSIZE MONEY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [5]MONEY:{COUNT} = {MONEY:COUNT}
            NEXT
        CASE 6
            PRINTL TCVAR이 선택됨
            VARSIZE TCVAR
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [6]TCVAR:{COUNT} = {TCVAR:COUNT}
            NEXT
        CASE 7
            PRINTL DAY이 선택됨
            VARSIZE DAY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [7]DAY:{COUNT} = {DAY:COUNT}
            NEXT
        CASE 8
            PRINTL TIME이 선택됨
            VARSIZE TIME
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [8]TIME:{COUNT} = {TIME:COUNT}
            NEXT
        CASE 9
            PRINTL MASTER이 선택됨
            VARSIZE MASTER
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [9]MASTER:{COUNT} = {MASTER:COUNT}
            NEXT
        CASE 10
            PRINTL TARGET이 선택됨
            VARSIZE TARGET
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [10]TARGET:{COUNT} = {TARGET:COUNT}
            NEXT
        CASE 11
            PRINTL ASSI이 선택됨
            VARSIZE ASSI
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [11]ASSI:{COUNT} = {ASSI:COUNT}
            NEXT
        CASE 12
            PRINTL PLAYER이 선택됨
            VARSIZE PLAYER
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [12]PLAYER:{COUNT} = {PLAYER:COUNT}
            NEXT
        CASE 13
            PRINTL ASSIPLAY이 선택됨
            VARSIZE ASSIPLAY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [13]ASSIPLAY:{COUNT} = {ASSIPLAY:COUNT}
            NEXT
        CASE 14
            PRINTL PBAND이 선택됨
            VARSIZE PBAND
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [14]PBAND:{COUNT} = {PBAND:COUNT}
            NEXT
    ENDSELECT

 


일단 여기까지 이 다음에 변수 선택한다음 바꿀값 입력하고 뒤로가기 만들고 해야죠

또 라벨이 중복되면 자동으로 숫자 붙이는것도 만들었습니다

 

역시 에라는 만질게 많아서 재밋네요(슬슬 버그 잡아야 할텐데...)

 

 

참고로 뒤에선 이런식으로 생성합니다

 

 

        public static string[] GlobalVariable = new string[]
        {
            "FLAG","TFLAG","ITEM","ITEMSALES","MONEY","TCVAR","DAY","TIME","MASTER","TARGET","ASSI","PLAYER","ASSIPLAY","PBAND"
        };
        public static string[] ChractorVariable = new string[]
        {
            "ABL","BASE","MAXBASE","TALENT","EXP","MARK","RELATION","JUEL","CFLAG","EQUIP","TEQUIP","PALAM","STAIN","EX","SOURCE"
        };
        public static void GetInput(EmueraMethod method, string description, string failMessged, params string[] buttons)
        {
            string[] buttonValues = new string[buttons.Length];
            try
            {
                for (int i = 0; i < buttons.Length; i++)
                {
                    buttonValues[i] = "RESULT != " + int.Parse(Regex.Match(buttons[i], @" *\[(?<number>[0-9]+)\].*").Groups["number"].Value).ToString();
                }
            }
            catch (FormatException)
            {
                throw new ArgumentException("유효하지 않은 버튼입니다", nameof(buttons));
            }
            method.Add(new PrintLine(description, PrintFlag.NEWLINE));
            method.Add(new PrintLine("", PrintFlag.NEWLINE));
            foreach (var button in buttons)
            {
                method.Add(new PrintLine(button, PrintFlag.NEWLINE));
            }
            var inputLabel = new LabelLine(method.Name + "_GET_INPUT_LOOP");
            method.AddLabel(inputLabel);
            method.Add(new InputLine());
            method.Add(
                new IfStatement(
                    new RawLine(string.Join(" && ", buttonValues)),
                    new PrintLine(failMessged, PrintFlag.NEWLINE), new GotoLine(inputLabel)
                ));
        }
        public static void DebugMenu(EmueraMethod method, string description)
        {
            GetInput(method, description, "다시 입력해주세요", StringToButton("캐릭터".Append(GlobalVariable), str => str + " 편집"));
            var caseStates = new List<Tuple<EmueraLine, EmueraStatement>>();
            for (int i = 0; i < GlobalVariable.Length; i++)
            {
                var selected = GlobalVariable[i];
                caseStates.Add(
                    Tuple.Create(
                        (i + 1).ToString().ToLine(), (
                        (new PrintLine(selected + "이 선택됨", PrintFlag.NEWLINE) +
                        ("VARSIZE " + selected)).ToMultiLineStatement() +
                        new ForStatement(
                            new GlobalVariableLine("COUNT"),
                            new RawLine("0"),
                            new GlobalVariableLine("RESULT"),
                            new RawLine("1"),
                            new PrintLine($"[{i + 1}]" + selected + ":{COUNT} = {" + selected + ":COUNT}", PrintFlag.FORM | PrintFlag.NEWLINE)
                        )) as EmueraStatement));
            }
            method.Add(
                new SelectCaseStatement(
                    new GlobalVariableLine("RESULT"), null, caseStates.ToArray()));
        }

 

만든지 얼마 안되다보니 지저분하네요

  • |
facebook twitter google plus pinterest kakao story band
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
ㅇㄹ 2016.09.07. 18:46

대괄호안에 숫자가 아니라 {COUNT}가 들어갔어야 됬는데

또 실수네요 ㄷ

번호 제목 글쓴이 날짜 조회 수
공지 공지사항 [4] 파라디클로로.. 16.05.18. 2082
공지 내가 곧 법이다 [12] 파라디클로로.. 16.05.18. 2952
292 화는 [1] Sk 16.10.15. 128
291 그나저나 era홍마관은 정말 마가 끼었나 [3] ㅅㄱㅈ 16.10.11. 581
290 에라H 조금 번역했던 사람입니다 [8] ssgv7182 16.10.03. 477
289 EraAndroid 복구중 [2] ㅇㄹ 16.10.02. 306
288 로그인했으면 이 글 먼저 봐라 [2] file 마루도령 16.09.24. 741
287 하루 1글은 써야지 [2] 줌월트 16.09.23. 144
286 평범한 인간에게는 흥미 없습니다! [2] file 마루도령 16.09.21. 495
285 껄껄 여기에 광고해서 모할라구 [1] ㅇㅇ 16.09.20. 256
284 회원가입 열렸냐 [2] 줌월트 16.09.20. 379
283 왜 잡으라는 버그는 안 잡고 이런거나 만드냐면 [1] ㅇㄹ 16.09.18. 283
282 길거리 전도를 막는법 [2] 마루도령 16.09.17. 289
281 우일베 좌메갈 file 마루도령 16.09.16. 414
280 추석은 어제였지만.. 조각조각 16.09.16. 58
279 미국 토크쇼가 말하는 힐러리 근황.avi 스톰보이즈 16.09.16. 207
278 회심의 개그다! 마루도령 16.09.16. 86
277 사토리..... 얀데레.... 귀여워... [8] file 에라리아 16.09.14. 721
276 침묵은 금입니다. 마루도령 16.09.14. 98
275 하늘이 아재개그를 보고 노해서 지진을 일으킨것이 분명하다. 마루도령 16.09.13. 115
274 한국인이 쓰는 언어는? [1] 마루도령 16.09.12. 243
273 지진 ㄷㄷ하네 [2] ㅇㄹ 16.09.12. 149