【TIC-80】에리어 번호를 흔든 배열(테이블)로부터 경계선 첨부의 맵 데이터를 작성

12632 단어 TIC-80루아
자신에게는 말로 설명하기가 어렵기 때문에 구체적인 예를 들면,
TIC-80이라는 가상 게임기에서

data2map.lua
adata={
 {0,0,0,0,0,0,0,0,0,0},
 {0,1,1,1,0,0,6,6,6,0},
 {0,0,1,2,0,0,6,0,6,0},
 {0,0,1,2,3,3,6,6,6,0},
 {0,0,0,2,3,4,4,5,0,0},
 {0,0,0,0,3,3,5,5,0,0},
 {0,0,0,0,0,0,0,0,0,0},
 {0,0,0,0,0,0,0,0,0,0}
}

와 같이 에리어 번호를 2차원 배열(테이블)로
넣은 것에서

같은 맵 데이터를 만드는 것이 목적입니다.
(TIC-80이라고 쓰려고 좌절했습니다)

충족하고 싶은 요구는 다음과 같습니다.
  • 지역 번호가 다른 경우 테두리를 그립니다.
  • 여러 영역에서 동일한 종류의 스프라이트 (맵 칩)를 사용합니다.
  • 나름의 확장성(현재는 바다와 지면의 2종이지만 그것을 늘리거나)
  • 나름대로의 코드 단축과 나름의 가독성

  • 예, 아마도 비슷한 일을 한 사람이있을 것입니다.
    찾을 수 없습니다. 이 기사의 제목도 아마 적절하지 않습니다.
    맵 칩이나 타일 등의 어구도 나중에 알았습니다.

    결국 우여곡절 끝에 다음과 같은 방법으로 했습니다.

    테두리 없음, 왼쪽과 테두리가 있고 위와 테두리가 있고 왼쪽과 위와 테두리가 있습니다.
    스프라이트(맵 칩)를 바다와 지면 각각 준비하고 인덱스 #0부터 차례로 늘어놓는다.

    후에는 자신의 에리어 번호가 0(바다)이라면 전반, 왼쪽과 에리어 번호가 다르면 1 시프트하고, 위라면 2,
    양쪽이라면 더해 3 어긋난다고 했습니다. 코드는 다음과 같이

    data2map.lua
    S_ID=0
    adata={
     {0,0,0,0,0,0,0,0,0,0},
     {0,1,1,1,0,0,6,6,6,0},
     {0,0,1,2,0,0,6,0,6,0},
     {0,0,1,2,3,3,6,6,6,0},
     {0,0,0,2,3,4,4,5,0,0},
     {0,0,0,0,3,3,5,5,0,0},
     {0,0,0,0,0,0,0,0,0,0},
     {0,0,0,0,0,0,0,0,0,0}
    }
    MAP_W=#adata[1]
    MAP_H=#adata
    for i=2,MAP_H do
     for j=2,MAP_W do
      local dSea=(adata[i][j]==0)and 0 or 4
      local dLeft=(adata[i][j]==adata[i][j-1])and 0 or 1
      local dUp=(adata[i][j]==adata[i-1][j])and 0 or 2
      mset(j-1,i-1,S_ID+dSea+dLeft+dUp)
     end
    end
    --sync(0,0,true)
    function TIC()
     map()
    end
    

    우선 맨 위와 맨 왼쪽은 0 고정으로.

    또한 나중에 추가합니다. (첫 기사에서 지쳤습니다)

    좋은 웹페이지 즐겨찾기