|
|
Bu makalenin farkl� dillerde bulundu�u adresler: English ChineseGB Deutsch Francais Nederlands Turkce |
Philipp Gühring <p.guehring/at/poboxes.com> Yazar hakk�nda: Philipp EDP dal�ndaki y�ksek teknik okulu yeni bitirdi. Futu reware 2001 adl� yaz�l�m geli�tirme grubu i�in art�k yeteri kadar zaman� olacak. T�rk�e'ye �eviri: Elif B��ra G�raks�n <guraksineb(at)yahoo.com> ��erik:
|
Dialog - diyaloglar i�in bir programlama dili�zet:
Dialog bir programlama dili olup kullan�c�yla diyalog ortam� sa�lar. Bu �al��ma
W�rstelstand ticari-sim�lasyonda kullan�ld�. Bu makale Dialog'un geli�imini ve
uygulamalar�n� a��klamaktad�r.
|
Diyaloglar Ascii dosyalar� olarak saklanmakta ve herhangi
bir zamanda daha ileriki sat�rlara ge�i�in de m�mk�n olaca�� �ekilde sat�r
sat�r yorumlanmaktad�r. Diyaloglar� basit bir text edit�r�yle olu�turduk.
Dosyan�n ismi �sim.BAT (�rne�in: HALE.BAT) �eklindedir. Oyuncu
(Leni) bi�ey s�yledi�inde:
Leni: Text Leni: Gunaydin! Size ne verebilirim? Leni: Su cocuklara bakin! Inanilmaz! |
Su cocuklara bakin! Inanilmaz! Yataktan mi dustunuz? |
Ekmekli iki Frankfurter ve kola. Hadi! Acele et, yasli adam! |
M��teri bir�eyler s�yledi�inde: (Kunde Almancada m��teri demek, Telefon
telefon demek)
Kunde: Text Kunde: Ekmekli iki Frankfurter ve kola. Hadi! Acele et, yasli adam! Telefon: Futureware 2001, Philipp G�hring. Sizin icin ne yapabilirim? |
Her normal diyalog �ununla biter:
Ende(Ende Almancada son demek)
Basit bir �rnek: |
Leni: Gunaydin! Ne istersiniz? Kunde: �yi gunler! Bir K�sekrainer lutfen! Leni: Bir saniye. Leni: �ste geldi. Kunde: Cok tesekkurler. Hoscakalin! Leni: Hoscakalin! Ende |
Atlanacak hedefler sat�r�n ba��ndaki iki nokta �st�ste (:) i�aretiyle tan�mlan�r ve devam�nda atlanacak hedefin ismi gelir. Hedeflere Sprung komutuyla atlayabilirsiniz (Sprung Almancada atlamak demek):
:Hedef //Atlama ornegi: Sprung Hedef
|
Yorumlay�c� bu �rnekte ne yapmakta? �nce Leni: komutunu buluyor ve 1 tekstini veriyor. Bir sonraki sat�rda dikkate al�nmayacak bir yorum bulunmakta (Once bunu yapariz). Bir sonraki sat�rda Sprung komutu bulunmakta. Yorumlay�c� b�t�n diyalo�u tarayarak MENU_0 hedefini arar, birka� sat�r a�a��da bulur ve oraya atlar. Sonra tekrar bir yorum bulunmakta (Geldim!). Ve son komut ekrana 3 yazan Leni: komutudur. Yani, yorumlay�c�, �rnekte Leni:�2 komutunu ge�ti ve Leni, 2'yi s�ylemedi. |
G�rd���m�z gibi, bir sat�r:
// Bu bir yorumdur. ************************************** *Bu sekilde birisi de yorum yapabilir* **************************************Yorumlar komutlarla ayn� sat�rda olmamal�d�r:
Leni: Art�k birsey anlamiyorum. // YORUM YOKYorumlay�c� Art�k birsey anlamiyorum. // YORUM YOK metnini output yap�lacak metin olarak alg�lar!
|
Dialog �u sistemi icat etmektedir: Sistemde giri�lerin yerle�tirildi�i
ve kullan�c�n�n cevaplama olas�l�klar�ndan olu�an bir liste bulunmaktad�r.
Zaman� geldi�inde, men� ekranda g�sterilir. Bu durumda kullan�c� bir se�im
yapar ve yorumlay�c�, program�n se�ilen giri�i i�eren k�sm�na atlar.
�ncelikle NEU ve ALT komutlar�yla giri�leri listeye eklersiniz. Her iki komuttan sonra gidilecek hedef ve giri� metni vard�r. Metin �ok uzun bir sat�r olursa sistem sat�r� otomatik olarak b�ler. MEN� komutuyla listenin tamam� g�r�nt�lenir ve kullan�c� bir giri� se�ebilir. |
Neu satinalma, Her zamanki gibi sicak olsun, tamam mi? Neu is,Isler nasil gidiyor? Neu dil,WIFI'deki dil kursuna devam ediyor musun? Neu aile,Ailen nasil? Neu hava,Havadan memnun musun? Men�Bu tiple, oyuncunun s�rayla b�t�n giri�lerle oynamas� m�mk�n olmaktad�r. Se�enekler tekrar kullan�labilir. Se�ilmemi� giri�ler listede kal�r ve daha sonraki bir a�amada se�ilebilirler. �imdi yukar�daki �rnekten is'i se�elim:
:is Leni: Isler nasil gidiyor? Kunde: Cok yogun, her zamanki gibi. Men�Belirtildi�i gibi se�ilen sat�r s�ner. A�a��daki konular listede kal�r:
Kunde: Kac tane istersiniz? Alt biraz, 10 Tane Alt fazla, 20 Tane Alt enfazla, 100 Tane Men� :biraz //Kullan�c� 10 tane se�erse :fazla ... :enfazla ...�rne�in kullan�c� 20 tane se�erse, yorumlay�c� fazla hedefine atlar:
:fazla Kunde: Emin misiniz? Leni: Evet, 20 tane istiyorum. Kunde: Ne zamana lazim? Alt 1, Yarin Alt 2, Yarindan sonraki gun Alt 3, Birazdan Men�Son olarak iki tip birle�tirilebilir:
Kunde: Gecmisteki guzel gunleri hatirla. Alt Hafiza,Evet, �imdi hat�rlad�m da... MEN�
Liste 0 opsiyonlar i�in �nerilir. Liste 1 genel konular i�in, �rne�in aile, i�, bo� vakit, yemek, ... E�er birisi i� hakk�nda konu�mak isterse ve i� konusu i�inde ba�ka konular varsa liste 2 se�ilir. Hale'in diyalo�unda bir �rne�imiz var. E�er yukar�daki �� listeden daha fazla listeye ihtiya� duyulursa, yorumlay�c�n�n kaynak kodundaki sabitin de�i�tirilmesi gerekir.
LISTE 0 LISTE 1 LISTE 2Bu i�lemde b�t�n listelerin b�t�n giri�leri kendi listelerinde kalmaktad�r. NEU, ALT, MEN�, L�SCHEN gibi komutlar her zaman ge�erli liste ile ba�lant� kurar.
Neu Hafiza,�Yeah, �imdi hat�rlad�m da...Liste 0 otomatik olarak silinen men�den sonrayd�. Bu y�zden sadece se�enekler i�in kullan��l�yd�; konular i�in de�il.
�imdi, olduk�a fazla liste kulland���m�z HALE.BAT ve PETER.BAT �rneklerine g�z atmay� �neririm.
L�SCHEN hedefhedef i g�steren ge�erli listedeki her giri�i siler. �rne�in:
L�SCHEN aileGe�erli listedeki b�t�n giri�leri silmek i�in asterisk eklenir:
L�SCHEN *
Men� as�l listedeki b�t�n giri�leri g�sterir ve kullan�c�ya bunlar�n i�inden se�mesini sa�lar. Bundan sonra se�ilen giri� ve ALT komutuyla eklenen b�t�n se�enekler silinir. Son olarak yorumlay�c� buna g�re hedefe atlar. Listede tek bir giri�in olmas� durumunda, bu giri�in se�im oldu�u anla��l�r ve bu sebeple �oktan se�meli bir menu g�sterilmez. E�er listede giri� yoksa veya hedef bulunam�yorsa, yorumlay�c� MEN� den sonra bir sonraki sat�rla devam eder.
1 | Event; | � | //olay numaras� (texte.h ye bak) |
2 | geliefert; | //S | //0-10 ka� tane onluk teslim edilecek |
3 | wtag; | � | //haftan�n g�n� |
4 | tag; | � | //ay�n g�n� |
5 | monat; | � | //ay |
6 | jahr; | � | //y�l |
7 | Datum; | � | //seri g�n� (1.1.1997 = 0) |
8 | wetter; | � | //bug�n�n havas� |
9 | konto; | //S | //banka hesab� |
10 | kapital; | //S | //nakit |
11 | ausgaben; | //S | //bug�n�n harcamalar� |
12 | einnahmen; | //S | //bug�n�n gelirleri |
13 | sterne; | //S | //hot-dog stand'in kalitesi (0-5 y�ld�z) |
14 | wverkauf; | � | //bu hafta sat�lan �r�n say�s� |
15 | weinnahmen; | � | //haftal�k gelir |
16 | wausgaben; | � | //haftal�k harcama |
17 | 0; | //S | //yeni gelir/masraf (diyalog sonucunda) |
18 | Nachrichtenserie; | � | //hangi haber serisi(0=Elch,1=...) |
19 | Nachricht; | � | //ge�erli serideki hangi haber(0=1.Tag,1=2...) |
20 | LottoNr[0]; | � | //ka� tane piyango numaras� kullan�ld�(0-6) |
21 | LottoErgebnis[0]; | � | //ka� tane piyango numaras� do�ruydu |
22 | LottoGewinn[LottoErgebnis[0]]; | � | //Leni ne kadar kazand� |
23 | S.Image; | //S | //Leni'nin resmi |
24 | S.Override; | //S | //Umursamama-Olay |
25 | S.wverkauf[1]; | � | //ge�en hafta sat�lan �r�nler |
26 | S.weinnahmen[1]; | � | //ge�en haftan�n geliri |
27 | S.wausgaben[1]; | � | //ge�en haftan�n masraflar� |
28 | S.wverkauf[2]; | � | //iki hafta �nce sat�lan �r�nler |
29 | S.weinnahmen[2]; | � | //iki hafta �nceki gelir |
30 | S.wausgaben[2]; | � | //iki hafta �nceki masraf |
31 | S.NOverride; | //S | //yar�n�n �nemsenmeyecek olay� |
32 | S.wetter_bericht; | � | //hangi hava tahmini |
33 | Gesamtwert(); | � | //hot-dog stand'in toplam de�eri |
34 | Wetterbericht[S.wetter_bericht].Ereignis; | � | //hangi hava olay� |
35 | Tageszeit; | � | //dakika olarak g�n zaman� |
70..79 | Lagermenge | � | //stoklar |
80..89 | Verkaufspreis | //S | //�r�n fiyat� |
90..99 | Kaufmenge | //S | //sipari� miktar� |
Sonraki 100 kay�t (100'den 199'a) herbir diyalog i�in �zeldir. Oyunun ba��nda s�f�ra ayarlan�rlar ve diyalog i�in b�t�n oyun boyunca s�reklidirler. savegames,..., de saklan�rlar ve sadece kendi diyaloglar�yla eri�ilebilirler. Sistem ve di�er b�t�n diyaloglar kay�tlar� okuyamaz/de�i�tiremezler. Birisi, diyalo�un ba�lang�c�nda birinin hangi diyalog kay�tlar�n� neden kullanmak istedi�ini belgelemelidir.
batch.cpp |
// Musteri: Peter Hinzing // // Kayitlarin kullanimi //[100] Ne siklikla buradaydi //[101] Cep harcligi //[102] Birkac olay //[103] Random sayi: siparis //[104] Random sayi: siparise cevap //[105] Farkli diyaloglar: 5nci gunde is //[106] Anlasma //[107] Secildikten sonra oyun basliyor //[108] Oyun.stake.tip //[109] Oyun.stake.miktar //[110] Oyun.sec.Peter //[111] Oyun.sec.Leni //[112] Hobby aktivasyonu //[113] Home aktivasyonu //[114] W�rstelstand hakkinda diyalog //[115] toplam stok kola //[116] cok fazla?************************* //* henuz yapilmadi |
[200]: Leni Hale ile g��men b�rosuna gidebilir [201]: Leni read the dog's wanted circular [202]: Leni Peter ile Stein-Schere-Papier oynad�! (k�t�!)
Olaylar� nas�l tetiklerim?
Aktion ifade // aktivasyon Cheats: Aktion 3 // kay�t 100'deki olay�n aktivasyonu: Aktion [100]Bu Olaylarla ne yapabilirsiniz? A�a��da W�rstelstand'�n Olay listesinin bir k�sm� g�sterilmi�tir:
0 | Error/Never | Olay 0 yakalan�yor ve b�rak�l�yor |
1 | Initialising | ba�lang��ta tetiklenir ve bir�ok �r�n�, m��teriyi,... aktive eder |
2 | End | oyunun sonunda tetiklenir |
3 | activating FW-Cheat | Bunu kim kodlad�?!? |
4 | deactivating FW-Cheat | Bu s�rr� sakla! |
5 | Leni.competition.activating newspaper | Leni'nin resmi olduk�a iyi-> yakla�an yar��mayla ilgili gazete makalesinin aktivasyonu |
6 | Leni.competition.Zeitung->TelefonNr | Gazete makalesi i�eri�e dahil etmek �zere telefon numaras�n� aktive ediyor |
7 | Leni.competition.deactivating TelNr | Telefon a�t�ktan ve her�eyi s�n�fland�rd�ktan sonra telefon numaras� deaktive ediliyor |
8 | deactivating Hale | Hale kendisini deaktive ediyor ��nk� Leni onu g�cendirdi. |
9 | Hale recommends Josi | Hale onunla ilgili konu�ur konu�maz Josi'yi active ediyor (K���k konu�ma �nemli!) |
10 | deactivating Josi | Josi kendisini deaktive ediyor |
11 | deactivating Peter | Peter kendisini deaktive ediyor |
12 | Sepp Nachricht without Leni aktivieren | Sepp yasal olmayan �retim �neriyor, Leni kabul etmiyor, b�t�n her�ey a��kta ve g�zler �n�nde oluyor. |
13 | Sepp Nachricht with Leni aktivieren | Leni yasal olmayan �retimi kabul ediyor, problemler takip ediyor |
14 | lost game | Postac� Gottfried oyunun sonunu ba�lat�yor |
15 | won game | Gottfried hot-dog stand'in de�erinin fark�na var�yor ve Leni kazan�yor |
16 | Hale.news article Asyl activate | Leni Hale'e ailesinden s�z ediyor, iltica ile ilgili gazete makalesi ba�lat�l�yor. |
17 | Hale.news article->Telefonnr activate | Gazete, �imdi kullan�labilecek telefon numaras�n� g�steriyor |
18 | Hale->Zeitungsbericht->Telefonnr deactivating | Konu�ma telefon numaras�n� deaktive ediyor |
19 | Hale->Familie activating | Hale'in ailesi iltica hakk� al�yor |
20 | activating the spy | Leni bir dedektif tavsiye edebilirdi fakat bu hi� prati�e ge�miyor. |
33 | New products 1 (New supplier) | Bu olay �r�n yelpazesini geni�letiyor |
100 | won contest | Leni yar��may� kazan�yor, m��teriler bunun hakk�nda konu�abilir, ... |
101 | losts contest | |
102 | Lotteryprice | Leni piyangoyu kazan�yor |
Rechne [100]: 20 + [30] * 10Kay�t 30'un i�eri�i, 10 ile �arp�l�p, 20 ekleniyor ve kay�t 100'de saklan�yor.
A�a��daki matematiksel i�lemler yap�labilir:
��lem | Notasyon | �rnek | ��z�m | |
Klammern | (a) | (10+20)*30 | 900 | |
Register | [a] | [20] | Kay�t 20'deki i�erik | |
Multiplication | a*b | 3*4 | 12 | |
Division | a/b | 10/5 | 2 | |
Rest | a%b | 10%3 | 1 | |
Addition | a+b | 1+1 | 2 | |
Subtraction | a-b | 1-1 | 0 | |
Zuweisung | [a]:b | [10]:20 | Schreibt in Stelle 10 den Wert 20 | |
Vergleiche | a?b | Ja(1) oder Nein(0) | ||
Ist gleich | a=b | 10=20 | Nein(0) | |
Kleiner | a<b | 10<20 | Ja(1) | |
Gr��er | a>b | [10]>[20] | ||
AND | a&b | 1=1 & 2=2 | Wenn 1 gleich 1 ist UND 2 gleich 2 ist | |
OR | a|b | 1=1 | 2=2 | Wenn 1 gleich 1 ist ODER 2 gleich 2 ist | |
Random number | a Z b | 1 Z 6 | 1 ve 6 aras�nda bir say� se�iyor |
Kar��la�t�rmalar say�larla sonu�lan�r: DO�RU i�in 1, YANLI� i�in 0. Bunlar ayr�ca kay�tta da yaz�labilir. �fadeler aras�nda bo�luklar b�rak�labilir ( 10 + 20 ), fakat gerekli de�ildir (10+10).
En b�y�k geli�me, �imdi a�a��daki t�rden i�lemleri yapabilen matematiksel de�erlendiricinin geli�imiydi:
Kabul: [100]=5, [24]=14, 1Z6=2 [[100]+1]:((1Z6)*([24]>3)+10/2-10%5) [5 +1]:((2 )*(14 >3)+10/2-10%5) [6 ]:(2 *(1 )+5 -0 ) [6 ]:(2 *1 +5 ) [6 ]:(7 ) [6 ]:7��z�m: [6]:7 7 de�eri kay�t 6'ya yaz�l�yor.
Wenn condition thenkar��la�t�rmalar yap�labilir; �rne�in:
Wenn [100+1]>10 Kunde: Kay�t 101'deki say� 10'dan b�y�kt�r ! Wenn 1>1 Kunde: ERROR!E�er ko�ul do�ruysa, yorumlay�c� bir sonraki sat�ra devam eder yoksa bir sat�r atlar. E�er ko�ul yanl��sa bir sonraki sat�r atlan�r. Bu atlamalarla birlikte kullan�labilir:
Wenn [102]<10 Sprung DAHA KUCUK Wenn [102]=10 Sprung ESIT Wenn [102]>10 Sprung DAHA BUYUK ... :DAHA KUCUK ... :ESIT ... :DAHA BUYUK
BILD expression(Bild Almancada resim demek) �rne�in HALE.BAT dosyas�nda;
Bild 5ge�iyor, HALE5.DAT (�zel bir resim format�) g�steriliyor. Bunun i�in bir click beklenir ve diyalog devam eder.
// comment: | KOMUT REFERANSI |
Kunde: text | M��teri bir�ey s�yl�yor |
Tel: text | Partneri bir�ey s�yl�yor |
Leni: text | Leni bir�eyler s�yl�yor |
:target | Yorumlay�c�n�n atlayabilece�i Hedef |
Liste number | Ge�erli listeyi yap�yor |
L�schen * | Ge�erli listedeki b�t�n giri�leri siliyor |
L�schen target | Ge�erli listedeki, hedefi g�steren b�t�n giri�leri siliyor |
Aktion number | Olaylar� tetikliyor |
Ende | Diyalo�u bitiriyor |
Bild number | Resmi dosya ismiyle birlikte g�steriyor NameNumber.dat |
Sprung target | Hedefe atl�yor |
Neu target,Text | Ge�erli listeye yeni konu ekliyor |
Alt target,Text | Ge�erli listeye yeni se�im ekliyor |
Men� | Men�y� g�sterip kullan�c�n�n se�im yapmas�n� sa�l�yor |
Wenn condition | Kar��la�t�rma (sonraki sat�rlara bak) |
//then | Do�ruysa, yorumlay�c� bir sonraki sat�ra ge�iyor |
//else | Yanl��sa, yorumlay�c� bir sat�r atl�yor |
Rechne expression | �fadeleri bir kay�t i�ine hesapl�yor |
Bild expression | Resimleri g�steriyor, click bekliyor |
B�t�n W�rstelstand projesi yakla��k 10.000 sat�rl�k C(++) kodundan olu�tu�undan ve derleme zamanlar� hala kabuledilir oldu�undan, a��k bir mod�larizasyon yapmadan (tembellik i�te) bunun yerine Test-Include sistemini geli�tirdim: Mod�l kodu kendi kendine �al��abilen ve mod�llerin routin lerine ayn� zamanda bir test program� g�nderen bir .c dosyas�na entegre ediliyor. Bu da e�er ana mod�lde mevcutsa #ifdef taraf�ndan deaktive ediliyor. Bu �ekilde header dosyalar� saklan�yor ;-)
batch.cpp |
#ifndef _DIALOG_H #define _DIALOG_H #ifndef MAIN_MODULE #define DIALOG_TEXT #define DEBUG //Gerekli Header dosyalari #include <stdio.h> //... #endif //butun diyalog routinleri //.. S2 Dialog(char *Filename, TYP Array[]) { //... } #ifndef MAIN_MODULE //Test programlari icin hersey TYP Feld[256]; int main(short argc,char *argv[]) { //Test programi Dialog(Filename,Feld); } #endif |
wurst.cpp |
#define MAIN_MODULE #include "batch.cpp" TYP Felder[10][256]; int main(short argc,char *argv[]) { Dialog(Filename,Felder[i]); } |
G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Philipp Gühring "some rights reserved" see linuxfocus.org/license/ http://www.LinuxFocus.org |
�eviri bilgisi:
|
2004-11-23, generated by lfparser version 2.50