Kimler Sitede
Şu anda 4 ziyaretçi çevrimiçiBağış
| Yılan Oyunu Yapımı |
| Makale - Visual Basic | |||
| Yazar ugokhan | |||
| Cuma, 24 AÄŸustos 2007 01:52 | |||
|
Yılan oyunu hepimizin cep telefonlarından bildiÄŸi bir oyundur. Åžimdi biz de kendi yılan oyunumuzu yapacağız. Herhangi bir dile baÄŸlı kalmadan mantığını anlatmaya çalışacağım. Yılan oyunu için öncelikle ekranımızı sanal karelere bölmeli ve kaça kaçlık bir ekranda oynamak istediÄŸimizi belirlemeliyiz. Bu örneÄŸin anlatımında ekranı 12 x 8 boyutlarında alacağım. Fakat siz daha geniÅŸ bir ekran belirleyebilirsiniz. ![]()  Yukarıdaki 12 x 8'lik tablo (matris) üzerinde 5 birimlik bir yılan görülmektedir. Duvar olması istenen kareler 1 ile, yılan olması istenen karaler (2,3,4,5) ile ve puan olması istenen kare 8 ile gösterilmiÅŸtir. Ekranda herhangi bir bilgi içermeyen kareler ise 0 deÄŸeri almıştır. Bu sayılar istediÄŸiniz gibi deÄŸiÅŸtirebilirsiniz. Önemli olan hangi sayının hangi anlamı taşıdığıdır. Bütün oyun boyunca, oyuncunun yaptığı her hareket buradaki bilgilerin deÄŸiÅŸmesine yol açacaktır. Buradaki bilgilere göre de oyun her seferinde görsel imgelerle oyuncuya bilgi verecektir. Peki niye her objenin 1 adet deÄŸeri var da yılan için 4 deÄŸer var? Güzel soru. Buradaki deÄŸerler yılanın o karedeki hücresinin nereye dönmek istediÄŸini tutar. Yılan, çeÅŸitli yönlere kıvrılabilir ve yılan üzerindeki her kare, kıvrımların nerede olacağı bilgisini taşır. Mesela oyunun hemen başında (yukarıdaki tabloda) yılan DOÄžU yönüne gitmektedir. Tabiki yılanın başının (8,3) karesi olduÄŸunu varsayarsak. Tablodaki bu bilgilerin tutulabilmesi için 2 boyutlu bir dizi kafidir. Bunun için DIM Tablo (1 TO 12 , 1 TO 8) AS BYTE ÅŸeklinde bir tanımlama yapabiliriz. Sizde kendi sınırlarınıza göre Tablo dizisinin boyutlarını deÄŸiÅŸtirebilirsiniz. Ayrıca bir de yılanın baÅŸlangıç ve bitiÅŸ karelerinin koordinatlarını tutalım. Bunun için DIM Konum (1 TO 5) AS INTEGER ÅŸeklinde bir dizi tutalım. Konum dizisinin ilk 4 elemanı koordinat bilgilerini tutar. Bunlar; Yılanın Başının Yatay Konumu , Yılanın Başının Düşey Konumu, Yılanın Sonunun Yatay Konumu ve Yılanın Sonunun Düşey Konumu. Yukarıdaki tablodaki verilere göre Konum dizisini dolduralım. Konum (1) = 8 Åžimdi yılan hareketleri ile ilgili akıllarda soru kalmaması için 2,3,4,5 deÄŸerlerinin tablo üzerinde nasıl kullanıldığına bakalım. Mesela yılanın başı (8,3) noktasında iken yılan GÜNEY (3) yönüne dönmek istesin. Yılanın her hareketinde baÅŸ ve son karelerin yerlerini deÄŸiÅŸtirip, baÅŸlangıç ve bitiÅŸ konumlarını her seferinde güncelleyeceÄŸiz. ![]()  Yılan Güney (3) yönüne ilerlerken Tablo (8,3) = 3 yapılır. Bunun anlamı, bu kareden itibaren Güney'e dönüş yapıldığını belirtmektir. BaÅŸlangıç Konum deÄŸerleri deÄŸiÅŸtirilir. Güney (3) yönüne hareket yapıldığı için (Güneye ilerlemek Y = Y + 1 gereÄŸince) Konum(2) = Konum(2) + 1 yapılır. Böylece yılanın başı (8,4) karesi olur. Bu karenin deÄŸeri de ilerleme yönü deÄŸeri, yani 3'tür. Gelelim yılanın son karesine. Son karenin koordinatları (4,3) idi. Tablo(4,3) = 2 olduÄŸundan (demek ki yılan bu karede DOÄžU yönünde ilerlemiÅŸtir. DoÄŸuya ilerlemek X = X + 1 olduÄŸuna göre) Konum(3) = Konum(3) + 1 yapılır. Yılanın yeni durumdaki son karesi (5,3) karesi olur. Önceki karenin deÄŸeri 0 yapılır. Son durumda Konum dizisinin elemanları aÅŸağıdaki gibidir. Konum (1) = 8 Yine aynı mantıkla Güneye bir kare daha ilerlersek son durum ve deÄŸiÅŸkenlerimiz aÅŸağıdaki gibi olur. Konum (1) = 8  ![]()  Şimdi karşımıza bir PUAN çıktı. Yılan her hareketinde önündeki karenin hangi deÄŸerde olduÄŸunu kontrol eder. Biz yukarıdaki örneklerimizde bu kontrolü yapmamıştık. Yılan ilerleyeceÄŸi yeni karenin deÄŸerine bakar. EÄŸer 0 ise sorun yoktur. 8 ise de sorun yoktur. Sadece oyuncunun puanını 1 arttırırsınız ve rastgele bir puan daha yerleÅŸtirirsiniz. Ama yeni karenin deÄŸeri (0 ve 8) deÄŸilse yılan duvara veya kendisine çarpmış demektir. Bunun için bir yön deÄŸiÅŸkeni tanımlayalım. Bu yon degiskeni, yılanın başının hangi yöne gideceÄŸini kontrol etsin. AÅŸağıdaki ÅŸekilde Konum dizisinin 5. indisi olarak yılanın yönünü tutalım. Böylece tek bir Konum dizisi ile yılanın konumlarını ve yönünü tutmuÅŸ olduk. Konum (5) = 3 Yapmamız gereken, yılanın yönüne göre, hedeflediÄŸi karenin deÄŸerine bakmak. Bunun için SELECT-CASE yapısını kullanabiliriz.  Â
 Yukarıdaki şekle göre yılanın yönü (Konum(5) = 3 ) Güney olduğundan ve Tablo ( Konum(1) , Konum(2)+1 ) karesinin değeri 8 olduğu için yılan puan karesine gelir. Puan alınır. Oyuncunun skoru arttırılır. Peki burada yılanın boyunun uzamasını nasıl yaparız? Kim sordu bu soruyu? Aferin... Tek yapmamız gereken puan alındığında yılanın son karesinin konumunu değiştirmemek. Yani yılanın başı ilerleyecek ama yılanın sonu 1 adım bekleyecek. Puanı aldık ve artık karenin değeri 8 değil 3'tür. Şimdi ekrana rastgele bir puan yerleştirmeliyiz. Bunun için tek yapmamız gereken RND fonksiyonu ile rastgele koordinatlar türetmek ve bu koordinatların tablodaki değerinin 0 olduğundan emin olmak. Tekrar: X ve Y değerlerini nasıl türettik? RND fonksiyonu [0 , 1) arasıda rastgele bir değer üretir (0 dahil ama 1 dahil değil). Bu değerler içinde virgüllü olanlar da vardır. Amacımız 2 ile 11 arasında bir sayı türetmek olduğundan evvela 10 ile çarparız. Böylece 0 ile 9.999 arasında sayılar türetiriz. FIX fonksiyonu ile de virgülden sonrasını atıp tam kısımları alırız. Böylece elimizde 0'dan 9'a kadar değerler oldu. Her değeri 2 ile toplarsak 2'den 11'e kadar sayılar elde ederiz. Bu yatay aralıktır. Burada puanın, kenar duvarların üzerine gelmesini önledik. Bu sayede 2'den 11'e kadar rastgele sayılar elde ettik. Aynı mantıkla da Y değerini bulduk. Son olarak oyuncunun kontrolünü koyalım. Oyuncu yılanın sadece yönünü etkileyecek. Klavyede tuş takımını kullanarak Konum(5) değerini değiştirecek. Yılan da her adımda bu değere bakıp, önündeki kareyi kontrol edecek ve sonuç üretecek. Tablodaki değişiklikleri görsel olarak ekrana yansıttığımızda güzel bir yılan oyunu üretmiş oluruz. ![]() Tetris, labirent ve buna benzer bir çok basit görsel oyunda bu metodu kullanabilirsiniz.
|




Yorumlar
Seri port ile herhangi bir uygulama yapmadım. Buradaki adresten yardım alabilirsiniz.
RSS beslemesi, bu iletideki yorumlar için.