เมื่อผมเป็นเด็กผมเล่นเกม Intellivision สูงดินและมังกร: สมบัติของ Tarmin กราฟิก 3 มิติทำให้คุณอยู่ในมุมมองของมุมมองบุคคลที่หนึ่งด้วยความสมจริงที่น่าตกใจ:
แต่ฉันได้รับ C-64 และฉันก็สามารถที่จะวาดภาพบนตาราง 40x25 ตัวอักษรโดย cursoring รอบ ๆ หน้าจอการตั้งค่าสีที่มีปุ่ม Ctrl และหลักและวางสัญลักษณ์ใดก็ได้ผมอยาก(ทำไมไม่bash
ให้ฉันทำอย่างนั้น?) ชุดตัวละครนั้นมีส่วนประกอบเป็นรูปสามเหลี่ยมและส่วนประกอบที่เป็นของแข็ง ดังนั้นฉันจึงสามารถให้เหตุผลว่าใครจะสร้างมุมมองของคน ๆ หนึ่งในกริดผ่านสื่อนั้น
ฉันพบสเป็คเก่าแก่เกือบสามทศวรรษในสมุดบันทึกที่มีเกลียวเป็นเกลียวเกี่ยวกับ "ชุดก่อสร้าง Dungeon" ในสัปดาห์นี้:
( อัปเดต : ผู้อ่านระวังจะสังเกตเห็นว่าสิ่งนี้ไม่ได้อยู่ด้วยกันในส่วนที่เอียง, หมายเลขที่ถูกต้องมีให้ด้านล่าง
แม้ว่า Treasure of Tarmin จะถูกเล่นบนกริด แต่กำแพงนั้นมีอยู่ที่ขอบสี่เหลี่ยมกริดเท่านั้น ฉันรู้ว่าถ้าฉันสร้างแผนที่จากไบต์ ... แต่ละสี่เหลี่ยมจัตุรัสบนแผนที่อาจมีสี่สถานะที่เป็นไปได้สำหรับแต่ละขอบ:
- ไม่มีอะไรขัดขวาง
- ผนัง
- ประตู
- อื่น ๆ อีก?
ฉันไม่เคยเขียนมันเลย (จนกระทั่งเมื่อคืน) ฉันคิดว่ามันน่าสนุกสำหรับคนอื่นที่จะลอง
ดังนั้นงานของคุณคือการใช้ตัวช่วยสร้างเขาวงกตโหมดตัวละครที่ใช้สเปค(แก้ไข !!)ของฉัน... แต่ใช้เทคโนโลยีของปี 2013
อินพุต
เนื่องจากสเป็คไม่ได้กำหนดการเรนเดอร์สำหรับประตูเราจะสมมติเพียงตัวเลือกเท่านั้นคือแบบ Wall-and-Not-Wall เพื่อความเรียบง่ายอินพุตของคุณคือแผนที่ที่ประกอบด้วยเส้นของสตริงที่มีลักษณะดังนี้:
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
outh และE
ast
มันสนุกน้อยกว่ามากหากไม่มีการนำทางแผนที่ อย่างน้อยที่สุดให้วางเครื่องเล่นของคุณที่ (1,1) หันหน้าไปทางทิศเหนือแล้วเสนอ:
[F]orward, [B]ackward, turn [L]eft, turn [R]ight or [Q]uit?
ในแต่ละขั้นตอนเอาต์พุตจอแสดงผลขนาด 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)
ชี้แจง
เซลล์ที่อยู่ติดกันอาจไม่เห็นด้วยกับผนังที่ใช้ร่วมกัน ดังนั้นขอบด้านใต้ของจตุรัสอาจเป็นกำแพงในขณะที่ขอบด้านเหนือของสี่เหลี่ยมจัตุรัสไปทางทิศใต้ของมันจะไม่มีสิ่งกีดขวาง ในการออกแบบดั้งเดิมฉันคิดว่านี่เป็นคุณสมบัติ: มันช่วยให้ความคิดที่น่าสนใจเช่นประตูทางเดียว ... หรือกำแพงที่มองไม่เห็นที่ปรากฏหลังจากคุณผ่านพวกเขาเท่านั้น สำหรับความเรียบง่ายนี้ให้ทำตามกฎเดียวกัน: สำหรับการนำทางและการให้ความสนใจจ่ายเพียงสถานะขอบบนมือถือใกล้เคียงกับคุณในทิศทางที่คุณกำลังเผชิญ
มุมมองดีขึ้นมากด้วย "การแรเงา" ดังนั้นสำหรับบล็อกเต็มของคุณให้เลือก Unicode 2593 ▓และ 2591 ░หรือใช้
X
และ+
ถ้าการใช้งานของคุณคือ ASCIIอักขระสามเหลี่ยม Unicode (25E2 ◢, 25E3 ◣, 25E4 ◤, 25E5 ◥) เป็นบิตที่อ่อนแอสำหรับการวาดภาพนี้ นอกจากนี้ยังไม่มีตัวแปรสีเทาพวกเขามักจะยืดเฉพาะความกว้างของตัวละครและไม่ใช่ความสูงเต็ม ... แม้ในแบบอักษรความกว้างคงที่ คุณสามารถวาดบล็อคเต็มหรืออักขระทับหรือสิ่งที่คุณเลือกในสถานที่ที่ฉันต้องการเส้นทแยงมุม โซลูชันสร้างสรรค์ที่น่าสนใจที่รวมสีและใช้อักขระเหล่านี้แทนที่จะเป็นที่นิยม
คุณอาจสันนิษฐานว่ากำแพงชั้นนอกสุดถูกตั้งค่าให้ผูกเข้ากับพื้นที่เล่นดังนั้นคุณไม่ต้องกังวลกับการทำอะไรนอกเขาวงกต กำแพงใด ๆ ที่อยู่ห่างจากคุณมากกว่าสเป็คจะถูกละเว้นและปล่อยพื้นที่ว่างเปล่า
เงาของผนังที่คุณเห็นตรงหน้าถ้าหันหน้าไปทางทิศเหนือที่ (1,1) ควรจะมืด การแรเงาทางเลือกบนผนังที่อยู่ติดกันในแผนที่เช่นถ้ามีกำแพงทุกห้องอยู่แล้วกำแพงไฟจะไม่ติดกับกำแพงมืด
การนำ 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
หันหน้าไปทางทิศใต้ได้ไหม