TÜRKİYE CANIM FEDA


 

                                                                                                                         Hoşgeldin , IP adresin 3.138.175.180
                                                                                Şu an burdasın visual basic
                                                                            Bugünkü Kullanıcılar: 7
                                                                 Şu an online :

kod-dostu

visual basic

Yılan Oyunu Yapımı

 
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 16×16 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.



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.



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.



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.



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



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



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.

Devamı Oku: Yılan Oyunu Yapımı

Bu web sitesi ücretsiz olarak Bedava-Sitem.com ile oluşturulmuştur. Siz de kendi web sitenizi kurmak ister misiniz?
Ücretsiz kaydol