창작에 관련된 질문이나 간단한 팁, 예제를 올리는 곳
슬슬 길어지니 요약글 기능이 필요해진달지..
-- 플레이어 위치를 저장하는 변수
-- 초기 시작지점은 5, 5로 설정.
playerx = 5
playery = 5
-- 움직인 횟수 저장
moves = 0
-- 맵 데이터를 저장하는 8*8의 2차원 배열 Map 생성
map = {}
for a = 1, 8 do
map[a] = {}
for b = 1, 8 do
map[a][b] = 0
end
end
-- 맵 데이터 초기화
for a = 1, 8 do
for b = 1, 8 do
if (a == 1 or a == 8 or b == 1 or b == 8) then
map[a][b] = 1
end
end
end
function printmap()
-- 맵을 표시하는 printmap 함수
tempstr = ""
for a = 1, 8 do
for b= 1, 8 do
tempbuffer = ""
if (map[a][b] == 0) then
tempbuffer = " "
elseif (map[a][b] == 1) then
tempbuffer = "#"
end
if (playerx == b and playery == a) then
tempbuffer = "P"
end
tempstr = tempstr..tempbuffer
end
print(tempstr)
tempstr = ""
end
end
while(true) do
-- 메인 무한 루프
os.execute("clear") -- 화면을 지운다. OS가 아닌 Scite 환경에서는 제대로 동작하지 않음.
printmap()
print("")
print("움직임: "..moves)
print("어느 방향으로 이동할까요?")
print("a: 왼쪽 d: 오른쪽 w: 위 s: 아래 q: 종료 :")
choose = io.read()
if (choose == "a") then
if (map[playery][playerx - 1] == 0) then
playerx = playerx - 1
moves = moves + 1
end
elseif (choose == "s") then
if (map[playery + 1][playerx] == 0) then
playery = playery + 1
moves = moves + 1
end
elseif (choose == "d") then
if (map[playery][playerx + 1] == 0) then
playerx = playerx + 1
moves = moves + 1
end
elseif (choose == "w") then
if (map[playery - 1][playerx] == 0) then
playery = playery - 1
moves = moves + 1
end
elseif (choose == "q") then
os.execute("clear")
print("그럼 안녕!")
io.read()
return
end
end
바뀐 건 if-elseif 부분입니다.
if (choose == "a") then
if (map[playery][playerx - 1] == 0) then
playerx = playerx - 1
moves = moves + 1
end
elseif (choose == "s") then
if (map[playery + 1][playerx] == 0) then
playery = playery + 1
moves = moves + 1
end
elseif (choose == "d") then
if (map[playery][playerx + 1] == 0) then
playerx = playerx + 1
moves = moves + 1
end
elseif (choose == "w") then
if (map[playery - 1][playerx] == 0) then
playery = playery - 1
moves = moves + 1
end
if 처리가 더 붙었습니다.
플레이어가 앞으로 이동하게 될 좌표의 2차원 배열을 확인해서 0, 즉 빈 공간일 때만 이동할 수 있게 했습니다.
그 이외의 값이 담겨 있다면 벽으로 간주하고 이동의 처리를 생략하고 다름 루프로 넘어갑니다.
그렇게 어려운 처리는 아니었습니다, 다음에는 상자를 만들어보고, 가능하면 상자를 미는 처리도 해보겠습니다.
왠지 날로 먹은 것 같은 포스트 하나지만.. 다음에 봅시다.
다음 Lua 소코반.
언젠가 씁니다.