NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# C# .NET Core 매크로 프로그램 만들기. (조건 로직 만들기)

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 이전에 이미지 서치(이미지 매치) 액션을 만들었는데요. 당시에는 이미지 처리 프로세스와 마우스 클릭에 대해 알아봤습니다. 이미지 서치는 윈도우 화면 또는 특정 프로그램에서 클릭하고 싶은 버튼이나 몬스터, 캐릭터등등... 대상을 찾는 방법입니다. 대상을 찾으면 해당 위치를 자동으로 클릭해주는데요. 오늘은 이런 조건에 따라서 로직을 처리하는 방법에 대해 알아보도록 하겠습니다.

     

    아직 개선해야 할 내용들이 많이 있긴한데요. 이런 부분들은 나중에 리펙토링할 때 정리하기로 하고, 큰 로직만 구성 해보는걸로 할께요. 아래와 같이 Condition 폴더안에 TrueModel과 FalseModel을 추가하세요.

    TrB5tWC.png

     

     

    이전 엔지엠 매크로에서는 조건 분기 처리를 사용자가 직접 모두 만들어야 했습니다. 그리고, 무조건 위에서 아래로 흘러가는 프로세스다보니 True 루틴(Routine)과 False 루틴(Routine)이 자동으로 처리되지 않았습니다. 그래서, 조건 루틴에서 불필요하게 액션 이동과 이동할 대상 액션의 아이디가 필요했는데요. 이 부분을 개선하기 위해 새로운 엔지엠 매크로에서는 TrueModel과 FalseModel을 추가했습니다.

     

    조건의 루틴을 담당하는 TrueModel과 FalseModel은 편집이 불가능합니다. 따라서, INoEdit 인터페이스를 상속 받도록 했습니다.

    using Ai.Interface;
    using System.ComponentModel;
    
    namespace Ai.Model.Action.Condition
    {
        public class FalseModel : ActionModel, INoEdit

     

    참과 거짓 액션은 별다른 기능이 없습니다. 이전 버전의 그룹처럼 시각적 또는 논리적으로 액션들을 모아놓는 역할만 합니다. 그래서, 기본 기능들을 설정하지 못하도록 제약을 걸어야 하는데요. ActionModel을 상속 받고 있기 때문에 기본 프로퍼티를 제정의해서 표시하지 않도록 처리 했습니다.

            [Browsable(false)]
            public new List<Data.VariableItem>? GetVariables { get; set; }
    
            [Browsable(false)]
            public new List<Data.VariableItem>? SetVariables { get; set; }

     

    참과 거짓 액션은 조건의 하위식으로 무조건 각각의 아이디를 할당 받아야 합니다. 따라서, 생성자에서 아이디를 셋팅해주도록 해야 합니다.

            public FalseModel(string id)
            {
                base.ID = id;
            }

     

    그리고, 아이디는 읽기 전용으로 만드세요. 루틴을 처리하는 액션은 아이디를 사용자가 변경할 수 없습니다.

            [LocalizedCategory("DefaultAction")]
            [LocalizedDisplayName("ID")]
            [LocalizedDescription("ID")]
            [Browsable(true)]
            [ReadOnly(true)]
            public new string? ID => base.ID;

     

    조건 액션인 이미지 매치를 스크립트에 추가하면 자동으로 참, 거짓 액션이 하위로 추가됩니다.

    fc9uEHT.png

     

     

    참, 거짓 액션은 아이디만 가지고 있습니다. 아이디는 변경할 수 없습니다.

    ax3eXCt.png

     

     

    이제 내용이 복잡해지는데요. 일주일동안 이렇게 해보고, 저렇게 해보면서 수차례 로직을 뜯어 고쳤습니다. 디자인도 계속 변경해가면서 어떻게하면 쉽게 처리할 수 있을까를 고민하는 시간이었습니다. 처음 구상은 모든 액션에 아이디를 추가하고, 참과 거짓 액션으로 이동할 수 있도록 했습니다. 여기서 문제가 발생하는데요. 중복된 반복적인 조건에서 참일 때 거짓 루틴을 건너뛸수는 있지만, 거짓일 때 상위 조건의 결과를 알 수 없어서 루틴을 건너뛸 수 없었습니다.

     

    내용이 좀 복잡한데요. 여러가지 다양한 상황에 모두 만족하려면 어떻게 해야할까가 가장 큰 고민이었습니다. 그리고, 제작 도구 특성상 딱 고정된 제작 가이드가 있는게 아니다보니 너무나 많은 시나리오가 존재해서 테스트하는데 오래걸렸습니다. 몇가지 시나리오를 통과하고 잘 동작하더라도 다른 시나리오가 동작하지 않으면 어쩔 수 없이 구조를 변경하고 다시 뜯어 고쳐야 하니까요.

     

    간단하게 아래와 같이 스크립트를 구성하고 테스트 해보겠습니다.

     

     

    좀 더 복잡한 시나리오에서도 동작이 잘 되는군요.

     

     

    한동안 닷넷 소스 코드를 올려도 문제가 없었는데요. 문제가 없다보니 방심했었나봅니다. 일부 코드에서 문제가 발생해서 작성하던 글이 모두 사라졌네요. 보통은 작성한 글을 백업해두고, 저장을 눌렀었는데... 음~ 어쩔 수 없지만, 다시 작성해야겠네요. 어떤 코드들이 데이터베이스에서 충돌나는지 찾아서 고쳐야겠습니다. 이후에 내용을 좀 더 가다듬어서 2부에서 문제가 된 내용들을 추가해야겠네요.

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.