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

ㅇㄹ | 조회 수 152 | 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. 1975
공지 내가 곧 법이다 [12] 파라디클로로.. 16.05.18. 2807
283 왜 잡으라는 버그는 안 잡고 이런거나 만드냐면 [1] ㅇㄹ 16.09.18. 278
282 길거리 전도를 막는법 [2] 마루도령 16.09.17. 287
281 우일베 좌메갈 file 마루도령 16.09.16. 412
280 추석은 어제였지만.. 조각조각 16.09.16. 57
279 미국 토크쇼가 말하는 힐러리 근황.avi 스톰보이즈 16.09.16. 203
278 회심의 개그다! 마루도령 16.09.16. 85
277 사토리..... 얀데레.... 귀여워... [8] file 에라리아 16.09.14. 707
276 침묵은 금입니다. 마루도령 16.09.14. 97
275 하늘이 아재개그를 보고 노해서 지진을 일으킨것이 분명하다. 마루도령 16.09.13. 114
274 한국인이 쓰는 언어는? [1] 마루도령 16.09.12. 241
273 지진 ㄷㄷ하네 [2] ㅇㄹ 16.09.12. 149
272 세상에서 제일 차가운 바다는? [1] 마루도령 16.09.12. 148
271 흑인이 투잡을 뛰면? 마루도령 16.09.12. 104
270 직접 만든 수제 총을 영어로 하면? 수중교미 16.09.12. 128
269 동방사령부 무슨일 있었나요? [2] Try 16.09.11. 356
268 육손 장비착용 마루도령 16.09.11. 92
267 호빗: 뜻밖의 모험 마루도령 16.09.11. 77
266 마녀가 빗자루에서 떨어지면? [5] 마루도령 16.09.10. 175
265 비가 1시간동안 내리면? [2] 마루도령 16.09.09. 207
264 조회수는 죄다 200정도인데 댓글은 하나나 두개 [4] 마루도령 16.09.08. 222