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

ㅇㄹ | 조회 수 138 | 2016.09.07. 18:34
IP address: 1.220.110.114

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. 1794
공지 내가 곧 법이다 [12] 파라디클로로.. 16.05.18. 2591
272 세상에서 제일 차가운 바다는? [1] 마루도령 16.09.12. 139
271 흑인이 투잡을 뛰면? 마루도령 16.09.12. 99
270 직접 만든 수제 총을 영어로 하면? 수중교미 16.09.12. 113
269 동방사령부 무슨일 있었나요? [2] Try 16.09.11. 338
268 육손 장비착용 마루도령 16.09.11. 89
267 호빗: 뜻밖의 모험 마루도령 16.09.11. 74
266 마녀가 빗자루에서 떨어지면? [5] 마루도령 16.09.10. 169
265 비가 1시간동안 내리면? [2] 마루도령 16.09.09. 192
264 조회수는 죄다 200정도인데 댓글은 하나나 두개 [4] 마루도령 16.09.08. 215
263 나는 잡담을 다니합. 마루도령 16.09.08. 45
» 밑에서 만들던거 디버그 메뉴 만드는중 [3] ㅇㄹ 16.09.07. 138
261 이런거 어떤가요 [1] ㅇㄹ 16.09.06. 140
260 합니다 잡담을 나는 흑유령 16.09.05. 50
259 잡담을 하는 나를 보는 사람은 이글을 봅니다. [1] 마루도령 16.09.04. 145
258 나도 잡담을 합니다. [2] 파라디클로로.. 16.09.03. 222
257 나는 잡담을 합니다. 닉4임 16.09.03. 91
256 나는 잡담을 합니다. [1] 마루도령 16.09.03. 159
255 죄송합니다 [2] Faker. N 16.08.30. 331
254 저 아래에 있는 252번 글에 대한 분노임. file 파라디클로로.. 16.08.30. 532
253 오랜만에 구경왔더니 에라 안드로이드라는 물건이 나왔네요? [1] 에헤라 16.08.30. 351