Oyunumda hem erişilebilir, güçlü hem de kodlaması hızlı bir programlama sistemini nasıl uygularım?


15

Şu anda, sistemlerinizi özel olarak programlayabilme özelliğine sahip olacak alan tabanlı bir sandbox oyunu üzerinde çalışıyorum. Bunu her iki şekilde de uygulamak istiyorum.

  1. erişilebilir,
  2. güçlü (minimum minimum turing-tamlık olurdu)
  3. hızlı kodlama.

Metin tabanlı diller genellikle yalnızca son iki gereksinimi karşılar ve ilk ikisini karşılayan bir görsel dil tasarlamak zor olmasa da, görsel diller yoğun fare kullanımı gerektirdiği için programlamak için bir acıdır. Bazı erişilebilir metin tabanlı diller olsa da, tam programcı olmayanların kendilerini programlamaya kolaylaştırabilmelerini istiyorum.


Biri size gerçekten bir örnek verebilirse şaşıracağım. Çünkü bunun gerçekten kapsamlı bir araştırmaya ihtiyacı olduğunu düşünüyorum (insanların mantığı nasıl uyguladığı ve ne yapmadığı, tüm bu insan merkezli şeyler ne olursa olsun psikolojik faktörler)
Sidar

2
Kimse Scratch'tan bahsetmedi mi?
Russell

2
Yakın bir oy önermeyeceğim, ancak bunun oldukça kolay bir şekilde "Sorunuzu cevaplayan bir kitabın tamamını hayal edebiliyorsanız, çok fazla şey soruyorsunuz" sorusunu sormamaya dikkat çekmek istiyorum SSS bölümünden; bu çok zor bir sorundur ve buradaki insanlar tavsiye sunabilirken, bu bir SE sitesinin sınırlarını aşması muhtemel bir sorundur.
Steven Stadnicki

Turing-bütünlüğünün Conway'in yaşam oyunu , Minecraft ve programlama için tasarlanmamış diğer sistemler ile elde edilebileceğini belirtmek gerekir .
Will

Yanıtlar:


10

Gerçekten, tüm özelliklere sahip olmanın tek yolu birden fazla arabirim uygulamaktır. Erişilebilir ve güçlü bir spektrumun iki ucudur. Bunu yapmanın en kolay yolu, yeni başlayanların sistemle sezgisel bir şekilde etkileşime girmesini sağlamak için ek bir arayüze sahip güçlü bir sistem uygulamaktır.

Yeni başlayanların görsel olarak programlamasına izin veren bir sisteme izin vermek, belki Lego Mindstorms programlama araçlarına benzer bir şey :

resim açıklamasını buraya girin

Sürükle / bırak bileşenleri bulunan yerler. Bileşenlerin giriş ve çıkışları vardır. Bileşenler ANDveya ORkapılar gibi basit şeyler veya yakındaki düşmanlar için bir test gibi daha karmaşık olabilir.

İdeal olarak görsel sunum, arka planda bir yazılı dil betiği derlemelidir. Bu, dili öğrenmek için de güçlü bir araç sunar. Bir acemi programlarını görsel olarak "yazabiliyorsa", ürettiği kodu okuyabilir ve bunu anlamaları ve üretilen kodu değiştirmeleri daha olasıdır. Sonunda sadece görsel araçların izin verdiğinden daha güçlü kod yazabilmek. Bu, kullanıcıları programlamaya kolaylaştırma gereksinimini karşılar.

Sistemin omurgası elbette yazılı bir dildir. Görsel araçlar, kullanıcılara basit bir şeyi programlamak için hızlı bir yol sağlamak ve yeni başlayanların başlamasına izin vermek içindir.

Yazılı dil, ileri düzey kullanıcıların gelişmiş şeyler yapmalarını sağlar. Ayrıca, kullanıcıların özel komut dosyaları oluşturarak kendi bileşenlerini oluşturmalarına izin verebilirsiniz. Ardından, hızlı programlama için yaptıkları bileşenleri hızlı ve kolay bir arayüzde yeniden kullanabilirler.

İyi şanslar! Kulağa eğlenceli bir proje gibi geliyor.


Açıklama için teşekkürler. Aslında NXT-G gibi bir şey yapmayı düşünüyordum, sadece deneyimlerimden böyle bir dilde karmaşık programlar yapmanın ne kadar zor olduğunu biliyorum. Görsel programları koda dönüştürme fikrini seviyorum, oyuncuların daha deneyimli olduklarında programlarına geri dönüp metinlerini düzenlemelerine izin verdim, bu yüzden muhtemelen kullanacağım.
Dimitriye98

1
Bir grafik gösterim dışında bazı kod kodu oluşturmak kolay ama bir komut dosyası (anlamlı ve okunabilir) grafik gösterim oluşturmak çok zor dikkat edin. Böylece muhtemelen çok kısıtlı bir kendi komut dosyası sözdizimi ile karşılaşacaksınız.
Imi

1
Tam da bu nedenle script-> visual uygulamak istemezsiniz. Görsel-> komut dosyası ile sopa.
MichaelHouse

Makro bloklar (giriş / çıkış sağlayan bloklar ve içine abitrary bloklar yerleştirme yeteneği), karmaşık programların oluşturulmasını kolaylaştırmak için hiyerarşi, kapsülleme ve yeniden kullanma sağlamak için kullanılabilir. Makroları makroların içine yerleştiremediğinizden emin olun veya bu gibi durumları tespit edin ... Bu sonsuz döngüleri tespit edemeyen en az bir program biliyorum.
Exilyth

5

Google'ın bloklarına bakmak isteyebilirsiniz , görsel öğeleri tanınabilir programlama terimleriyle birleştirirken, oldukça iyi bir erişilebilirlik düzeyini korurlar.

resim açıklamasını buraya girin

İlham almak için Labirent demosuna bir göz atabilirsiniz, programcı olmayan arkadaşlarımın çoğu, onu kullanarak bulmacalardan en iyi şekilde yararlanarak, kriterlerinizin en azından bir kısmını karşıladı.


Erişilebilirlik açısından ilginç bir dil, ancak programlama çok yavaş (sadece denedim) ...
Paşa

@PashaS Gerçekten de, sanırım her iki dünyanın en iyisini elde etmek için ödemeniz gereken bedelin bir parçası.
Quetzalcoatl

4

Bunun daha önce bahsedilmediğine şaşırdım, ancak MIT'in Scratch'ı kodlamak için hızlı bir blok arayüzü kullanıyor. Kullanıcıların kendi işlevlerini oluşturmasına izin veriyor ve çocuklara nasıl öğretileceğini öğretmek için inşa edilmiş bir dil için şaşırtıcı derecede karmaşık olabilir kodu.

Şablon , istediğiniz şeye daha benzer bir şey yapan blok kodlamanın başka bir örneğidir. Bu gibi bloklarla kodlama, Lego NXT tarafından kullanılanlar gibi görsel programlama arayüzlerinden çok daha verimli ve daha az zaman alıcıdır. Şablon, kullanıcıların Actionscript veya bloklar halinde kodlamalarına izin verir.

Resim eksikliği için özür dilerim, henüz resim yayınlamak için yeterli üne sahip değilim.


2

BPEL programlama dili görsel temsile ve onunla çalışan birçok araca sahiptir. Bu bir programlama dili değil, bir iş akışı dilidir, ancak turing tamamlanmıştır. Ayrıntılıdır, ancak hem programcılar hem de iş adamları için yazmak kolaydır ve görselden metinsel forma kolayca çevrilebilir. İyi bir oyun dili yaratacağını sanmıyorum, ancak ilham kaynağı olabilir. BPEL motorlarının ve araçlarının miktarı düşünüldüğünde, bazı fikirleri ve / veya kodları yeniden kullanmak mümkün olmalıdır.

BPEL benzeri dil, yönlendirme ve bağlantı sistemleri gibi programlama gibi hissetmeyecektir. Böylece, aralarında biraz mantık bulunan bir silah sistemine bağlı bir hedefleme sisteminiz olabilir.


+1: BPEL'in kendisini savunmasam da, yaklaşımı tam olarak vereceğim cevaptı. Hem metin olarak hem de görsel olarak temsil edilmesi kolay olan ve daha "normal" programlama paradigmalarından daha fazla olay yönlendirmesine / yanıtına odaklanan son derece düzenli dil.
Sean Middleditch

1

Bu yaklaşımı düşünün:

  1. Komut dosyası mantığınızın basit kural tabanlı mekanikte ifade edilebilir olduğundan emin olun. Örneğin, "Koşullar" ile ilişkili oynanış sırasında, "Doldurulması" ve ardından "Eylemler" yürütülmesi (utanmadan Starcraft 2 Editor'dan çalınması) gerçekleşen "Tetikleyiciniz" vardır.
  2. Ardından, önceden tanımlanmış bazı İşlemleri / Koşulları / Tetikleyicileri sürükleyebileceğiniz ve böylece insanların genellikle yapmak istedikleri kullanım durumlarının% 90'ını oluşturabileceğiniz bir kullanıcı arayüzü sağlayın.
  3. Şimdi Lua, Python veya C # gibi entegre güçlü ve popüler komut dosyası motorları edinin
  4. Son olarak, bu İşlemler / Koşullar / Tetikleyicilerden birkaç düzinelerce kendinizi bu dilde yazın. Özelleştirici kullanıcının bunları ve yeni Eylemleri drag'n'drop düzenleyicinize kolayca kopyalayıp yapıştırabildiğinden, düzenleyebildiğinden ve entegre edebildiğinden emin olun.
  5. Muhtemelen Tetikleyicilerinizi, Koşullarınızı ve İşlemlerinizi parametreleştirmek istersiniz ve bu nedenle bu oyunlardan birkaç daha fazla ilkeye ihtiyacınız vardır, örneğin "GameObject", "Position", "Number" veya "String". Kullanıcı arayüzünde, bu parametreleri atamak için bazı iletişim kutularına ihtiyacınız olacaktır, ancak bu, UI işlemleri aracılığıyla tüm komut dosyalarını oluşturmak zorunda kalacağınızdan çok daha az iştir.

Bu, tüm şekeri çok fazla acı çekmeden almanın en hızlı yolu hakkında. Click''drag noobs yanı sıra gemide vim-geeks olsun. Eğer mekaniği basit tutarsanız (örn. Tetikleyici -> Durum -> Eylem), o zaman yıllarını güçlü ve hala kullanımı kolay bir grafik komut editörü için bir kullanıcı arayüzü geliştirmek için harcamanız gerekmez.

Ne demek istediğimi açıklığa kavuşturmak için bazı örnekler:

  • Tetikleyici şu şekilde olabilir: "Oyun Çerçevesi Başlatıldı", "Oyun yüklendi", "Birim oluşturuldu", "Birim yok edildi", "Oyuncu hasar gördü" vb. Tetikleyiciler genellikle bazı parametrelere sahiptir (örneğin, oluşturulan birim, oluşturulan GameObject öğesini alır)
  • Koşulların tümü standart boole ve temel aritmatik koşullardır (ve / veya / değil / eşittir / daha büyük ...) artı "Ünite tam sağda" veya "En az iki Oyuncu bağlı" gibi oyununuzda bulduğunuz bazı tipik koşullardır. Koşullar genellikle kullanıcının doldurması gereken parametreye sahiptir (kullanıcı arayüzü kullanarak)
  • Eylemler, bazı basit parametreler de alabilen komut dosyalarıdır. "Kamerayı XXX'a kaydır", "Birim Y'yi Öldür", "Oyun bitti", "Tetikleyici Yürüt" ve "İşlemleri X, Y, Z ... sırayla" gibi

Programlamanın eklentiler için değil, oyundaki bilgisayarlar için olduğunu unutmayın. Yine de teşekkür ederim.
Dimitriye98

Görüyorum ki ... ilginç bir oyun yaklaşımı gibi geliyor;). Oyuna dalmayı kırmadan kodlama yetenekleri sağlamaya çalışan "Code Hero" veya "Garry's Mod" gibi benzer oyunlara baktınız mı? Her neyse, temel tavsiyemi kurtarabilir ve sorunu komut dosyası ve kullanıcı arayüzü parçalarına bölebilirsiniz. Oyununuzda iyi şanslar. :)
Imi

Kodlama, daldırma işlemini çok fazla kırmaması gereken oyun içi bilgisayar konsollarında yapılacaktır. İsteyen kullanıcılar oyun dışında kod yazabilseler de, kodu kaydettiklerine veya oynadıkları sunucuya aktarabilirler.
Dimitriye98
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.