본문 바로가기
반응형

이미지맥스 그리고 루아(lua)/루아(lua)10

[lua] 클래스 Class (객체지향 프로그래밍) 루아에서 테이블은 기능이 아주 강력합니다. 간단하게는 리스트에 데이터 배열을 만들수도 있고, key를 지정하여 딕셔너리형으로 데이터를 관리할수도 있으며, 함수를 정의할수도있습니다. 그리고 루아에서도 self 를 자기 자신을 지정할수있습니다. 테이블내에서 함수를 정의할때 . 이 아닌 : 로 선언하고, 함수 호출도 : 을 사용하면 self로 자기 자신을 매개변수로 받을수 있게 됩니다. 또 테이블의 행동을 정의할수 있는 metatable을 정의하면 원하는 연산동작을 지정할수 있게 됩니다. 이를 활용하면 일종의 객체지향 클래스를 루아에서도 구현할수 있습니다. 1. 부모 클래스 -- 부모 클래스 선언 Person = {} function Person:new(name, age) local instance = set.. 2022. 3. 26.
[lua] 루아에서 윈도우 앱을 실행하는 방법 os.execute() 루아에서 특정 앱을 실행하려면 os.execute() 함수를 사용합니다. os.execute('start "" "실행파일경로"') 함수의 인수에 'start "" ' 커맨드 코드 이후 실행하려는 윈도우 앱의 경로나 이름을 기입하면 실행이 됩니다. -- 그림판을 실행하는 예시 app_path = '"mspaint"' os.execute('start "" '..app_path) -- 메모장을 실행하는 예시 app_path = '"notepad"' os.execute('start "" '..app_path) -- 계산기을 실행하는 예시 app_path = '"calc"' os.execute('start "" '..app_path) 윈도우의 기본앱들은 위의 예시처럼 앱의 이름만으로도 실행이 가능합니다. 마치 실.. 2021. 9. 20.
[lua] 함수 정의시 인수의 기본값 지정하는 방법 lua로 스크립트 코딩을 하면서 함수의 정의는 필수적으로 하게됩니다. 그런데 함수를 사용할때 꼭 인수를 지정하지 않더라도 기본값을 바인딩하여 자동으로 실행되게 하고 싶은 경우가 있습니다. # 파이썬의 경우 def hello(name, greeting = 'nice to meet you'): print(name, greeting) # 샘플 hello('gildong') # >> gildong, nice to meet you. hello('youngmi', 'how old are you?') # >> youngmi, how old are you? 파이썬의 경우 함수의 인수를 정의할때 기본값을 정의해두면 됩니다. 하지만 루아에서는 파이썬과 같이 해버리면 즉시 컴파일 오류가 발생하게 됩니다. 루아에서는 두가지 .. 2021. 8. 3.
[lua] 랜덤 시간 예약 설정 함수 setTime() -- 랜덤 시간 설정 (현재 시간 ~ 23시 59분 59초 중 랜덤한 시간 반환) function setTime() math.randomseed(os.time() + math.random(0, 65535)) local date = os.date('*t') local set_time = {hour = math.random(date.hour, 23), min = math.random(date.min, 59), sec = math.random(date.sec, 59)} print('set Time : [ '..set_time.hour..'h', set_time.min..'m', set_time.sec..'s ]') return set_time end -- > 리턴값 : {hour, min, sec} key를 .. 2021. 7. 12.
[lua] 시간 설정 및 경과 확인 함수 getClock() setClock() 2021.05.10 - [이미지맥스, lua/루아 lua] - [lua] 루아에서 sleep() 함수를 구현하기 지난 시간에 sleep()를 만들어 보았습니다. sleep() 함수의 단점이라면 시간지연을 하는 동안 다른 동작을 할수가 없이 무조건 모든 동작이 멈춘상태로 시간을 보내야 한다는 점인데요. 여기서 sleep() 과는 다른 방법으로 동작을 지연시킬 방법을 생각해 보았습니다. 실행할 시간을 지정해서 현재 시간과 비교하여 원하는 시간이 지나면 동작하게 꾸미는것이 바로 그것이죠. 시간을 설정하기 때문에 sleep() 과는 달리 설정한 시간이 되기 전까지는 다른 동작도 동작하게 할수 있는 장점이 있습니다. 구현 방안은 현재 시점에 시간을 설정하고, 시간이 흐른뒤 설정한 시간과 비교하여 차값를 구해 얼마.. 2021. 5. 12.
[lua] 루아에서 sleep() 함수를 구현하기 다른 언어에서 통상적으로 지원하는 시간지연딜레이 함수인 sleep() 을 루아에서는 직접 함수를 만들어 구현해야합니다. os라이브러리의 프로그램 구동시간을 리턴해주는 os.clock() 함수를 이용하여 쉽게 구현할수 있습니다. os.clock() 함수는 프로그램의 구동시간을 초단위로 실수값 형태로 반환을 해줍니다. 가령 프로그램이 동작한지 10초가 지났다면 10.000 으로 반환 값이 돌아옵니다. 이를 통해 sleep() 함수를 실행했을때의 클럭과 지정한 시간이 경과한 후 클럭의 차를 구하면 경과한 시간을 알수 있게되어 while 반복문을 이용하거나 until 반복문 이용하면 딜레이 동작을 구현할수 있습니다. 1. 시간지연을 초(sec) 단위로 설정하여 슬립 동작을 구현하는 경우 -- 초단위 Sleep .. 2021. 5. 10.
[lua] 랜덤한 문자열 생성하기 -2- (함수화) 2021.04.24 - [이미지맥스, lua/루아 lua] - [lua] 루아에서 랜덤한 문자열을 생성하기 앞서 랜덤한 문자열을 정해진 규칙에 따라 생성해보았습니다. 가령 문자 10자 + 숫자 3자 같은 방법으로 말이죠. 이에 문자열 자동 생성을 보다 더 랜덤한 규칙으로 생성하고 싶어졌습니다. 대문자, 소문자, 숫자 캐릭터를 생성하는 부분을 각각 함수화 하고 이 함수를 랜덤으로 실행하는 방법을 통해 랜덤한 문자가 포함된 테이블을 생성합니다. 이렇게 생성한 테이블에 저장된 문자(캐릭터)들을 조합하여 문자열(스트링)으로 만들어주면 완료입니다! -- Make Random String -- 대문자 생성 function.. 2021. 4. 26.
[lua] 랜덤한 문자열 생성하기 -1- (기본편) 2021.04.26 - [이미지맥스, lua/루아 lua] - [lua] 루아에서 랜덤한 문자열 생성하기 -2- (함수화) 1. 루아에서 문자열 합치기 루아에서는 문자열과 문자열 사이에 .. 를 넣어주면 문자열이 합쳐집니다. 다음과 같이 테이블에 'a', 'b', 'c', 'd' 라는 문자열이 있다고 가정하고 이를 합쳐보겠습니다. chars = {'a', 'b', 'c', 'd'} new_string = chars[1]..chars[2]..chars[3]..chars[4] print(new_string) -- > 'abcd' 테이블의 1, 2, 3, 4번 인덱스 문자을 불러와 문자열로 합친것입니다. 각각 문자들이 합쳐져 abcd 가 리턴되는 것을 알 수 있습니다. 2. 테이블의 문자열을 합치기 그럼 테이.. 2021. 4. 24.
[lua] 날짜와 시간 함수 os.date() [lua] Time Function 루아에서는 시스템OS 시간 관련 정보를 취득할수있는 함수가 크게 3가지가 있습니다. 시스템의 날짜와 시간을 알 수 있는 함수 os.date() UTC+0, 1970년 1월 1일 기준으로 경과한 시간을 알 수 있는 os.time() 프로그램이 첫 실행후 경과한 시간을 알 수 있는 os.clock() 1. 날짜와 시간 함수 os.date() os.date() 함수는 현재 시스템의 날짜와 시간을 스트링형태의 리턴값을 얻을 수 있는 함수입니다. local date = os.date() print('os.date : '..date) --> os.date : 2022-03-26 17:31:58 인수에 스트링 '*t' 를 입력해줌으로 년, 월, 일, 시, 분, 초, 요일, 섬머타임.. 2021. 4. 17.
[lua] 테이블 길이 확인 Table Value Lenth [lua] Table Value Lenth Count for문을 이용한 함수를 이용하여 테이블의 밸류의 개수를 알수있습니다. 혹은 테이블 형태의 변수에 #을 접두어로 사용하여 사용해도 테이블의 밸류 갯수를 리턴합니다. 하지만 이경우 key를 가지는 딕셔너리 형태의 테이블인 경우는 개수가 카운트되지 않습니다. function lenTable(table) if type(table) == "table" then local count = 0 for _ in pairs(table) do count = count + 1 end return count else print('argument must input table') end end > 예시 local a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10.. 2021. 3. 28.
반응형