• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Mouse ile Tıkla... Adını Yaz...

Sayın Levent Menteşoğlu nun desteği ve diğer arkadaşların yardımı ile inanın çok güzel bir oyun ortaya çıkacak...
 
Sorunuzu biraz daha açarmısınız. Userform üzerinde tüm oyuncuların kağıtları açık olarak görünecekmi? Herkesin birbiriniz kağıdını görmeden nasıl oynatacaksınız?
 
Sayın Hocam iyi akşamlar...
Oyunu 3 bilgisayar oyuncusuna karşı oynuyorsunuz ve onların kağıtları sadece değişkende tutuluyor. Ve sadece attıkları görülüyor.
 
CardI(J, I) değişkeni (J) 1 den 13 e kadar dağıtılan kağıt sayısını (I) da oyuncu sayısını tanımlıyor. Burada I=1 biziz I=2 de 4 kadar da computer.
 
Program içinde Player ve Computer kartlarının tutulduğu CardI(J, I) ataması ile herkezin kağıt seçme ve atma olayını nasıl yürütebiliriz.?
Bunu Class Modul içinde mi yapmamız gerek yoksa UserForm üstünde devam eden oyun akışı içinde yapabilirsek nasıl yapabiliriz..?

Yukarıdaki sorunuzu biraz daha açarmısınız. Herkesin kağıt seçme ve atma olayından kastınız nedir?
 
Public WithEvents resim As MSForms.Image

Private Sub resim_Click()
......
......
End Sub

Class modülünde elimizdeki kağıtları atmayı ayarladınız ama diikat ettiniz ise Card(2,1) ile computerin sadece 1 nci kağıtlarını atabiliyoruz. Benim sorduğum program içinde benim attığım kağıda göre computerlerin atacağı kağıdı nasıl belirleyebileceğim. Onun içindemi Class modül yazmak gerekecek yoksa UserFormdaki kodlarda örneğin Kağıt=1 to sondağıtılan_kağıtmiktarı döngüsünde nasıl bir modül çağıracağımki oyun kuralları içinde bilgisayara o kağıdı attırabileceğim.
 
For J = 1 To Son
'[J] O El Dağıtılan Kağıt Sayısı 1....13 oyunun cinsine göre belirleniyor.

For I = 1 To 4
' Oyuncular 1..Player 2-3-4 Computer

Dağıt (I)
'Kağıt dağıtma Animasyonu çağırılıyor

If I = 1 Then
'Player için Dağıtılan Kağıtlar el sayısı kadar
'Görünür olarak ekrana açılıyor. Yani kart image'leri
'Player in ekranda görünen 61-72 nolu image'lere atanıyor.

GoSub Player

End If

CardI(J, I) = CardB(((I - 1) * Son) + J)
'O el dağıtılan kartlar tüm oyunculara göre atanıyor.
' Burada J o el için dağıtılan kağıt miktarıdır.
' Burada I 2..3...4 olarak bilgisayar oyuncularıdır.

Next I


Kağıtlar 2 den 52 sayısına göre sıralanmıştır.
2 - Kupa 2 lisi ........ 13 - Kupa ası .... ve 52 - Sinek Ası dır.
Card(1, 2) 2nci oyuncunun elindeki örnek olarak 23 nolu karttır. Buda İmage23 olarak atıyorum Maça 4 e denk gelir.
Next J
 
Şimdi anladım. Class modüldeki kodları aşağıdaki ile değiştirerek deneyin.

Kod:
Public WithEvents resim As MSForms.Image
Dim deger As Integer
Private Sub resim_Click()
deger = deger + 1
ad = Replace(resim.Name, "Image", "")
resim.Visible = False
UserForm1.Image55.Picture = resim.Picture

UserForm1.Image55.ZOrder 0
Randomize Timer
UserForm1.Image55.Left = 190 + Int(Rnd * 50) + 5
UserForm1.Image55.Top = 132
UserForm1.Image55.Visible = True
PlaySound 1, 1
Application.Wait Now + TimeValue("00:00:01")
UserForm1.Image56.Picture = UserForm1.Controls("Image" & CardI(deger, 2)).Picture
Randomize Timer
UserForm1.Image56.Left = 140 + Int(Rnd * 50) + 5
UserForm1.Image56.Top = 100
UserForm1.Image56.Visible = True
UserForm1.Image56.ZOrder 0
PlaySound 1, 1
Application.Wait Now + TimeValue("00:00:01")
UserForm1.Image57.Picture = UserForm1.Controls("Image" & CardI(deger, 3)).Picture
Randomize Timer
UserForm1.Image57.Left = 190 + Int(Rnd * 50) + 5
UserForm1.Image57.Top = 66
UserForm1.Image57.Visible = True
UserForm1.Image57.ZOrder 0
PlaySound 1, 1
Application.Wait Now + TimeValue("00:00:01")
UserForm1.Image58.Picture = UserForm1.Controls("Image" & CardI(deger, 4)).Picture
Randomize Timer
UserForm1.Image58.Left = 230 + Int(Rnd * 50) + 5
UserForm1.Image58.Top = 100
UserForm1.Image58.Visible = True
UserForm1.Image58.ZOrder 0
PlaySound 1, 1
Application.Wait Now + TimeValue("00:00:01")
End Sub
 
Sayın levent isterseniz en başından Değişkenlerin tanımı ile başlayarak ve satır satır anlatabilirim.
 
Tamam çok sağolun.
Şimdi ilk Sorum ben bu Class modulu ana program içinde nasıl cağıracağım?
 
Özür.... aşağıdaki gibi olacaktı...

CardI(deger, 2) olarak sizin Class modülde atadığınız 2 nci oyuncunun 'değer' sıralı kağıdını; ana oyun içinden ben 'değer=3 veya değer=7 diye tanımlayıp Class module nasıl aktaracağım..
 
Anlatayım:

Oyunun oynama sırası şu şekilde..zaten UserFormdaki kodlara bakıncada anlaşılabilir.
1. Kağıtlar Karılıyor.

2.O el kaç kağıt dağıtılmasına bakılıyor ve oyunculara kağıtlar dağıtılıyor.

3. Koz belirleniyor..

4. El sırası belirleniyor.

5. Sıra kimdeyse burası önemli atacağı kağıdı seçiyor. Bunu ben bir takım formuller ile yapacağım

6. Sıra oyuncuda ise biz zaten sizin Class moduülde yaptığınız gibi istediğimizi seçip atıyoruz.

7. Ama computr de sıra ise işte o zaman ben oyundan o kağıdı ona seçtirmem gerekiyor.

8. yani computer elindeki kağıtları değer+1 arttırarark sıradan atmıyor
 
9. Örneğin kendisinden önce Karo atılmış ise onunda karo atması ve elinde karo yoksa koz hangi kağıt ise onu atmasu gerekiyor...
 
Yani aslında bana Class modüldeki

Private Sub resim_Click()
deger = deger + 1

değer değişkenini oyun içinden yönetme şeklini gösterirseniz olur bu iş
 
Userformun kod sayfasında en üstte örneğin, "public degisken as integer" şeklinde bir değişken tanımlayın. Sonra istediğiniz değeri bu değişkene atayıp, class modül içinde userform1.degisken olarak kullanabilirsiniz.
 
public degisken as integer

de değişken sizin değer diye atadığınız değişken mi?
 
Sağolun deneyeceğim, ama beni unutmayın... Şimdilik teşekkürler....
 
Eğer deger değişkenini kullanacaksanız, class modül içindeki "Dim deger As Integer" ve "deger = deger + 1" satırlarını kaldırın ve aşağıdaki gibi kullanın.

CardI(userform1.deger, 3)).....
 
Tamam Levent bey... Userformdaki döngüde değer değişkenine örneğin değer=6 dersem ozaman Class modülde CardI(6, 3))..... 6 ncı kağıdı atmış olur değilmi? yanlış anlamadıysam
 
Geri
Üst