...::::Tek Link Full Download::::...



İnternet Sayfamıza Hoşgeldiniz...

Sitemize üye olarak bir çok linki elde edebilirsin!!!

Anasayfa bölümünde bir çok konu bulunmaktadır....




...::::Tek Link Full Download::::...

İStediğiniz Türden Dosya....
 
AnasayfaSite AnalizTakvimSSSAramaÜye ListesiKullanıcı GruplarıKayıt OlGiriş yap
Sitemize Moderatör Aranmaktadır...
Başvuru yapacaklar admine ulaşabilirler...


Paylaş | 
 

 Yılan Oyunu(Kodlar)

Önceki başlık Sonraki başlık Aşağa gitmek 
YazarMesaj
Admin
Admin
avatar

Mesaj Sayısı : 63
Tecrübe Puanı : 173
Kayıt tarihi : 12/07/10

MesajKonu: Yılan Oyunu(Kodlar)   Salı Tem. 13, 2010 3:40 pm

Malzemeler
________________________________________

Standart EXE projesi açın. form un scalemodu "3-pixel" olacak

1 adet PictureBox
------------------
Name = Ekran
ScaleMod = 3 - Pixel
width = 484.................scalewidth = 480 olması için
height = 324................scaleheight= 320 olması için
tüm colorlar siyah
AutReDraw = true

1 adet label
------------
caption = 0 ' puanı yazacağız.

1 adet Timer
------------
enabled = False
interval = 100

4 adet image nesnesi
---------------------
Bunlar yılan, duvar, puan ve boşluk olacaklar. Paintbrush'ı açın ve 16x16 ebatında siyah zemin üzerine yılan, duvar, puan çizin ve kopyala-yapıştır ile sırasıyla image nesnelerine yapıştırın. boşluk için düz siyah resim yeterli.

image nesnelerinin adlarını parca, duvar, bos, yem yapın. visible özelliklerini False yapın.

parca : Yılanın 1 karelik parçası
duvar : Duvarın 1 karelik parçası
bos : Silmek İçin 1 karelik parça
yem : Puan için 1 karelik parça


Şimdilik basit yapı için bu nesneler yeterli.

PictureBox.PaintPicture Özelliği
________________________________________

PictureBox nesnesinin bu özelliği ile istenilen x,y koordinatına bir resim yapıştırabiliriz. Her karesi 16 pixel olmak üzere yatayda 480 / 16 = 30 ve düşeyde 320 / 16 = 20 kare oluşacak. Biz istediğimiz bir koordinatı verip buraya resim yapıştıracağız.

Kullanımı : PictureBox.PaintPicture Resim.Kaynağı , YatayKoord, DüşeyKoord
Ekran.PaintPicture parca.picture , 16, 16

Form başlarken PictureBox nesnesinin Scale ayarını yapalım.

Kod:
Private Sub Form_Load()
    Ekran.Scale ( 1 , 1 ) - ( 31 , 21 ) ' Bu şekilde 30 x 20 şeklinde karelere ayrılmış oldu.
  End Sub

Ekranın çevresine duvar yerleştirmemiz gerekir. Ayrıca 10 birim uzunluğunda bir yılanı ekranın ortasına Doğu yönünde gidecek bilgisiyle yerleştiririz. Rastgele bir puan koordinatı üretip puanı da yerleştiririz. Bunları yaparken aynı bilgileri Tablo dizisine de kaydedeceğimizi unutmayın.

Yılanın yerleşiminden sonra başlangıç ve bitiş karelerinin değerleri ve yönü Konum dizisine kaydedilir.
Kod:

Dim Tablo(1 To 30, 1 To 20) As Byte
Dim Konum(1 To 5) As Byte

Private Sub Form_Load()
    Ekran.Scale (1, 1)-(31, 21)
   
    ' Tablo Temizlenir.
    For i = 1 To 30
        For j = 1 To 20
            Tablo(i, j) = 0
        Next j
    Next i
   
    ' Yatay Duvarları Yerleştir
    For i = 1 To 30
        Ekran.PaintPicture duvar.Picture, i, 1: Tablo(i, 1) = 1 ' Üst Yatay Sıra
        Ekran.PaintPicture duvar.Picture, i, 20: Tablo(i, 20) = 1 ' Alt Yatay Sıra
    Next
   
    ' Düşey Duvarları Yerleştir
    For i = 2 To 19
        Ekran.PaintPicture duvar.Picture, 1, i: Tablo(1, i) = 1 ' Sol Düşey Sıra
        Ekran.PaintPicture duvar.Picture, 30, i: Tablo(30, i) = 1 ' Sağ Düşey Sıra
    Next
   
    ' Yılanı Yerleştirelim. Yılan 10 kare uzunluğunda ve yönü 2 (doğu)
    For i = 11 To 20
        Ekran.PaintPicture parca.Picture, i, 10: Tablo(i, 10) = 2
    Next
   
    'Rasgele Bir Puan Yerleştirelim.
10:
    Randomize Timer
    x = Fix(Rnd * 30) + 1
    y = Fix(Rnd * 20) + 1

    If Tablo(x, y) = 0 Then
        Ekran.PaintPicture yem.Picture, x, y
        Tablo(x, y) = 8
      Else
        GoTo 10
    End If
   
    Konum(1) = 20
    Konum(2) = 10
   
    Konum(3) = 11
    Konum(4) = 10
   
    Konum(5) = 2
   
End Sub

Projeyi çalıştırırsanız sonucu görürsünüz. Şu an hiçbir kontrol yok. Yön kontrollerini ekleyelim.

Kod:
Private Sub Ekran_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case 37: If Konum(5) <> 2 Then Konum(5) = 4  ' Batı
        Case 38: If Konum(5) <> 3 Then Konum(5) = 5    ' Kuzey
        Case 39: If Konum(5) <> 4 Then Konum(5) = 2    ' Doğu
        Case 40: If Konum(5) <> 5 Then Konum(5) = 3    ' Güney
        Case 19: If Timer1.Enabled = True Then Timer1.Enabled = False Else Timer1.Enabled = True    ' Pause Tuşu
        Case 32: Timer1.Enabled = True                  ' Space Tuşu
    End Select
End Sub

Ana döngüye de sorgulama ve kontrol kodlarını eklersek olay biter. Aşağıda, programın, kontrol edilmiş ve çalışan kodları bulunmaktadır. Yukarıdaki nesneleri ve ayarlamaları yaptıktan sonra bu kodları direkt olarak formun içine yapıştırın.

Kod:
Dim Tablo(1 To 30, 1 To 20) As Byte
Dim Konum(1 To 5) As Byte
Dim Puan As Boolean

Private Sub Ekran_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case 37: If Konum(5) <> 2 Then Konum(5) = 4  ' Batı
        Case 38: If Konum(5) <> 3 Then Konum(5) = 5    ' Kuzey
        Case 39: If Konum(5) <> 4 Then Konum(5) = 2    ' Doğu
        Case 40: If Konum(5) <> 5 Then Konum(5) = 3    ' Güney
        Case 19: If Timer1.Enabled = True Then Timer1.Enabled = False Else Timer1.Enabled = True    ' Pause Tuşu
        Case 32: Timer1.Enabled = True                  ' Space Tuşu
    End Select
End Sub

Private Sub Form_Load()
    Ekran.Scale (1, 1)-(31, 21)
   
    ' Tablo Temizlenir.
    For i = 1 To 30
        For j = 1 To 20
            Tablo(i, j) = 0
        Next j
    Next i
   
    ' Yatay Duvarları Yerleştir
    For i = 1 To 30
        Ekran.PaintPicture duvar.Picture, i, 1: Tablo(i, 1) = 1
        Ekran.PaintPicture duvar.Picture, i, 20: Tablo(i, 20) = 1
    Next
   
    ' Düşey Duvarları Yerleştir
    For i = 2 To 19
        Ekran.PaintPicture duvar.Picture, 1, i: Tablo(1, i) = 1
        Ekran.PaintPicture duvar.Picture, 30, i: Tablo(30, i) = 1
    Next
   
    ' Yılanı Yerleştirelim. Yılan 10 kare uzunluğunda ve yönü 2 (doğu)
    For i = 11 To 20
        Ekran.PaintPicture parca.Picture, i, 10: Tablo(i, 10) = 2
    Next
   
    'Rasgele Bir Puan Yerleştirelim.
10:
Kod:
    Randomize Timer
    x = Fix(Rnd * 30) + 1
    y = Fix(Rnd * 20) + 1

    If Tablo(x, y) = 0 Then
        Ekran.PaintPicture yem.Picture, x, y
        Tablo(x, y) = 8
      Else
        GoTo 10
    End If
   
    Konum(1) = 20
    Konum(2) = 10
   
    Konum(3) = 11
    Konum(4) = 10
   
    Konum(5) = 2
End Sub

Private Sub Timer1_Timer()
    Puan = False    ' Puan alınıp-alınmadığı

    Select Case Konum(5)
        Case 2: ' Doğu Yönüne
            If Tablo(Konum(1) + 1, Konum(2)) = 0 Or Tablo(Konum(1) + 1, Konum(2)) = 8 Then
               
                If Tablo(Konum(1) + 1, Konum(2)) = 8 Then
                    Label1.Caption = Val(Label1.Caption) + 1
                    Puan = True
                End If
               
                Tablo(Konum(1), Konum(2)) = Konum(5)
                Konum(1) = Konum(1) + 1
               
              Else
                ' Yılan Çarptı
                Timer1.Enabled = False
                MsgBox "Kaybettiniz"
                Exit Sub
            End If
                 
        Case 3: ' Güney Yönüne
            If Tablo(Konum(1), Konum(2) + 1) = 0 Or Tablo(Konum(1), Konum(2) + 1) = 8 Then
               
                If Tablo(Konum(1), Konum(2) + 1) = 8 Then
                    Label1.Caption = Val(Label1.Caption) + 1
                    Puan = True
                End If
               
                Tablo(Konum(1), Konum(2)) = Konum(5)
                Konum(2) = Konum(2) + 1
                               
              Else
                ' Yılan Çarptı
                Timer1.Enabled = False
                MsgBox "Kaybettiniz"
                Exit Sub
            End If
           
        Case 4: ' Batı Yönüne
            If Tablo(Konum(1) - 1, Konum(2)) = 0 Or Tablo(Konum(1) - 1, Konum(2)) = 8 Then
               
                If Tablo(Konum(1) - 1, Konum(2)) = 8 Then
                    Label1.Caption = Val(Label1.Caption) + 1
                    Puan = True
                End If
               
                Tablo(Konum(1), Konum(2)) = Konum(5)
                Konum(1) = Konum(1) - 1
               
              Else
                ' Yılan Çarptı
                Timer1.Enabled = False
                MsgBox "Kaybettiniz"
                Exit Sub
            End If
           
        Case 5: ' Kuzey Yönüne
            If Tablo(Konum(1), Konum(2) - 1) = 0 Or Tablo(Konum(1), Konum(2) - 1) = 8 Then
               
                If Tablo(Konum(1), Konum(2) - 1) = 8 Then
                    Label1.Caption = Val(Label1.Caption) + 1
                    Puan = True
                End If
               
                Tablo(Konum(1), Konum(2)) = Konum(5)
                Konum(2) = Konum(2) - 1
               
              Else
                ' Yılan Çarptı
                Timer1.Enabled = False
                MsgBox "Kaybettiniz"
                Exit Sub
            End If
           
    End Select
   
    Ekran.PaintPicture parca.Picture, Konum(1), Konum(2)
   
    If Puan = False Then
        ' son kare silinir.
        Ekran.PaintPicture bos.Picture, Konum(3), Konum(4)
       
        'önceki yöne göre konum3 ve 4 ayarlanır.
        Select Case Tablo(Konum(3), Konum(4))
            Case 2: Konum(3) = Konum(3) + 1
                Tablo(Konum(3) - 1, Konum(4)) = 0
            Case 3: Konum(4) = Konum(4) + 1
                Tablo(Konum(3), Konum(4) - 1) = 0
            Case 4: Konum(3) = Konum(3) - 1
                Tablo(Konum(3) + 1, Konum(4)) = 0
            Case 5: Konum(4) = Konum(4) - 1
                Tablo(Konum(3), Konum(4) + 1) = 0
        End Select
      Else
        ' Yeni Bir Puan Rasgele Ekrana Konur.
20:
    Randomize Timer
    x = Fix(Rnd * 30) + 1
    y = Fix(Rnd * 20) + 1

    If Tablo(x, y) = 0 Then
        Ekran.PaintPicture yem.Picture, x, y
        Tablo(x, y) = 8
      Else
        GoTo 20
    End If
    End If
End Sub


Bu kodlar daha da kısaltılabilir. Mesela rasgele puan yerleştirme işlemi ve yön kontrolü için bir sub veya function yapılabilir.

Kod:
Sub PuanKoy()
 
BasaGel:
    Randomize Timer
    x = Fix(Rnd * 30) + 1
    y = Fix(Rnd * 20) + 1

    If Tablo(x, y) = 0 Then
        Ekran.PaintPicture yem.Picture, x, y
        Tablo(x, y) = 8
      Else
        GoTo BasaGel
    End If
End Sub

Bu şekilde diğer bazı kodlar da kısaltılabilir. Niye kısaltmadım?? Uzun yoldan anlaşılması kolay olsun diye..
Öneri - 1 : Ekranın ortasına labirent duvarlar oluşturarak oyunu zorlaştırabilirsiniz. Veya bunları çeşitli etaplar şeklinde yapabilirsiniz.
Öneri - 2 : Programdaki görsel imgeleri başka bmp dosyalarıyla değiştirebileceğiniz bir menü ekleyin. Kullanıcı kendi çizdiği resimleri program içerisinden açarak oyuna adapte etsin. Böylece görsel zenginlik artsın. Arka plan resmi de konulabilir.

Bonus Öneri - 3: Eğer bir gün şu DirectX olayını da çözersem, yılan oyununu niye 3 boyutlu yapmayayım ki?.. Wink


Dim Tablo (1 to 20, 1 to 20, 1 to 20 ) as byte
Dim Konum (1 to 7) as byte


Bir kenarı 20 birimlik bir küp içinde 3 boyutlu hareket edebilen bir yılan tasarlayın. Walla ben bilsem hemen yaparım. Yılanın koordinatları (11,8,17) şeklinde 3 boyutlu olacak. Konum (1-2-3) ile baş kısmını Konum (4-5-6) ile son kısmını tutacağız. Yön ise 6 farklı değer alır. (ileri-geri-sağ-sol-yukarı-aşağı) 2-3-4-5-6-7 değerlerini verin. Puan zaten 8 değerinde. Olay bitti.



Sayfa başına dön Aşağa gitmek
Kullanıcı profilini gör http://forumtime.fullforums.org
 
Yılan Oyunu(Kodlar)
Önceki başlık Sonraki başlık Sayfa başına dön 
1 sayfadaki 1 sayfası

Bu forumun müsaadesi var:Bu forumdaki mesajlara cevap veremezsiniz
...::::Tek Link Full Download::::... :: PROGRAMLAMA/WEB TASARIM :: Visual Basic-
Buraya geçin: