Neler yeni
MEGAForum - Teknoloji Forumu

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı yada giriş yapmalısınız. Forum üye olmak tamamen ücretsizdir.

VBA (Visual Basic for Applications) ile Tombala Oyunu

TRWE_2012

لِيَغْفِرَ لَكَ اللّٰهُ مَا تَقَدَّمَ مِنْ ذَنْبِك
Moderatör
Konum
BERTUNA
  • Üyelik Tarihi
    2 Haz 2020
  • Mesajlar
    5,338
  • MFC Puanı
    16,230
Merhaba forum üyeleri ve ziyaretçileri,

Bugün sizlerle VBA (Visual Basic for Applications) kullanarak basit bir tombala oyunu geliştirdiğim kodu paylaşmak istiyorum. Bu oyun, kullanıcı ve bilgisayar arasında geçiyor ve her iki tarafın da kartları var. Oyun, rastgele numaraların çekilmesiyle ilerliyor ve her iki tarafın kartındaki numaralar kontrol ediliyor. Kodun detayları...

Kodun Genel Yapısı:

1.Değişken Tanımlamaları:

Kullanıcının ve bilgisayarın kartları, çekilen numaralar ve puanlar için gerekli değişkenler tanımlanıyor.

2.Kart Oluşturma Fonksiyonu:

CreateCard fonksiyonu, her bir kart için rastgele numaralar oluşturuyor. Aynı numaranın tekrar edilmemesi için IsInArray fonksiyonu kullanılıyor.

3.Numara Kontrol Fonksiyonları:

IsInArray ve IsNumberDrawn fonksiyonları, kartlarda ve çekilen numaralarda belirli bir numaranın var olup olmadığını kontrol ediyor.

4.Oyun Döngüsü:

Oyun, toplam 10 numara çekilene kadar devam ediyor. Her çekilen numara için kullanıcıdan bir giriş alınıyor ve bu girişin geçerli olup olmadığı kontrol ediliyor.

5.Kazanma Kontrolü:

Her iki tarafın kartları kontrol edilerek, bir tarafın kazanıp kazanmadığı belirleniyor.

6.Sonuçların Kaydedilmesi:

Oyun sonunda, sonuçlar bir dosyaya kaydediliyor ve kullanıcıya bilgi veriliyor.

Şimdi betiğin kod içeriğini verelim....

Tombala Oyunu.vbs

Kod:
Option Explicit

Dim userCard(2, 8) ' Kullanıcının kartı (3 satır, 9 sütun)
Dim computerCard(2, 8) ' Bilgisayarın kartı (3 satır, 9 sütun)
Dim drawnNumbers(89) ' Çekilen numaralar
Dim i, j, number, isWinner, drawCount
Dim resultMessage ' Sonuç mesajı
Dim userScore, computerScore ' Puanlar

' Kart oluşturma fonksiyonu
Sub CreateCard(card)
    Dim row, col, num
    For row = 0 To 2
        For col = 0 To 8 ' 9 sütun
            Do
                num = Int((90 * Rnd)) ' 0-89 arası rastgele sayı
            Loop While IsInArray(card, num) ' Aynı numarayı tekrar etme
            card(row, col) = num
        Next
    Next
End Sub

' Dizi içinde numara var mı kontrolü
Function IsInArray(card, num)
    Dim i, j
    IsInArray = False
    For i = 0 To 2
        For j = 0 To 8 ' 9 sütun
            If card(i, j) = num Then
                IsInArray = True
                Exit Function
            End If
        Next
    Next
End Function

' Çekilen numara dizisinde var mı kontrolü
Function IsNumberDrawn(num)
    Dim i
    IsNumberDrawn = False
    For i = 0 To 89
        If drawnNumbers(i) = num Then
            IsNumberDrawn = True
            Exit Function
        End If
    Next
End Function

' Kartları oluştur
CreateCard userCard
CreateCard computerCard

drawCount = 0 ' Çekilen numara sayısını başlat
userScore = 0 ' Kullanıcı puanını başlat
computerScore = 0 ' Bilgisayar puanını başlat
Randomize ' Rastgele sayı üretimini başlat

' Oyun döngüsü
Do While drawCount < 10 ' Toplam 10 numara çekilecek
    number = Int((90 * Rnd))
    
    If Not IsNumberDrawn(number) Then
        drawnNumbers(number) = number ' Çekilen numarayı kaydet
        WScript.Echo "Çekilen numara: " & number
        
        ' Kullanıcı kartında numara varsa işaretle
        For i = 0 To 2
            For j = 0 To 8 ' 9 sütun
                If userCard(i, j) = number Then
                    userCard(i, j) = -1 ' İşaretle
                    userScore = userScore + 1 ' Kullanıcı puanını artır
                End If
            Next
        Next
        
        ' Bilgisayar kartında numara varsa işaretle
        For i = 0 To 2
            For j = 0 To 8 ' 9 sütun
                If computerCard(i, j) = number Then
                    computerCard(i, j) = -1 ' İşaretle
                    computerScore = computerScore + 1 ' Bilgisayar puanını artır
                End If
            Next
        Next
        
        ' Kullanıcıdan bir sayı girmesini iste
        Dim userInput
        userInput = InputBox("Bir sayı girin (0-89):", "Sayı Girişi")
        
        ' Kullanıcının girdiği sayının kartta olup olmadığını kontrol et
        If IsNumeric(userInput) And CInt(userInput) >= 0 And CInt(userInput) <= 89 Then
            If IsInArray(userCard, CInt(userInput)) Then
                WScript.Echo "Tombala! Kullanıcının kartında " & userInput & " var."
                userScore = userScore + 1 ' Kullanıcı puanını artır
            End If
        Else
            WScript.Echo "Geçersiz giriş! Lütfen 0-89 arasında bir sayı girin."
        End If
        
        ' Bilgisayarın kazanma kontrolü
        If IsInArray(computerCard, number) Then
            WScript.Echo "Çekilen Numara: " & number & " (KARTTA VAR)"
        Else
            WScript.Echo "Çekilen Numara: " & number & " (KARTTA YOK)"
        End If
        
        ' Bilgisayarın kazanma kontrolü
        For i = 0 To 2
            isWinner = True
            For j = 0 To 8 ' 9 sütun
                If computerCard(i, j) <> -1 Then
                    isWinner = False
                    Exit For
                End If
            Next
            If isWinner Then
                resultMessage = "Bilgisayar kazandı! Toplam Puanı: " & computerScore
                WScript.Echo resultMessage ' Bilgisayar kazanırsa mesajı göster
                Exit Do
            End If
        Next
        
        ' Kullanıcı kazanma kontrolü
        For i = 0 To 2
            isWinner = True
            For j = 0 To 8 ' 9 sütun
                If userCard(i, j) <> -1 Then
                    isWinner = False
                    Exit For
                End If
            Next
            If isWinner Then
                resultMessage = "Tebrikler! Siz kazandınız! Toplam Puanınız: " & userScore
                WScript.Echo resultMessage
                Exit Do
            End If
        Next
        
        drawCount = drawCount + 1 ' Çekilen numara sayısını artır
    End If
Loop

' Oyun sonucunu dosyaya kaydet
Dim fso, resultFile
Dim userDesktopPath
userDesktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' Kullanıcının masaüstü yolu
Set fso = CreateObject("Scripting.FileSystemObject")
Set resultFile = fso.CreateTextFile(userDesktopPath & "\Tombala Oyun Sonucu.txt", True) ' Kullanıcının masaüstüne kaydet

' Sonuç mesajını belirle
If resultMessage = "" Then
    If userScore > computerScore Then
        resultMessage = "Tebrikler! Siz kazandınız! Toplam Puanınız: " & userScore & ", Bilgisayar Puanı: " & computerScore
    ElseIf computerScore > userScore Then
        resultMessage = "Bilgisayar kazandı! Toplam Puanı: " & computerScore & ", Kullanıcı Puanı: " & userScore
    Else
        resultMessage = "Oyun berabere! Kullanıcı Puanı: " & userScore & ", Bilgisayar Puanı: " & computerScore
    End If
End If

' Sonuç mesajını dosyaya yaz
If resultMessage <> "" Then
    resultFile.WriteLine(resultMessage)
Else
    resultFile.WriteLine("Oyun sona erdi, ancak sonuç belirlenemedi.")
End If

resultFile.Close

WScript.Echo "Oyun sona erdi. Sonuç dosyası masaüstüne kaydedildi."

Şimdiye kadar en uzun yazdığım .vbs betiği oldu.Sabahladık resmen....!!!

Kodun İlave Açıklaması :

1.Bilgisayarın Kontrolü:

Her çekilen numara için bilgisayarın kartında bu numaranın olup olmadığı kontrol ediliyor. Eğer numara kartta varsa, kullanıcıya bu bilgi veriliyor.

2.Kazanma Kontrolü:

Hem kullanıcı hem de bilgisayar için kazanma durumu kontrol ediliyor. Eğer bir tarafın kartındaki tüm numaralar işaretlenmişse (yani -1 olmuşsa), o taraf kazanmış sayılıyor ve oyun sona eriyor.

3.Sonuçların Kaydedilmesi:

Oyun sona erdiğinde, sonuçlar bir metin dosyasına kaydediliyor. Bu dosya, kullanıcının masaüstünde "Tombala Oyun Sonucu.txt" adıyla oluşturuluyor. Sonuç mesajı, kullanıcı ve bilgisayarın puanlarına göre belirleniyor.

4.Kullanıcıya Bilgilendirme:

Oyun sona erdiğinde, kullanıcıya bir mesaj kutusu ile oyunun bittiği ve sonuç dosyasının kaydedildiği bilgisi veriliyor.

Oyun Akışı

A.

Oyun başladığında, kullanıcı ve bilgisayar için kartlar oluşturuluyor.

B.

Rastgele numaralar çekiliyor ve her iki kartta bu numaraların olup olmadığı kontrol ediliyor.

C.

Kullanıcıdan bir sayı girmesi isteniyor ve bu sayı kartta varsa puanı artırılıyor.

Ç.

Oyun, toplam 10 numara çekilene kadar devam ediyor veya bir taraf kazanana kadar sürüyor.

D.

Oyun sonunda sonuçlar kaydediliyor ve kullanıcı bilgilendiriliyor.

Özetle;

Bu basit tombala oyunu, VBA ile programlamaya yeni başlayanlar için iyi bir örnek teşkil ediyor. Oyun mantığını anlamak ve kullanıcı etkileşimi sağlamak için güzel bir uygulama. Umarım bu kod ve açıklamalar, kendi projelerinizde size ilham verir!

Herhangi bir sorunuz veya öneriniz varsa, lütfen paylaşın. Geri bildirimlerinizi duymaktan memnuniyet duyarım!

Güle güle kullanın ve eğlenin...!!!

EKRAN GÖRÜNTÜLERİ :

[align=center]

ygqHHuL.jpeg


l7lZx9w.jpeg


ML8lG77.jpeg


GyLrm2h.jpeg


ePtJ5cT.jpeg


rH0aoiV.jpeg


[/align]
 

TRWE_2012

لِيَغْفِرَ لَكَ اللّٰهُ مَا تَقَدَّمَ مِنْ ذَنْبِك
Moderatör
Konum
BERTUNA
  • Üyelik Tarihi
    2 Haz 2020
  • Mesajlar
    5,338
  • MFC Puanı
    16,230
NOT:

Oyunun ilk versiyonunda sanal kart sayısını 100 olarak belirdim ama oyun bitmiyor canıma tak dedi...(bunaldım) bende kart sayısın 100-27'ye indirdim (

Dim userCard(2, 8) ' Kullanıcının kartı (3 satır, 9 sütun)
Dim computerCard(2, 8) ' Bilgisayarın kartı (3 satır, 9 sütun)

Ve burası

Do While drawCount < 10 ' Toplam 10 numara çekilecek
number = Int((90 * Rnd))

değiştirildi.

Siz buraları değiştirebilirsiniz ama hemen baştan söyleyelim "adamı canından bezdiriyor, oyunun sonu gelmiyor"....
 
Üst Alt