Bilmece Sorduralım
CEYD-A’nın diğer rakiplerinden farklı kılan özelliği kendi sorularınıza cevap tanımlayabilmeniz. Bu tanımlama geliştirici olmayanlar için çok basit sabit bir içerik te olabilir, kapsamlı kod parçası da. Bu örnekte sıradışı bir komut tanımlayacağız. CEYD-A ya soruyu siz değil, CEYD-A size soracak. Bir bakıma o sizi değerlendirecek ve sözlü oyunlar oynamak mümkün olacak. Örnekte siz ona BANA BİLMECE SOR diyeceksiniz ve size rastgele bir bilmece bulup soracak eğer doğru cevaplarsanız size bravo diyecek, cevabı yanlış söylerseniz doğrusunu söyleyecek. Hatta daha da ileri gidip doğru ve yanlışların sayısını da aklında tutması mümkün. Bu şekilde size bilmecelere verdiğiniz doğru cevap performansını da söyleyebilir. İşi daha kolay bir şekilde açıklayabilmem için bunu bir sonraki yazı da anlatacağım.
Yapacağımız işin mantığı şu: Bilmecelerin listelendiği yanında cevaplarının olduğu bir sayfa okuyacağız. Bu listede kaç adet bilmece var ise aralarından rastgele birini seçeceğiz ve o satırı okuyacağız. O satırdaki soru ve cevabı CEYD-A ya öğreteceğiz. CEYD-A size bu soruyu soracak ve sizden bir cevap bekleyecek. Eğer sizin söylediğiniz cevap onun öğrendiği cevap ile aynı ise size Bravo diyecek , değilse doğru cevabı size söyleyecek.
Şimdi adım adım neler yapmamız gerektiğine bakalım:
https://tr.wikisource.org/wiki/Kocaözü_bilmeceleri sayfasında aşağıdaki gibi 61 adet bilmece var.
Control-U tuşlarına bastığınızda bu sayfanın kaynak kodlarını göreceksiniz. Farkedileceği gibi her satır <li> tagleri içindedir. Ayrıca bilmece cevabı ( ) parantezler içindedir.
Önce data değişkenine sayfanın kodunu atalım .
1 2 3 |
{!SET $data={!RET cmdloadurl https://tr.wikisource.org/wiki/Kocaözü_bilmeceleri!}!} |
Sonra, $ignore değişkenine <div> altındaki, <ul> altındaki, tüm <li> satırlarını atıyoruz. Bunu yapmamızın asıl amacı bu işlemde kaç satır var ise fetchtagsize değişkenine o sayının atılmasıdır. Yani fetchtagsize değişkeni 61 değerini alacaktır
1 2 3 4 |
{!SET $ignore={!RET cmdfetchtagtext div>ul>li,$data!}!} {!SET $size={!GET fetchtagsize!}!} |
CEYD-A 0-61 arasında rastgele bir sayı tutsun. $rand değişkenine bu tuttuğu sayıyı atasın.
1 2 3 |
{!SET $rand={!RET random {!GET $fetchtagsize!}!}!} |
Önce satırı :nth-child({!GET $rand!} kullanarak bulalım, sonra içindeki ( ) işaretleri regex işlemlerinde farklı amaçla kullanıldığı için satırdaki ( ve ) işaretlerini ; olarak değiştirelim.
1 2 3 |
{!SET $satir={!RET decode {!RET cmdreplace ')',';',{!RET cmdreplace '(',';',{!RET encode {!RET cmdfetchtagtext div>ul>li:nth-child({!GET $rand!}),$data!}!}!}!}!}!} |
Örnek olarak satırımız olan $satır değişkeni Ben giderim o gider, yanımda tintin eder. (Gölge) ise, yerine Ben giderim o gider, yanımda tintin eder. ;Gölge; olarak atanacaktır.
Aşağıdaki RegEx ifadesi ; ile ayrılmış 2 grubu ifade eder satırın sonunda ayrıca ek bir ; işareti daha vardır. ; işaretinden önceki söz dizimi soru, ; işaretinden sonraki söz dizimi ise cevaptır.
O halde $soru ve $cevap değişkenleri şu şekilde gösterilecek:
1 2 3 4 |
{!SET $soru={!RET cmdfetchregex (.*?);(.*);.*,1,$satir!}!} {!SET $cevap={!RET cmdfetchregex (.*?);(.*);.*,2,$satir!}!} |
RET inputbox <CEYD-A nın söyleyeceği cümle> komutu ile CEYD-A bize soru cümlesini okuyacak ve bizden cevap bekleyecek. $soylenen değişkeni bizim cevabımızı olarak atanacak.
1 2 3 |
{!SET $soylenen={!RET inputbox {!GET $soru!}<br><mute><small>BU BİLMECENİN CEVABı NEDİR? LÜTFEN DOĞRU CEVABı SESLİ SÖYLE</small></mute>!}!} |
Son olarak soylediğimiz ile doğru cevap kontrol edilecek, eğer aynı ise bize bravo diyecek, değil ise yanlış deyip cevabı söylecek.
1 2 3 |
{!IF $soylenen==$cevap??Bravo cevap {!GET $cevap!}::Yanlış, doğru cevap {!GET $cevap!}!} |
En alt kısma da bilgi olarak kaç adet bilmece arasından sorunun sorulduğu bilgisi gösterilecek. <mute> arasında olduğu için sessiz olarak ekranda görünecek.
1 2 3 |
<br><mute><small>{!GET size!} adet bilmece arasından sorulmuştur.</small></mute> |
Komutumuzun CEVAP alanının son hali aşağıdaki gibidir. Buna benzeyen farklı komut ve cevapları https://kodla.ceyd-a.com sayfasından girebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 |
{!SET $data={!RET cmdloadurl https://tr.wikisource.org/wiki/Kocaözü_bilmeceleri!}!} {!SET $ignore={!RET cmdfetchtagtext div>ul>li,$data!}!} {!SET $size={!GET fetchtagsize!}!} {!SET $rand={!RET random {!GET $fetchtagsize!}!}!} {!SET $satir={!RET decode {!RET cmdreplace ')',';',{!RET cmdreplace '(',';',{!RET encode {!RET cmdfetchtagtext div>ul>li:nth-child({!GET $rand!}),$data!}!}!}!}!}!} {!SET $soru={!RET cmdfetchregex (.*?);(.*);.*,1,$satir!}!} {!SET $cevap={!RET cmdfetchregex (.*?);(.*);.*,2,$satir!}!} {!SET $soylenen={!RET inputbox {!GET $soru!}<br><mute><small>BU BİLMECENİN CEVABı NEDİR? LÜTFEN DOĞRU CEVABı SESLİ SÖYLE</small></mute>!}!} {!IF $soylenen==$cevap??Bravo cevap {!GET $cevap!}::Yanlış, doğru cevap {!GET $cevap!}!} <br><mute><small>{!GET size!} adet bilmece arasından sorulmuştur.</small></mute> |