Sosyal Eklentiler

Kimler Sitede

Åžu anda 4 ziyaretçi Ã§evrimiçi

Bağış

Bu siteyi beğendiyseniz bağış yapabilirsiniz.


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.

Basit görsel oyunlarda öncelikle ekran üzerindeki veriler bir tabloda tutulur. Şimdi aşağıdaki tabloyu dikkatle inceleyin.

www.gokhanca.com

 

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
Konum (2) = 3
Konum (3) = 4
Konum (4) = 3

Ş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.

www.gokhanca.com

 

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
Konum (2) = 4
Konum (3) = 5
Konum (4) = 3

Yine aynı mantıkla Güneye bir kare daha ilerlersek son durum ve değişkenlerimiz aşağıdaki gibi olur.

 Konum (1) = 8
Konum (2) = 5
Konum (3) = 6
Konum (4) = 3

 

www.gokhanca.com

 

Ş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.

 

 

  1. SELECT CASE Konum(5)
  2. CASE 2 :  ' Yılan Doğuya gidiyorsa...'
  3. IF Tablo(Konum(1)+1, Konum(2)) <> 0 AND Tablo(Konum(1)+1,Konum(2))<>8 THEN
  4. 'Önündeki değer 0 ve 8 değilse Çarptı demektir.'
  5. ELSEIF Tablo(Konum(1)+1,Konum(2))=8 THEN
  6. 'Yılanın Önünde Puan Varsa Puanı Alır.'
  7. END IF
  8.  
  9. CASE 3 :  ' Yılan Güneye gidiyorsa...'
  10. IF Tablo(Konum(1), Konum(2)+1) <> 0 AND Tablo(Konum(1),Konum(2)+1)<>8 THEN
  11. 'Önündeki değer 0 ve 8 değilse Çarptı demektir.'
  12. ELSEIF Tablo(Konum(1),Konum(2)+1)=8 THEN
  13. 'Yılanın Önünde Puan Varsa Puanı Alır.'
  14. END IF
  15.  
  16. CASE 4 :  ' Yılan Batıya gidiyorsa...'
  17. IF Tablo(Konum(1)-1,Konum(2)) <> 0 AND Tablo(Konum(1)-1,Konum(2))<>8 THEN
  18. 'Önündeki değer 0 ve 8 değilse Çarptı demektir.'
  19. ELSEIF Tablo(Konum(1)-1,Konum(2))=8 THEN
  20. 'Yılanın Önünde Puan Varsa Puanı Alır.'
  21. END IF
  22.  
  23. CASE 5 :  ' Yılan Kuzeye gidiyorsa...'
  24. IF Tablo(Konum(1),Konum(2)-1)<>0 AND Tablo(Konum(1),Konum(2)-1)<>8 THEN
  25. 'Önündeki değer 0 ve 8 değilse Çarptı demektir.'
  26. ELSEIF Tablo(Konum(1),Konum(2)-1)=8 THEN
  27. 'Yılanın Önünde Puan Varsa Puanı Alır.'
  28. END IF
  29.  
  30. END SELECT

 

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:
RANDOMIZE TIMER
X = FIX ( RND * 10 ) + 2
Y = FIX ( RND * 6 ) + 2
 
IF Tablo( X , Y ) = 0 THEN
Tablo ( X , Y ) = 8
ELSE
GOTO Tekrar
END IF

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.

www.gokhanca.com

Tetris, labirent ve buna benzer bir çok basit görsel oyunda bu metodu kullanabilirsiniz.

 

Yorumlar  

 
0 #5 2011-08-01 19:42
Quoting aladdin:
gokhan bey visual basic'te seri port ile çalışmanız var mı. varsa yardım edebilir misiniz.

Seri port ile herhangi bir uygulama yapmadım. Buradaki adresten yardım alabilirsiniz.
Alıntı
 
 
0 #4 2011-08-01 17:38
gokhan bey visual basic'te seri port ile çalışmanız var mı. varsa yardım edebilir misiniz.
Alıntı
 
 
-3 #3 2010-12-30 22:26
msn üzerinden destek vermiyorum.
Alıntı
 
 
+1 #2 2010-12-28 15:35
gokhan bey elımde sızın yaptıgınız yılan oyunu var ama degısdırmem gerekıyor sızı msn ye ekledım ama acık deıl sızden yardım almam gerekıyor proje vermem gereklı...ıyı gunler
Alıntı
 
 
0 #1 2010-05-23 14:27
güzel
Alıntı
 

Yorum ekle

TCK'ya aykırı, yasadışı ve genel ahlaka aykırı yazılar ile konu dışında yazılar, istekler, spam ve reklam amaçlı mesajlar yazılması YASAKTIR. Bu tür yazılar görüldüğü anda tarafımdan silinecektir. Herhangi bir uygunsuzluğun olduğunu düşündüğünüz yazılar için lütfen bana eposta yoluyla haber veriniz.


Güvenlik kodu
Yenile