ABOUT ME

게임, 일상, 코딩, 지식, 리뷰 등을 공유합니다

Today
Yesterday
Total
  • 클래시오브클랜(COC) - 오토핫키 제작 8일 차 - 알람 기능
    오토핫키 2022. 6. 15. 16:48
    반응형

    안녕하세요.

    이번 포스팅은 오토핫키 제작 8일 차로 앞에서 저희가 계산한 파밍 시간이 되면 알람이 오는 기능을 추가해보도록 하겠습니다.

     

     

    원래 이번 포스팅에서 마우스 광클, 비활성 터치 등을 활용하여 키 하나로 마을 변경하는 기능을 추가하려고 하였으나 문제가 될 수도 있다는 생각에 추후에 따로 광클과 비활성 터치의 내용을 다루도록 하겠습니다.

     

    먼저 이번 기능 추가에서 스크립트에 3가지를 선언하였습니다.

    1. 스크립트가 실행 중일 때 재 실행 시 기존의 실행 중인 스크립트를 종료 후에 실행하는 기능

    2. 스크립트 실행 시 GUI 가 항상 위에 전시되는 기능

    3. 알람을 위한 인공지능 보이스 선언

     

    아래와 같이 코드를 작성한 후 Gui, Show 부분과 return 사이에 넣어주면 됩니다.

    ; 0,0 위치에 크기가 너비가 440 높이가 375인 Gui 전시, 텍스트는 프로그램 이름  
    Gui, Show, x0 y0 h375 w440, 파밍시간계산
    
    ; 같은 스크립트가 실행 되었을 경우 기존의 스크립트가 종료된 후 실행됨
    #Singleinstance Force
    ; GUI 가 항상 위에 표시됨
    Gui, +AlwaysOnTop
    ; 인공지능 보이스 사용
    SAPI := ComObjCreate("SAPI.SpVoice")
    
    return

    다음은 알람을 실행시키는 기능을 만들어 보겠습니다. 스크립트 맨 마지막에 추가하였습니다.

    ; 알람1 발생
    알람1:
    ; 알람 발생 시 인공지능 스피커 내용
    text = "마을 1 훈련 완료"
    ; 위 텍스트 내용을 읽어 줌
    SAPI.speak(text)
    ; 알람 초기화
    SetTimer, 알람1, off
    return
    
    ; 알람2 발생
    알람2:
    text = "마을 2 훈련 완료"
    SAPI.speak(text)
    SetTimer, 알람2, off
    return
    
    ; 알람3 발생
    알람3:
    text = "마을 3 훈련 완료"
    SAPI.speak(text)
    SetTimer, 알람3, off
    return

    text 변수의 내용을 바꾸면 알람 시 인공지능이 말하는 내용을 바꿀 수 있습니다.

    SetTimer는 중복되어도 동작이 가능한지 확인을 하였습니다. 그래서 1개 이상의 알람도 처리가 가능하였습니다.

     

    다음은 알람을 발생시키기 위한 코드를 만들어 보겠습니다.

    저희가 앞서 제작한 CC1, CC2, CC3 버튼에 코드를 추가하였습니다.

    ; 계산버튼 클릭 시 발생하는 이벤트
    ; 마을 1에 해당하는 계산 버튼 클릭 시 발생하는 이벤트
    CC1:
    ; 윈도우의 현재 시간 가져오기	
    time:=a_now
    
    ; GUI의 내용 가져오기	
    Gui,Submit,nohide
    
    ; Edit 박스에 입력된 현재 남은 훈련 시간 time 시간에 추가 
    time += %RTTime1%,min
    
    ; 위에서 추가된 시간 hh:mm으로 포맷하여 atime1에 저장
    formattime,atime1,%time%,hh:mm
    
    ; Edit 박스에 입력된 군대 훈련 시간 time 시간에 추가 
    time += %TrTime1%,min
    
    ; 위에서 추가된 시간 hh:mm으로 포맷하여 atime2에 저장
    formattime,atime2,%time%,hh:mm
    
    ;;;;;;;;;;;;;;;;; 220611 추가 - start 
    ; %atime1% %atime2% 데이터를 coc.ini 파일에 마을1탭에 Time 값으로 저장
    IniWrite, %atime1% %atime2%, coc.ini, 마을1, Time
    
    ; %TrTime1% 데이터를 coc.ini 파일에 마을1탭에 Train 값으로 저장
    IniWrite, %TrTime1%, coc.ini, 마을1, Train
    ;;;;;;;;;;;;;;;;; 220611 추가 - end
    
    ; Text 박스 공격1 공격2의 내용을 atime1, atime2 으로 변경
    GuiControl,,AttackTime1,%atime1% %atime2% 
    
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - Start
    ; 첫번째 군대가 훈련이 완료 되기 까지 남은 시간
    RTTime = %RTtime1%
    ; 군대의 훈련 완료 시간
    TrTime = %Trtime1%
    ; 두 훈련 시간을 더한 시간에서 1분을 뺀후 60을 곱함
    AddTime := (RTTime+TrTime-1)*60
    ; 알람 원하는 시간 '초'000을 더하여 ms 로 바꾸어 알람 1 실행
    SetTimer, 알람1, %AddTime%000
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - End
    
    return
    
    ; 마을 2에 해당하는 계산 버튼 클릭 시 발생하는 이벤트
    CC2:
    time:=a_now
    Gui,Submit,nohide
    time += %RTTime2%,min
    formattime,atime1,%time%,hh:mm
    time += %TrTime2%,min
    formattime,atime2,%time%,hh:mm
    IniWrite, %atime1% %atime2%, coc.ini, 마을2, Time
    IniWrite, %TrTime2%, coc.ini, 마을2, Train
    GuiControl,,AttackTime2,%atime1% %atime2%
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - Start
    RTTime = %RTtime2%
    TrTime = %Trtime2%
    AddTime := (RTTime+TrTime-1)*60
    SetTimer, 알람2, %AddTime%000
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - End
    return
    
    ; 마을 3에 해당하는 계산 버튼 클릭 시 발생하는 이벤트
    CC3:
    time:=a_now
    Gui,Submit,nohide
    time += %RTTime3%,min
    formattime,atime1,%time%,hh:mm
    time += %TrTime3%,min
    formattime,atime2,%time%,hh:mm
    IniWrite, %atime1% %atime2%, coc.ini, 마을3, Time
    IniWrite, %TrTime3%, coc.ini, 마을3, Train
    GuiControl,,AttackTime3,%atime1% %atime2%
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - Start
    RTTime = %RTtime3%
    TrTime = %Trtime3%
    AddTime := (RTTime+TrTime-1)*60
    SetTimer, 알람3, %AddTime%000
    ;;;;;;;;;;;;;;;;;;;;;;;;; 220615 - 알람 추가 - End
    return

    우선 훈련 완료 시간 1 분 전에 알람이 되도록 설정하여 첫 번째 공격을 완료한 후 바로 출발할 수 있도록 1분 전에 알람이 오도록 하였습니다. 그리고 SetTimer의 시간은 ms로 동작하기 때문에 원하는 시간에 60을 곱하여 '초'로 바꾼 후 ms로 바꾸기 위해 000을 뒤에 붙여 제작을 마무리하였습니다.

    동작 확인은 완료하였고 아래에 오늘 작업한 내용을 올려 드릴 테니 참고하시길 바랍니다.

    파밍시간계산.ahk
    0.01MB

     

    이것으로 클래시 오브 클랜에 사용할 현황판 오토핫키 제작을 마치도록 하겠습니다.

    이번 제작을 끝으로 어떤 방향으로 블로그를 할지 고민 중입니다. 평소에 관심이 있는 소설, 드라마, 영화, 제품, 음식 등등의 리뷰를 진행하면서 클래시 오브 클랜에 대한 포스팅과 오토핫키에 대한 포스팅도 동시에 진행하도록 하겠습니다.

    감사합니다.

    반응형
Designed by Tistory.