내가 어렸을 때, 나는 Intellivision 게임 Advanced Dungeons and Dragons : Treasure of Tarmin을했다 . 3D 그래픽을 사용하면 충격적인 사실감으로 1 인칭 시점을 볼 수 있습니다.
그러나 나는 C-64를 얻었다. 그리고 화면 주위를 커서로 움직이고 Ctrl 키와 숫자로 색상을 설정하고 원하는 곳에 기호를두면 (왜 그렇게하지 bash
않을까요?) 40x25 문자 그리드에 그릴 수있었습니다 . 문자 집합에는 삼각형 구성 요소와 솔리드 블록 구성 요소가있었습니다. 그래서 나는 그 매체를 통해 그리드에서 자신의 원근을 렌더링하는 방법을 통해 추론 할 수있었습니다.
나는 이번 주에 "던전 건설 세트"에 관한 거의 3 십년 전의 나선 묶인 공책에서 발견했다.
( 업데이트 :주의 깊은 독자들은 이것이 기울어 진 부분에 잘 맞지 않는 것을 알 수 있습니다. 수정 된 숫자는 아래에 제공됩니다.)
타민의 보물은 격자에서 재생되었지만 벽 은 격자 사각형 의 가장자리 에만 존재했습니다 . 바이트가 무엇인지 알았을 때, 맵을 바이트로 만들면 맵의 각 사각형이 각 가장자리에 대해 네 가지 가능한 상태를 가질 수 있음을 깨달았습니다.
- 막힘
- 벽
- 문
- 다른 것?
나는 (어제 밤까지) 그것을 작성하지 않았다. 다른 사람들이 시도하는 것이 재미있을 것이라고 생각했습니다.
따라서 귀하의 작업은 2013 년 기술을 사용하여 내 (수정 된) 사양 을 구현하는 문자 모드 기반 미로 렌더러를 구현 하는 것입니다.
입력
스펙은 문에 대한 렌더링을 정의하지 않으므로 벽과 벽이 아닌 유일한 옵션 만 가정합니다. 간단히하기 위해 입력은 다음과 같은 문자열 줄로 구성된 맵입니다.
WN.. .N.. .N.. .N.. .N.E
W... .... .... ..S. ...E
W... .N.E W... .N.. ...E
W... .... .... .... ...E
W.S. ..S. ..S. ..S. ..SE
5x5 맵입니다. 왼쪽 상단 (1,1)는이 W
추정치와 N
노스 벽 세트를. 오른쪽 하단 (5,5)에는 S
바깥 쪽 E
벽 과 벽이 있습니다.
지도 내비게이션이 없으면 재미가 떨어집니다. 따라서 최소한 플레이어를 북쪽을 향한 (1,1)에 놓고 다음을 제공하십시오.
[F]orward, [B]ackward, turn [L]eft, turn [R]ight or [Q]uit?
각 단계에서 노트북 용지 사양에 정의 된대로 1 인칭 시점의 16x15 디스플레이를 출력합니다. 계산하지 않아도되도록 세 거리의 평평한 벽의 크기는 다음과 같습니다.
14x13 (directly in front of you; e.g. wall is in same cell)
8x7 (one step away)
6x5 (two steps away)
경사 벽의 경계 크기는 다음과 같습니다.
1x15 (your direct left or right; e.g. wall is in same cell)
3x13 (one step away)
1x7 (two steps away)
설명
인접한 셀은 공유 벽에 대해 동의하지 않을 수 있습니다. 따라서 정사각형의 남쪽 가장자리는 벽이 될 수 있지만 정사각형의 남쪽 가장자리는 막히지 않습니다. 원래 디자인에서 나는 이것을 특징으로 생각했습니다. 단방향 문이나 보이지 않는 벽과 같은 흥미로운 아이디어를 허용합니다. 이 단순화를 위해 동일한 규칙을 따르십시오. 탐색 및 렌더링의 경우, 사용자가 직면 한 방향으로 가장 가까운 셀의 가장자리 상태에만주의하십시오 .
"음영"으로보기가 훨씬 좋습니다. 따라서 전체 블록의 경우 유니 코드 2593 ▓ 및 2591 alternate를 대체하거나 사용
X
하고+
구현이 ASCII 인 경우 사용 하십시오.유니 코드 삼각형 문자 (25E2, 25E3 ◣, 25E4 ◤, 25E5 ◥)는이를 그리기위한 약간 불충분합니다. 음영 처리 된 변형이없는 것 외에도 고정 너비 글꼴에서도 문자의 너비 만 늘리고 전체 높이는 늘리지 않습니다. 내가 원하는 대각선에 전체 블록이나 슬래시 문자 또는 선택한 것을 그릴 수 있습니다. 색상을 통합하고 음영 대신 이러한 문자를 사용하는 흥미로운 창의적인 솔루션.
가장 바깥 쪽 벽이 연주 영역을 경계로 설정되어 있다고 가정 할 수 있으므로 미로 외부에 아무것도 렌더링하지 않아도됩니다. 사양보다 멀리 떨어진 벽은 무시되고 빈 공간 만 남습니다.
(1,1)에서 북쪽을 향하면 정면에서 보이는 벽의 음영은 DARK 여야합니다. 맵의 인접한 벽에 다른 음영을 적용하여 모든 벽이 존재하는 경우 밝은 벽은 절대 어두운 벽과 접하지 않습니다.
내가 원래 의도했던 것을 대각선 문자와 모두로 실제로 수행하는 C-64 구현은 다른 진입 기준보다 우선합니다. :-)
예
위에 주어진 샘플 맵의 경우 ...
남쪽을 향한 (1,3)에서 :
/
/+
/X+
/XX+
/XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
\XXX+
\XX+
\X+
\+
\
남쪽을 향한 (3,2)에서 :
/* blank line */
X /
X /+
X /++
X +++
X +++
X +++
X +++
X +++
X +++
X +++
X \++
X \+
X \
/* blank line */
동쪽을 향한 (3,2)에서 :
/* blank line */
/
/X
/XX
XXX
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
XXX
\XX
\X
\
/* blank line */
북쪽을 향한 (2,3)에서 :
/
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
\
X
을 3, 2
바라 보는 관점에서 s 의 두 열을 설명해 주시겠습니까?