Şu anda Bot Land için bazı senaryolar yazıyorum . Bot Land, birimlerinizi bir fare ve klavye ile kontrol etmek yerine, bir API aracılığıyla botlarınızı kontrol etmek için kod yazdığınız ve daha sonra botlarınızın başkalarının botlarıyla savaştığı gerçek zamanlı bir strateji oyunudur. SC2'deki birimlere aşina iseniz, yanıp sönen stalklara, kuşatma tanklarına, sağlık görevlilerine ve ultralisklere benzer botlar oluşturabilirsiniz. (Yazılım mühendisleri için oldukça eğlenceli bir oyundur, ancak bu sorunun kapsamı dışındadır.)
Bot kontrolünün artan üç karmaşıklık seviyesi vardır: varsayılan bir AI, Scratch benzeri bir programlama dili ve BotLandScript adı verilen azaltılmış bir JavaScript seti. BotLandScript için yerleşik düzenleyici makul olsa da, tüm kodunuzu her yerde küresel üst düzey işlevlerle tek bir dosya olarak yüklemeniz gerekir . Doğal olarak, kodunuz uzamaya başlarsa ve farklı botlar aynı işlevleri paylaşırsa, bu bir süre sonra acı vermeye başlar.
Birden çok bot için kod yazmayı kolaylaştırmak, çıplak JS'de kodlarken kasıtsız hata olasılığını azaltmak ve diğer oyuncuları yenme şansımı artırmak için, her bir botum için ortak bir kütüphane ve kod sağlamak üzere yukarıdaki TypeScript projesini ayarladım . Geçerli dizin yapısı yaklaşık olarak aşağıdaki gibi görünür:
lib/
bot.land.d.ts
common.ts
BlinkStalker/
BlinkStalker.ts
tsconfig.json
Artillery/
Artillery.ts
tsconfig.json
SmartMelee/
SmartMelee.ts
tsconfig.json
lib
, botlar arasında paylaşılan ortak koddur ve (TS dışı) Bot Land API'sı için TypeScript tanımları sağlar. Daha sonra her bot kendi klasörünü alır, bir dosya bot kodunu ve diğeri bir kazan plakasını içerir tsconfig.json
:
{
"compilerOptions": {
"target": "es3",
"module": "none",
"sourceMap": false,
"outFile": "bot.js"
},
"files": [
"MissileKite.ts"
],
"include": [
"../lib/**/*"
]
}
Her biri tsconfig.json
oluşturulduğunda bot.js
, tüm kodun yanı sıra botun kendisinden aktarılan kodu içeren bir karşılık gelir common.js
. Bu kurulum, birkaç nedenden ötürü yetersizdir: çok sayıda yinelenen kazan plakası gerektirir, yeni botlar eklemeyi zorlaştırır, her bot için çok fazla gereksiz kod içerir ve her botun ayrı ayrı inşa edilmesini gerektirir.
Ancak, şu ana kadar yaptığım araştırmaya dayanarak, istediğimi yapmanın kolay bir yolu yok gibi görünüyor. Özellikle, yeni tsc -b
seçeneğin ve referansların kullanılması işe yaramaz, çünkü bu kodun modüle edilmesini gerektirir ve Bot Land en üst düzeyde tanımlanmış tüm işlevlere sahip tek bir dosya gerektirir.
Aşağıdakilerden mümkün olduğunca fazlasını elde etmenin en iyi yolu nedir?
- Yeni bir bot eklemek için yeni bir plaka gerekmez (örn.
tsconfig.json
Bot başına no ) import
Kullanılmayan kodların çıkışını önlemek için yaygın işlevler için kullanın , ancak ...- Hala tüm işlevleri Bot Land'in özel biçiminde tek bir dosya olarak çıktılar
- Her bot için bir tane olmak üzere birden fazla çıktı dosyası üreten tek bir oluşturma adımı
- Bonus: Derleme sürecini VS Kodu ile entegre etme.
tasks.json
Her bir alt projenin inşası için halihazırda ilgili bir kazan plakası bulunmaktadır.
Cevabın muhtemelen Grunt gibi bir şey içerdiğini tahmin ediyorum tsc
, ancak emin olmak için yeterince bilmiyorum.
bot.js
mı?
tsconfig.json
. Aktarılan bot dosyaları herhangi bir adla adlandırılabilir, tercihen orijinal dosyanın .js sürümü. Ben şimdi çıkış repo bu şekilde kurmak var build/MissileKite.js
.
tsconfig-gas.json
orada bakmak için ilgili bir şey?
<root>/MissileKite.ts
)