Bu sayfadaki yazılar
Sayfanın metni
Sayfa 37
0) Eğer bir hücrenin toplamı 0 ise bir sonraki nesil için de 0 canlı olsun. 1) Eğer bir hücrenin toplamı 1 ise bir sonraki nesil için de 2 canlı olsun. 2) Eğer bir hücrenin toplamı 2 ise bir sonraki nesil için de 1 canlı olsun. 3) Eğer bir hücrenin toplamı 3 ise bir sonraki nesil için de 3 canlı olsun. 4) Eğer bir hücrenin toplamı 4 ise bir sonraki nesil için de 2 canlı olsun. 5) Eğer bir hücrenin toplamı 5 ise bir sonraki nesil için de 0 canlı olsun. 6) Eğer bir hücrenin toplamı 6 ise bir sonraki nesil için de 1 canlı olsun. 7) Eğer bir hücrenin toplamı 7 ise bir sonraki nesil için de 3 canlı olsun. 8) Eğer bir hücrenin toplamı 8 ise bir sonraki nesil için de 2 canlı olsun. 9) Eğer bir hücrenin toplamı 9 ise bir sonraki nesil için de 3 canlı olsun. Şimdi bu beş hücrenin gelecek nesildeki durumunu gözönüne alalım. İlk hücrenin içinde 2 canlı var. Solunda ve sağında ise 0 canlı. Toplamı 2 eder. İkinci kurala bakıyoruz, sonuç 1. Yani bir sonraki nesilde bu hücrede 1 canlı olacak. Aynı işlemi üçüncü hücre için yaparsak, 0+3+1=4 sonucunu ve dördüncü kuralda da 2 sayısını buluruz. Demek ki bu hücrenin canlı sayısı bir sonraki nesilde bir azalacakmış. Tüm çizgi için hesaplamayı yaparsak elde edeceğimiz yeni nesil şöyle olacaktır:
10213
Aslında kolay, değil mi? Zaten tüm bu işlemleri bilgisayar yapacak. Şimdilik...
Eğer C-64'ün çokrenkli grafiğinde bize sunduğu 160*200 noktalık grafiği ve 4 renk özelliğini kullanırsak ne olur? Her nesil bir grafik satırı olarak gösterilebilir ve her değişik canlı sayısı değişik bir renk anlamına gelir. Böylece bir defada, 200 nesil boyunca sistemin geçirdiği değişimi bir anda görebiliriz. Ve tüm bu işlemin sonucunda, inanılmaz güzellikte görüntüler elde etmek mümkün. Gelelim programımız hakkındaki teknik bilgilere (programın kendisini Döküm Eki'nde bulabilirsiniz). Programımızın ana iskeletini, MDE ile yazacağınız kısa bir makine dili programı oluşturuyor. Tüm çizim ve hesaplama işlemi bu program tarafından yapılıyor. Bu nedenle de, her ekran 4 saniyede hazırlanıyor. Eğer BASIC kullansaydık (hattâ SIMONS' BASIC), bu süre 25-30 dakika olacaktı. İşte makine dilini öğrenmeniz için bir sebep daha! Ancak bu rutini SYS 49152 ile çağırmadan önce bazı hazırlıklar yapmanız gerekiyor. Hücrelerin ilk nesildeki durumunu ve kullanılacak kuralı saptamak lazım. Bunun nasıl yapıldığını da örnek demo programlarını inceleyerek görelim. YAŞAM DEMO 1 programı önce, POKE 56,32 ile kullanacağı hafıza sınırını aşağıya indiriyor. Bu çok gerekli, yoksa programınız ve değişkenler grafik tarafından silinebilir. Sonraki işlem, yaşam çizgisinin ve kuralın hafızada yerleştirilecekleri adreslerin başlangıçlarının saptanması. Yaşam çizgisi, $5000 adresinden başlar ve bunu takip eden 159 byte boyunca devam eder. Makine dili programı, ilk nesille ilgili bilgiyi bu bölgeden okur. Kural ise $4000 ve bunu takip eden 9 byte içinde yeralır. Bir kez daha tekrarlayalım, tüm bu byte'ların içine POKE ile 0-3 arası sayılar yerleştirilmelidir. İlk satırın son komutu, bilgisayarın rasgele sayı üretimini yeniden başlatıyor, 20-23 arası satırlar, çizim renklerini ayarlıyor. Tesadüfi olarak birbirinden farklı üç renk seçiliyor. Dördüncü renk hep siyah olarak kalacak ve boş hücreler bu renkle çizilecektir. 25. satır, kuralın belirlendiği yer. Dikkat ederseniz, kuralın ilk elemanına 0 konuyor. Bu genelde daha iyi sonuçlar elde etmek için yapılıyor. İsterseniz değiştirip ortaya çıkan sonuçlara bir bakın. Kuralın geri kalanı gene tesadüfi olarak belirleniyor. İsterseniz, YAŞAM DEMO 2'de olduğu gibi DATA satırlarından da okuyabilirsiniz. 30. satır ise yaşam çizgimizin ilk halini belirliyor. Gene dikkat ederseniz, en baştaki ve en sondaki hücrelere 0 konuyor, geri kalanları tesadüfen belirleniyor. Böylece, grafiğimizin sağ ve sol kenarlarında bir tür çit yaratmış oluyoruz. Siz isterseniz değiştirin. Örneğin, ikinci örnekte tüm çizgi sıfırlanıyor, sadece ortasına 2123 dizisi yerleştiriliyor. Sonuç oldukça ilginç. Bu arada RND(8)*4 komutuna açıklık getirelim. Bu işlem 0-3.999999 arasında bir sayı yaratır. POKE komutu ile kullandığımız için, bu sayının tamsayı kısmı kullanılır, ki bu da bize 0-3 arası bir sayı verir. Bizim istediğimiz de buydu zaten. 40. satırda makine dili rutin çağırılıyor. Bu rutin, ekranı siliyor, grafik ekranına geçip multicolor'u açıyor, renkleri ayarlıyor ve çizimi yapıyor. Tüm programın SUPER ASSEMBLER dökümü açıklamalı olarak verilmiştir. Gene bu sayımızda verdiğimiz C-64 İLE GRAFİK yazısının ışığı altında inceleyip, istediğiniz değişiklikleri yapabilirsiniz. 50-60 arası satırlar, grafik çizimi bitince sizin bir tuşa basmanızı bekliyor. Eğer boşluk tuşuna basarsanız yeni bir grafik çiziliyor. Başka bir tuşa basarsanız 70-80 arası satırlarda grafik ekranı ve multicolor kapatılıp yazı ekranı normale döndürülüyor. Ve program bitiyor. Burada, isterseniz yeniden 40. satıra atlayarak, sistemin bir sonraki 200 nesilini de görebilirsiniz. Ama bunun için programa bir GOTO 40 eklemeniz lazım.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 36
Tuna ERTEMALP
Onuncu sayımızda bir program yayınlamıştık. Adı LİFE GAME idi. Bir yaşam oyunuydu bu. Bir alandaki canlıların, gelişen nesiller boyu geçirdikleri evrim, matematiksel olarak ortaya konuyordu. Şimdi, bu ölüm kalım savaşının biraz daha karmaşık, çok daha renkli ve bir o kadar ilginç bir başka türünü sunuyoruz sizlere. En temel fark, eski oyun dikdörtgen bir ALAN üzerindeyken, bu oyun bir ÇİZGİ üstünde gerçekleşiyor. Bu çizgiyi yanyana konmuş yaşam hücreleri olarak düşünüyoruz. Her hücrede 0, 1, 2 veya 3 tane canlı var. Sadece üçe kadar canlı kullanmamızın nedeni, her canlı sayısı için farklı bir renk kullanmamız ve C-64'ün yüksek çözünürlüklü çokrenkli grafikte dört değişik renk kullanabilmesi. Eğer grafik özellikleri AMİGA gibi olan bir aletimiz olsaydı, bir hücreye 0-31 arası sayıda canlı koyabilirdik. Gene aynı nedenle, çizgimiz üstünde yanyana 160 hücre olduğunu düşünüyoruz. Çünkü çokrenkli grafikte X-ekseni 160 noktadan oluşuyor. Oyunu başlatmadan önce, 160 hücrenin içine değişik sayılarda canlılar yerleştiriyoruz. Tabii en az 0 en çok da 3 olmak üzere. Peki, her hücrenin bir sonraki nesilde içereceği canlı sayısı nasıl hesaplanacak? Bunu, o hücrenin sağındaki ve solundaki hücrelerde bulunan toplam canlı sayısı ile kendi içinde o anda bulunan canlı sayısını toplayarak belirliyoruz. Dolayısıyla, elde edeceğimiz toplam 0-9 arası bir sayı olacaktır. Ama her hücrede en fazla 3 canlı olabileceğini söylemiştik?! İşte bu nedenle, bir de kural tanımlıyoruz. 10 elemandan oluşan bu kuralın elemanlarını sırayla 0, 1, ...9 olarak numaralıyoruz ve her elemanın içine 0-3 arası bir sayı koyuyoruz. Diyelim ki yukarıdaki toplamımız 7 çıktı. Bu durumda kuralımızın yedinci elemanına bakıyoruz. Diyelim ki içinde 3 var. Bu durumda toplamını gerçekleştirdiğimiz hücrenin içinde bir sonraki nesilde 3 canlı olacak. İsterseniz bir örnek görelim... Örneğimiz için, sadece 5 hücre uzunluğunda bir yaşam çizgisini ele alalım ve içlerine de, tamamen tesadüfi olarak, şu sayıları yerleştirelim:
20312
—
Çizginin geri kalan kısımlarının 0 canlı içeren hücreler olduğunu varsayalım. Şimdi de bir kural belirleyelim:
0213201323
Bu kuralı sözle şu şekilde belirtebiliriz: