본문 바로가기

컴퓨터/기타

Project 1.0 telegram 봇 제작하기.(3)

반응형

이번에는 랜덤함수를 이용해서 주사위 게임과 로또 번호 생성기를 만들어보도록 하자. lua script에서의 랜덤함수는 math.random()이다. 사용 방법은 math.random(최소 숫자, 최대숫자) 형식으로 되어 있다. 그리고 이 랜덤함수의 시드값은 math.randomseed(시드값) 으로 주면 된다. 그리고 이 시드값은 직접 숫자로 줄 수도 있지만, 일반적으로는 시스템 시간을 시드값으로 해서 랜덤함수를 구현하는 것이 일반적이다. 그래서 이러한 내용들을 가지고 이제 주사위 게임과 로또 번호 생성기를 만들어보도록 하자.

먼저 주사위 게임을 구현해보도록 하자.

now = os.time()
math.randomseed(now)

function on_msg_receive(msg)
    if(msg.text == "dice") then
		mark_read(msg.from.print_name, ok_cb, false)
        send_msg(msg.from.print_name, math.random(1,6), ok_cb, false)
    end
end
 
function ok_cb(extra, succes, result)
end


이렇게 하면 dice라고 입력했을 때 1~6까지의 랜덤의 숫자를 메시지로 보내준다. 다음으로 로또 번호 생성기를 만들어보도록 하자. 이 로또 번호 생성기는 1~45까지의 숫자 중 6개의 숫자를 임의로 출력해주는 것이다.

now = os.time()
math.randomseed(now)

function on_msg_receive(msg)
	message = string.lower(msg.text)
    if(message == "dice") then
		mark_read(msg.from.print_name, ok_cb, false)
        send_msg(msg.from.print_name, math.random(1,6), ok_cb, false)
    end
	if(message == "lotto") then
		mark_read(msg.from.print_name, ok_cb, false)
		send_msg(msg.from.print_name, lotto(), ok_cb, false)
	end
end

function lotto()
	lotto_list = {}
	for i=1, 45 do
		lotto_list[i] = i
	end
	for i=1, 45 do
		a = math.random(1, 45)
		b = math.random(1, 45)
		lotto_list[a], lotto_list[b] = lotto_list[b], lotto_list[a]
	end
	str = ""
	for i=1, 6 do
		str = str .. " " .. lotto_list[i]
	end
	return str
end
 
function ok_cb(extra, succes, result)
end

로또 번호 생성기의 경우 주사위와 달리 구현해야 할 내용이 복잡하기 때문에 lotto()라는 새로운 함수를 선언하였다. 여기서 24번째 줄을 보면 약간 신기한 방식으로 써져있는데, 그 줄의 의미는 lotto_list[a]와 lotto_list[b]의 값을 서로 바꾼다라는 의미로 사용한다. 그리고 lua script에서는 문자열을 서로 이어붙일 때 '+'가 아닌 '..'을 이용해서 문자열을 이어붙인다.

반응형