Khi tôi còn là một đứa trẻ, tôi đã chơi trò chơi Intellivision Advanced Dungeons and Dragons: Treasure of Tarmin . Đồ họa 3 chiều đưa bạn vào góc nhìn góc nhìn thứ nhất với chủ nghĩa hiện thực gây sốc:
Nhưng sau đó tôi có một chiếc C-64. Và tôi đã có thể vẽ trên lưới ký tự 40x25 bằng cách nguyền rủa xung quanh màn hình, đặt màu bằng phím Ctrl và chữ số, và đặt các ký hiệu ở bất cứ đâu tôi muốn (tại sao tôi không bash
cho phép tôi làm điều đó?) . Bộ ký tự có các thành phần hình tam giác và các thành phần khối rắn. Vì vậy, tôi đã có thể suy luận về cách người ta có thể tạo ra kết xuất phối cảnh của một người trong một lưới thông qua phương tiện đó.
Tôi đã tìm thấy thông số kỹ thuật gần ba thập kỷ này, trên tờ sổ tay có hình xoắn ốc, về "Bộ xây dựng ngục tối" trong tuần này:
( CẬP NHẬT : Người đọc cẩn thận sẽ nhận thấy rằng điều này không hoàn toàn kết hợp với các phần nghiêng. Các số chính xác được cung cấp dưới đây.)
Mặc dù Treasure of Tarmin được chơi trên lưới, các bức tường chỉ tồn tại trên các cạnh của hình vuông lưới. Tìm hiểu các byte là gì, tôi nhận ra rằng nếu tôi tạo bản đồ ra khỏi byte ... thì mỗi ô vuông trên bản đồ có thể có bốn trạng thái có thể có cho mỗi cạnh của nó:
- Không bị cản trở
- Tường
- Cửa
- Thứ gì khác?
Tôi chưa bao giờ đi xung quanh để viết nó (cho đến tối qua). Tôi nghĩ rằng nó có thể là niềm vui cho những người khác để thử.
Vì vậy, nhiệm vụ của bạn là triển khai trình kết xuất mê cung dựa trên chế độ nhân vật thực hiện (đã sửa !!) của tôi thông số kỹ thuật ... nhưng sử dụng các công nghệ của năm 2013.
Đầu vào
Bởi vì thông số kỹ thuật không xác định kết xuất cho cửa, chúng tôi sẽ chỉ giả sử các tùy chọn duy nhất là tường và không tường. Để đơn giản, đầu vào của bạn là một bản đồ bao gồm các chuỗi các chuỗi trông như thế này:
WN.. .N.. .N.. .N.. .N.E
W... .... .... ..S. ...E
W... .N.E W... .N.. ...E
W... .... .... .... ...E
W.S. ..S. ..S. ..S. ..SE
Đó sẽ là bản đồ 5x5. Góc trên bên trái (1,1) có bộ tường W
est và N
orth. Góc dưới bên phải (5,5) có phần ngoài S
vàE
tường ngoài ast.
Điều này là ít thú vị hơn đáng kể với không có điều hướng bản đồ. Vì vậy, tối thiểu, đặt người chơi của bạn ở (1,1) hướng về phía bắc và cung cấp cho họ:
[F]orward, [B]ackward, turn [L]eft, turn [R]ight or [Q]uit?
Ở mỗi bước, xuất ra màn hình 16x15 của phối cảnh ngôi thứ nhất, như được xác định bởi thông số giấy máy tính xách tay. Để giữ cho bạn khỏi phải đếm, kích thước của các bức tường phẳng ở ba khoảng cách là:
14x13 (directly in front of you; e.g. wall is in same cell)
8x7 (one step away)
6x5 (two steps away)
Các kích thước giới hạn của các bức tường nghiêng là:
1x15 (your direct left or right; e.g. wall is in same cell)
3x13 (one step away)
1x7 (two steps away)
Làm rõ
Các tế bào liền kề có thể không đồng ý về các bức tường được chia sẻ. Vì vậy, cạnh phía nam trên một hình vuông có thể là một bức tường, trong khi cạnh phía bắc trên hình vuông ở phía nam của nó sẽ không bị cản trở. Trong thiết kế ban đầu tôi coi đây là một tính năng: nó cho phép những ý tưởng thú vị như cửa một chiều ... hoặc những bức tường vô hình chỉ xuất hiện sau khi bạn đi qua chúng. Để đơn giản hóa này, hãy tuân theo quy tắc tương tự: để điều hướng và kết xuất, chỉ chú ý đến trạng thái cạnh trên ô gần bạn nhất theo hướng bạn đang đối mặt .
Chế độ xem tốt hơn rất nhiều với "bóng". Vì vậy, đối với các khối đầy đủ của bạn, hãy thay thế Unicode 2593 và 2591 hoặc sử dụng
X
và+
nếu triển khai của bạn là ASCII.Các ký tự tam giác Unicode (25E2, 25E3, 25E4, 25E5) là một chút khập khiễng khi vẽ điều này. Bên cạnh việc không có bất kỳ biến thể bóng mờ nào, chúng thường chỉ kéo dài chiều rộng của ký tự và không có chiều cao đầy đủ ... ngay cả trong các phông chữ có chiều rộng cố định. Bạn có thể vẽ các khối đầy đủ hoặc dấu gạch chéo hoặc một cái gì đó bạn chọn ở những nơi tôi muốn đường chéo. Các giải pháp sáng tạo thú vị kết hợp màu sắc và sử dụng các ký tự này thay vì đánh giá cao.
Bạn có thể cho rằng các bức tường ngoài cùng được đặt để giới hạn khu vực chơi, vì vậy bạn không phải lo lắng về việc hiển thị bất cứ thứ gì bên ngoài mê cung. Bất kỳ bức tường nào cách xa bạn hơn thông số kỹ thuật đều bị bỏ qua và chỉ để lại khoảng trống.
Màu của bức tường bạn nhìn thấy ngay trước mặt nếu hướng về phía Bắc tại (1,1) phải là DARK. Bóng xen kẽ trên các bức tường liền kề trong bản đồ, sao cho nếu tất cả các bức tường đều có mặt thì một bức tường sáng sẽ không bao giờ có một bức tường tối.
Việc triển khai C-64 thực sự thực hiện những gì tôi dự định ban đầu ... với các ký tự chéo và tất cả ... sẽ vượt qua mọi tiêu chí nhập cảnh khác. :-)
Ví dụ
Đối với bản đồ mẫu được đưa ra ở trên ...
Tại (1,3) hướng về phía nam:
/
/+
/X+
/XX+
/XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
\XXX+
\XX+
\X+
\+
\
Tại (3,2) hướng về phía nam:
/* blank line */
X /
X /+
X /++
X +++
X +++
X +++
X +++
X +++
X +++
X +++
X \++
X \+
X \
/* blank line */
Tại (3,2) hướng về phía đông:
/* blank line */
/
/X
/XX
XXX
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
XXX
\XX
\X
\
/* blank line */
Tại (2,3) hướng về phía bắc:
/
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
\
X
s trong quan điểm của bạn về 3, 2
phía nam?