Çarpım Tablosu Sorduralım
CEYD-A’ya yetenekler ekleyelim. Eklerken var olan geliştirme özelliklerinden yeni teknikler ortaya çıkaralım. Bu yazımızda
1) Değişkenlerin kurgular arasında kullanılabilmesi,
2) Boş içerik dönen kurguların alternatif kurgulara yönlendirilmesi
özelliklerinden ilginç çıkarımlar elde edeceğiz.
Önce çarpım tablosu kurgusunu CEYD-A’ya aşağıdaki gibi ekleyelim: https://tasarla.ceyd-a.com adresinden aşağıdaki blok tasarımı oluşturulabilir veya https://kodla.ceyd-a.com adresinden aşağıdaki kodu girebilirsiniz. CEYD-A her iki yöntemle de aynı kurgu yapısını oluşturacaktır.
1 2 3 4 5 6 7 8 9 10 |
SORU çarpım tablosu%,25 ŞABLON {HER}[ ]+sor{HER}$ CEVAP {!SET $number1={!RET $random 10!}!} {!SET $number2={!RET $random 11!}!} {!SET $question={!GET $number1!} kere {!GET $number2!} kaç eder?!} {!SET $answer={!EVAL $number1*{!GET $number2!}!}!} {!RET cmdaskandfollow {!GET $question!},'{!IF $answer==$8??Doğru. Cevap {!GET answer!}{!SET correctnum={!EVAL {!GET $correctnum!} + 1!}!}::Yanlış. Cevap {!GET answer!}{!SET wrongnum={!EVAL {!GET $wrongnum!} + 1!}!}!}{!SET totalnum={!EVAL $correctnum+{!GET wrongnum!}!}!}<br>Toplam {!GET totalnum!} soruda {!GET correctnum!} doğru cevabın var.'!} |
Sadece yukarıdaki çarpım tablosu kurgusu CEYD-A’nın bize matematik soruları sorması için yeterli ancak aşağıda CEYD-A’nın sohbet takibi yapabilmesini de sağlayacağız:
Alternatif kurgulara yönlendirme konusunu şöyle değerlendireceğiz: CEYD-A’ya içinde sor geçen bir cümle kurduğumuzda belirleyeceğimiz bir ön kurguya her zaman önce gidecek sonrasında yoluna devam edip gerçek kurgumuza girmesini de sağlayacağız.
Aşağıdaki ön kurguya girebilmesi için öncelik katsayısını yüksek tanımlayacağız:
1 2 3 4 5 6 7 8 |
SORU sor%,27| ŞABLON ({PAR1})sor({KİP}{Mİ}|{KİP}){SEN}{HER}$ CEVAP {!SET $sorulansoru={PAR1}!} {!IF $correctnum==??{!SET $correctnum=0!}::!} {!IF $wrongnum==??{!SET $wrongnum=0!}::!} |
Ön kurgu
Fark ettiyseniz, yukarıdaki 27 katsayılı sor kurgumuzun CEVAP alanında hiç bir cevap dönmüyor. Sadece değişken tanımlamaları yapılıyor. İçinde yazı içeren bir dönüş olmadığı için önce bu tanımlamaları yapacak ve kendisine alternatif bir yol arayıp içinde sor geçen 25 katsayılı çarpım tablosu sor kurgusuna yönlenecektir.
Daha anlaşılır olması açısından ön kurgumuzu inceleyelim: Şablonda ({PAR1})sor({KİP}{Mİ}|{KİP}){SEN}{HER}$ bulunmakta. bilmece sorar mısın? dediğimizde bilmece, çarpım tablosu sorsana dediğimizde çarpım tablosu PAR1 değişkenine yansıyacaktır. Cevap alanında $sorulansoru değişkenine bu ilk parametre, PAR1 atanmaktadır. $correctnum ve $wrongnum değişkenleri sizin vereceğiniz doğru ve yanlış cevap sayılarını tutacaktır. Bu ön kurgudaki atamaları bir nevi ilk ayarlar olarak düşünebiliriz.
Değişkenlerin kurgular arasında kullanılabilmesi özelliği ile CEYD-A sohbetteki akıcılığı sağlayabilecektir. Çarpım tablosu kurgusunda $correctnum ve $wrongnum değişkenlerini tekrar kullanabildiğinize dikkat çekmek isterim. CEYD-A değişkenlerin içeriklerini aklında tutup farklı kurgularda da bu değişkenleri kullanabilmektedir.
1 2 3 4 5 6 |
SORU başka,10.5|yine,5| ŞABLON (başka( sor| söyle))|(yine( sor|söyle))$ CEVAP {!IF $sorulansoru!=??{!RET {!GET sorulansoru!} sor!}::!} |
Şimdi son olarak başka sor, başka söyle, yine sor, yine söyle dediğimizde daha önce ona içinde sor geçen cümlemizdeki ifadeyi alıp işlemi tekrarlatalım.
(Ek bilgi: burada katsayı 10.5. Başka sorar mısın? dersek önce 27 katsayılı kurguya gidecektir ama başka sor dersek o kurgunun şablonuna girmeden 10.5 katsayılı kurguya girecektir. Eğer 27 katsayılı kurgunun emir kipini de (sor) içerecek şekilde değiştirirsek içinde {PAR1} parametresi başka kelimesi olmayacak şekilde düzenlememiz gerekecektir.)
27 katsayılı sor kurgusunda $sorulansoru örnekte çarpım tablosu içeriğini almıştı. Biz başka sor dediğimizde yukarıdaki kurgu çalışacak ve {!RET {!GET sorulansoru!} sor!} yani {!RET çarpım tablosu sor!} işlemini yapacaktır. Bu kurgu sadece bu örnek için değil, tüm içinde soru geçen kurgular için de geçerli olacağı için çok faydalı bir kurgu oluşturduk.
Sohbet akıcılığını değişkenlerle, benzer kurgular için ön tanımlamaları da alternatife yönlendirme ile sağlamış olduk.