Çocukken Intellivision oyunu Advanced Dungeons and Dragons: Treasure of Tarmin'i oynadım . 3 boyutlu grafikler sizi şok edici gerçekçilikle birinci şahıs bakış açısına sokar:
Ama sonra bir C-64 aldım. Ekranda imleç yaparak, rengi Ctrl tuşu ve bir rakamla ayarlayarak ve istediğim herhangi bir yere semboller koyarak 40x25 karakter ızgarasını çizebildim (neden bunu bash
yapmama izin vermiyorsun?) . Karakter setinde üçgen bileşenler ve katı blok bileşenler vardı. Bu yüzden, bir kişinin bu ortam üzerinden bir ızgarada perspektifinin bir görüntüsünü nasıl üretebileceğini anlayabildim.
Neredeyse otuz yıllık spekülasyonu, bu hafta "Zindan İnşaat Seti" hakkında spiral ciltli defter kağıdında buldum:
( GÜNCELLEME : Dikkatli okuyucular bunun eğimli parçalar üzerinde bir arada durmadığını fark edecektir. Düzeltilen sayılar aşağıda verilmiştir.)
Tarmin Hazinesi bir ızgarada oynamasına rağmen, duvarlar sadece ızgara karelerinin kenarlarında vardı . Baytların ne olduğunu öğrendikten sonra, haritayı bayttan çıkarırsam ... haritadaki her karenin her bir kenarı için dört olası duruma sahip olabileceğini fark ettim:
- engellenmemiş
- Duvar
- Kapı
- Başka bir şey?
(Dün geceye kadar) yazmak için hiç uğraşmadım. Başkalarının denemesinin eğlenceli olabileceğini düşündüm.
Bu yüzden göreviniz benim karakterimi düzelten bir karakter modu tabanlı labirent oluşturucuyu uygulamak (düzeltildi !!) spesifikasyonumu ... ama 2013 teknolojilerini kullanmak.
Giriş
Teknik özellikler kapılar için oluşturmayı tanımlamadığından, sadece seçeneklerin duvar ve duvar olmadığını varsayarız. Basit olması için, girdiniz şuna benzeyen dizelerden oluşan bir haritadır:
WN.. .N.. .N.. .N.. .N.E
W... .... .... ..S. ...E
W... .N.E W... .N.. ...E
W... .... .... .... ...E
W.S. ..S. ..S. ..S. ..SE
Bu 5x5'lik bir harita olurdu. Sol üst köşede (1,1) W
est ve N
orth duvar seti vardır. Sağ alt köşenin (5,5) dış S
kısmı veE
ast duvar seti bulunmaktadır.
Harita navigasyonu olmadan bu daha az eğlencelidir. Yani, en azından, oyuncunuzu kuzeye bakacak şekilde (1,1) yerleştirin ve onlara şunları sunun:
[F]orward, [B]ackward, turn [L]eft, turn [R]ight or [Q]uit?
Her adımda, dizüstü bilgisayar kağıdı özellikleri tarafından tanımlanan şekilde birinci şahıs perspektifinin 16x15'lik bir görüntüsünü alın. Saymak zorunda kalmamak için, üç mesafedeki düz duvarların boyutu:
14x13 (directly in front of you; e.g. wall is in same cell)
8x7 (one step away)
6x5 (two steps away)
Eğimli duvarların sınırlayıcı boyutları:
1x15 (your direct left or right; e.g. wall is in same cell)
3x13 (one step away)
1x7 (two steps away)
Açıklamalar
Bitişik hücreler ortak duvarlar konusunda aynı fikirde olmayabilir. Yani bir karenin güney kenarı bir duvar olabilir, güneydeki karenin kuzey kenarı engellenmez. Orijinal tasarımda bunu bir özellik olarak gördüm: tek yönlü kapılar gibi ilginç fikirlere izin veriyor ... ya da sadece içinden geçtikten sonra görünen görünmez duvarlara izin veriyor. Bu basitleştirme için aynı kuralı izleyin: gezinme ve oluşturma için yalnızca size en yakın hücredeki yüzleştiğiniz yöndeki kenar durumuna dikkat edin .
Görünümü "gölgeleme" ile çok daha iyi. Yani tam bloklar, alternatif ya Unicode 2593 ▓ ve 2591 ░ veya kullanım için
X
ve+
eğer uygulama ASCII olduğunu.Unicode üçgen karakterler (25E2 ◢, 25E3 ◣, 25E4 ◤, 25E5 ◥) bunu çizmek için biraz topal. Gölgeli varyantlara sahip olmanın yanı sıra, sabit genişlikli yazı tiplerinde bile genellikle karakterin genişliğini ve tam yüksekliğini uzatmazlar. Çapraz bloklar istediğim yerlerde tam bloklar çizebilir, karakterleri ya da seçtiğiniz bir şeyi kesebilirsiniz. Renkleri birleştiren ve gölgelendirme yerine bu karakterleri kullanan ilginç yaratıcı çözümler takdir.
En dış duvarların oyun alanını sınırlamak için ayarlandığını varsayabilirsiniz, bu yüzden labirent dışında bir şey oluşturma konusunda endişelenmenize gerek yoktur. Spesifikasyondan daha uzakta olan tüm duvarlar göz ardı edilir ve sadece boş alan bırakın.
(1,1) 'de kuzeye bakacak olursanız, doğrudan önünüzde gördüğünüz duvarın gölgesi KOYU olmalıdır. Haritadaki bitişik duvarlarda alternatif gölgeleme, böylece tüm duvarlar mevcutsa, açık renkli bir duvar asla karanlık bir duvara dayanmaz.
Aslında istediğim şeyi yapan bir C-64 uygulaması ... diyagonal karakterler ve hepsi ... diğer giriş kriterlerini gölgede bırakacak. :-)
Örnekler
Yukarıda verilen örnek harita için ...
(1,3) güneye bakarken:
/
/+
/X+
/XX+
/XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
\XXX+
\XX+
\X+
\+
\
(3,2) güneye bakarken:
/* blank line */
X /
X /+
X /++
X +++
X +++
X +++
X +++
X +++
X +++
X +++
X \++
X \+
X \
/* blank line */
(3,2) doğuda:
/* blank line */
/
/X
/XX
XXX
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
+++++XXXXXX+XXX+
XXX
\XX
\X
\
/* blank line */
(2,3) kuzeye bakarken:
/
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
X++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
++++++++++++++X
\
X
bakış açısında iki s sütununu açıklar 3, 2
mısınız?