Bu, Ubuntu Online, Fedora Online, Windows çevrimiçi emülatörü veya MAC OS çevrimiçi emülatörü gibi birden fazla ücretsiz çevrimiçi iş istasyonumuzdan birini kullanarak OnWorks ücretsiz barındırma sağlayıcısında çalıştırılabilen dicelab komutudur.
Program:
ADI
dicelab - zar atma planlarını yuvarlayın ve inceleyin
SİNOPSİS
zar laboratuvarı [seçenekler] [-F ]
SEÇENEKLER
-h, --yardım et, -?
bir yardım mesajı yazdır
--versiyon, -v
sürüm numarasını göster
--hesap, -c
dağılımı hesapla
--rulo, -r
zarları belirtildiği gibi atın. Bu, başka bir işlem talep edilmediğinde de kullanılacaktır
--eval, -e
İstatistiksel bir dağılım elde etmek için birçok kez yeniden kayıt yapın ve sonuçları toplayın.
değerlerimiz
--saymak, -n
--eval için yeniden kayıt sayısını belirtin, varsayılan olarak 10000'dir
--baskı-ağacı, -p
ayrıştırma ağacını yazdırın (hata ayıklama amacıyla)
-f
şema açıklamasını stdin yerine dosyadan okuyun
TANIM
Dicelab, zar atma şemasının açıklamasını bir dosyadan veya dosya yoksa stdin'den okur
belirtilir ve daha sonra bu şemayı yuvarlar veya inceler.
HIZLI BAŞLANGIÇ
Tek kalıp ruloları, 'd' operatörü ve ardından üzerindeki yüz sayısı kullanılarak yapılabilir.
atılacak zar. Örneğin, d6 altı kenarlı tek bir zar atacak ve d2 bir yazı tura atacak.
İfadeler standart aritmetik operatörler tarafından değiştirilebilir. d10-1 bir değer verecektir
0 ile 9 arasında (dahil). Aynı türde birden fazla zar atmak için,
tekrarlama operatörü '#'. 2#d6 iki tane altıgen zar atacak; bu 2*d6 ile aynı değil,
yalnızca tek bir zar atar ancak sonucu ikiyle veya 2d6 ile çarpar, bu da
sözdizimi hatası. Altı yüzlü iki zarın toplamını elde etmek için sum(2#d6) komutunu kullanın.
TAM SÖZDİZİMİ
::=
-?[0-9]+
::=
[A-Za-z]+
::=
|
| ( )
| -
| +
| -
| *
| /
| %
| ^
| .
| D
| toplam
| dürtükleme
| saymak
::=
#
| ( )
| ..
| ,
| perma
| düzenlemek
| devir
| (bırak|tut)? Düşük
| (bırak|tut)? yüksek
| (bırak|tut)? Birinci
| (bırak|tut)? son
| (bırak|tut)? ==
| (bırak|tut)? !=
| (bırak|tut)? <
| (bırak|tut)? >
| (bırak|tut)? <=
| (bırak|tut)? >=
| eğer Daha sonra başka
| izin vermek = içinde
| sırasında = Yapmak
| her biri için içinde Yapmak
::=
::=
| ;
Yorumlar C'de olduğu gibi çift eğik çizgi (//) kullanılarak eklenebilir.
anlambilim
+ - * / ^
Bunlar toplama, çıkarma için bilinen ikili aritmetik operatörlerdir.
çarpma, bölme ve üs alma. Bölme sıfıra doğru yuvarlanır.
Örnekler: 5+7, d6-1, 2^10
-
Bu tekli eksi operatörüdür. Örnekler: -1
%
Bu modül operatörüdür. x % y, x'in y'ye bölümünden kalanını verir.
Örnekler: %11, d2%6
.
Bu skaler birleştirme operatörüdür. X . y, xy'yi, yani x'in birleşimini verir
ve y. Örnekler: -10.9, d6.d6
d
Bu kalıp rulosu operatörüdür. dn, n-taraflı bir rulonun tek bir rulosunun değerini verir
ölmek. Örnekler: d6, 2#d6
toplam dürtme
Bunlar genişletilmiş toplam ve çarpım operatörleridir. Eğer e bir ifade ise, e'yi toplayın ve
e'nin üyelerinin toplamını ve e'nin üyelerinin çarpımını verirsek,
sırasıyla. Örnekler: toplam(1..100), prod(3#d6)
saymak
Bu liste boyutu operatörüdür. Eğer e bir ifade ise, o zaman e sayımı şunu verir:
e. üye sayısı Örnekler: say(1,2,3), say(== 6 10#d6)
#
Bu liste tekrarlama operatörüdür. Eğer n negatif olmayan bir skaler ise ve e bir
ifadesi varsa, n#e, e'nin n değerlendirmesinin sonuçlarını içeren bir listedir.
Örnekler: 10#8, 3#d10
..
Bu aralık operatörüdür. Eğer x ve y skaler ise, x..y aşağıdakilerden oluşan bir listedir:
[x,y] aralığının. Eğer x>y ise sonuç listesi boştur. Örnekler: 1..10,
4..d10
,
Bu liste birleştirme operatörüdür. v,u hepsinden oluşan listeyi verir
v'nin üyeleri ve ardından u'nun tüm üyeleri. Örnekler: 1,2 4,(3#d6)
tür
Bu liste sıralama operatörüdür. sort e, e listesini artan düzende sıralar.
Örnekler: sıralama(10#d6)
perma
Bu liste permütasyon operatörüdür. sort e rastgele bir permütasyonla sonuçlanır
liste e. Bir listeyi karıştırmak için perma kullanın. Örnekler: izin(1..52)
devir
Bu, listeyi tersine çevirme operatörüdür. rev e aynı üyelerin bulunduğu bir listeyle sonuçlanır
e listesi gibi, ancak ters sırada. Örnekler: rev(1..10), rev sort(10#d8)
düşük yüksek
Bu operatörler listelerdeki en küçük ve en büyük değerleri bularak filtre görevi görür.
Eğer n negatif olmayan bir skaler ve e bir ifade ise, düşük ne en az n'yi verir.
e'nin üyeleri ve yüksek ne, e'nin n en büyük üyelerini verir. Örnekler: yüksek 3 5#d6
ilk son
Bu operatörler listelerin başlangıç ve son bölümlerini bularak filtre görevi görür. Eğer n
negatif olmayan bir skalerdir ve e bir ifadedir, o zaman ilk ne ilk n'yi verir
e'nin üyeleri ve son ne, e'nin son n üyesini verir. Örnekler: ilk 3
(1..10)
== != < > <= >=
Bu operatörler, verilenleri karşılayan listelerdeki değerleri bularak filtre görevi görür.
koşullar. Eğer x bir skaler ve e bir ifade ise == xe aşağıdakilerin listesini verir:
e'nin üyeleri x'e eşittir; != xe, e'nin x'e eşit olmayan üyelerinin listesini verir; < x
e, e'nin x'ten küçük üyelerinin listesini verir; > xe, e'nin üyelerinin listesini verir
x'ten büyük; <= xe, e'nin x'ten küçük veya ona eşit üyelerinin listesini verir; >=x
e, e'nin x'ten büyük veya ona eşit üyelerinin listesini verir. Örnekler: >= 3 5#d6
düşürmek tutmak
Bu operatörler listelerdeki filtreleri değiştirir. Fop bir filtre işlemi ise
e ifadesi, ardından fop e'yi koru, fop e ile aynı sonucu verir ve fop e'yi bırak değerlendirmeleri
daha az fop e tutmak için. Başka bir deyişle, bırakma filtre koşullarını geçersiz kılar ve
bunları doğruluyor. tutmak hiçbir zaman gerekli değildir ve yalnızca simetri için vardır. Örnekler:
toplam(düşük düşüş 1 4#d6)
izin
Bu değişken atama ve ikame operatörüdür. Eğer x bir değişkense ve e
ve f bir ifadedir, o zaman f'deki x = e'nin aşağıdaki sonuçlardan elde edilen listeyi vermesine izin verin:
f'yi, f'te x'in her ortaya çıkışı için ikame edilen e değeriyle değerlendirmek.
E'nin değerlendirilmesi ikameden önce yapılır. Örnekler: x*x'te x = d6 olsun
her biri için
Bu sınırlı yineleme operatörüdür. Eğer x bir değişkense ve e ve f ise
ifadeleri kullanırsanız, e do f'deki foreach x, atamanın sonucunda ortaya çıkan listeyi verir.
e'nin her bir üyesine x'i vermek ve f'yi değerlendirmek. Örnekler: c'de foreach x do x+1
süre
Bu sınırsız yineleme operatörüdür. Eğer x bir değişkense ve e ve f ise
ifadeleri kullanırsanız, x = e iken f do f v0,v1,...,vn listesidir, burada v0 sonuçtur
e ve vi+1'in değerlendirilmesi, vi'nin x'e atanması ve f'nin değerlendirilmesinin sonucudur,
boş olan ilk vi'de duruyoruz. Örnekler: while x=d6 do ((count <6 x)#d6)
if
Bu dallanma operatörüdür. Eğer e, f ve g ifadelerse, o zaman e ise o zaman f
Aksi takdirde g, e boş değilse f'yi verir, aksi takdirde g. Örnekler: if count(>4 2#d6) ardından
1 diğer 0
ÖRNEKLER
7'den büyük zar sayısını sayın:
sayım >7 5#d10
7'den büyük zar sayısını 1'e eşit zar sayısını çıkararak sayın:
c=5#d10 olsun (sayım >7 c)-(sayım ==1 c)
6 gelene kadar atış sayısını sayın:
say (x=d6 iken ((say <6 x)#d6))
Daha verimli bir şekilde 6 atılana kadar atış sayısını sayın:
say (while x=(d6/6) yap ((say <1 x)#(d6/6)))
Yeni bir D&D karakterinin yuvarlanma özellikleri:
6#sum(düşük düşüş 1 4#d6)
Oyuncuların İç Savaş Tugayı Serisindeki 11..66 moral kontrol tablosuna bakın:
d6.d6
3 d20'lerin ortancasını bulun:
yüksek 1 düşük 2 3#d20
3 saniyede yeniden yapılan 6d6:
toplam(while x=3#d6 do ((count ==6 x)#d6))
7 d10 atın ve aynı zarların en büyük toplamını bulun:
yüksek 7'de x = 10#d1 olsun (1..10'daki her y için toplam (==yx))
Fibonacci dizisi Fn = Fn-1 + Fn-2 ile tanımlanır ve F1 = F2 = 1'dir.
ilk yirmi Fibonacci sayısı:
n = 20 olsun
f = (1,1) olsun
foreach i in 1..n do
f = (f,toplam(yüksek 2 f)) olsun
if ==ni sonra f else ()
Risk, saldırganın 3d6 ve savunmacının 2d6 attığı savaşlara sahiptir. En yüksek
Saldırgan zarı, en yüksek defans zarı ve ikinci en yüksek saldırgan zarı ile eşleştirilir
ikinci en yüksek defans oyuncusu ölür. Her iki maçta da en yüksek galibiyet, beraberlik ile
savunan, savunucu. Saldırganın kazandığı sayı:
a = 3#d6 olsun
b = 2#d6 olsun
say((<(yüksek 1 a) yüksek 1 b),
(<(yüksek 1 düşük 2 a) düşük 1 b))
Hikaye anlatıcısı, hedef numarası 8 olan ve başarısızlıkları -1 olarak gösterilen zar atışı:
c=5#d10 girsin
başarı = sayı >7 c olsun
birler = say ==1 c olsun
eğer >0 başarılıysa yüksek 1 (0, başarılı olanlar)
else if >0 birler sonra -1 else 0
Sessiz Ölüm'de savaş oldukça karmaşıktır. Üç zar atılıyor. Toplamları a'nın üzerindeyse
hedef, atış bir vuruştur. Hasarı hesaplamak için aynı zarlar sıralanır. Eğer üçü de
eşitse, hasarı verecek şekilde hepsi toplanır. En az ikisi eşitse ancak üçüncüsü
daha yüksek, yüksek kalıp hasardır. En yüksek iki değer eşitse ancak üçüncüsü daha düşükse,
Hasarı vermek için iki yüksek zar toplanır. Eğer üç zar da farklı ise
orta kalıp hasardır. Bu örnekte zarın iki d8 ve bir d10 olduğu varsayılmaktadır.
hedef sayı 15:
x = 2#d8,d10 olsun
(sayı >15 toplam x)#
a = düşük 1 x in // düşük kalıp olsun
b = yüksek 1 düşük 2 x in // orta kalıp olsun
c = yüksek 1 x in // yüksek kalıp olsun
if ==a ==bc sonra a+b+c // hepsi eşit
aksi takdirde ==a
else if >a ==cb sonra b+c // iki yüksek eşittir else
b // hepsi farklı
KREDİ
Dicelab, Torben Mogensen'in mükemmel "roll" çalışmasına dayanmaktadır
(http://www.diku.dk/~torbenm/Dice.zip). Onun çalışmaları ve yorumları olmasaydı bu pek mümkün olmazdı.
hiç olmadı.
Geçerli dil spesifikasyonu ve orijinal dilin uzantıları türetilmiştir
Joel Uckelman'ın çalışmalarından (http://dice.nomic.net/bones.html), çoğu
belgeler de ondan çalınır.
Bu kod Robert Lemmen tarafından yazılmıştır.[e-posta korumalı]> bunu duymaktan kim memnun olur?
Sorularınız ve görüşleriniz.
Onworks.net hizmetlerini kullanarak dicelab'ı çevrimiçi kullanın