- Tham gia
- 8/6/06
- Bài viết
- 14,567
- Được thích
- 22,873
- Nghề nghiệp
- U80
Xin mời nhấn chuột vô 1 cặp lá bài để tìm sự may mắn. Í là con số 13
Đây tạm gọi là VER 1.0 vì còn rất thô sơ;
Những mong có các bạn, cũng như PTM tiếp tục fát triển!
Chơi ra mần răng Thầy? chẳng hiểu mô tê chi cảXin mời nhấn chuột vô 1 cặp lá bài để tìm sự may mắn. Í là con số 13
Đây tạm gọi là VER 1.0 vì còn rất thô sơ;
Những mong có các bạn, cũng như PTM tiếp tục fát triển!
Em góp ý:Xin mời nhấn chuột vô 1 cặp lá bài để tìm sự may mắn. Í là con số 13
Đây tạm gọi là VER 1.0 vì còn rất thô sơ;
Những mong có các bạn, cũng như PTM tiếp tục fát triển!
Public WithEvents Img As Image
Private Sub Img_Click()
Dim Num As Long
Num = Replace(Img.Name, "Image", "")
Check(Num) = Not Check(Num)
If Check(Num) Then
Img.Picture = Sheet1.ImageList1.ListImages.Item(Val(Num)).Picture
Else
Img.Picture = Sheet1.ImageList1.ListImages.Item(12).Picture
End If
End Sub
Public Img() As New MyClass
Public Check(1 To 10) As Boolean
Sub Auto_Open()
Dim i As Long, Obj As OLEObject
For Each Obj In ActiveSheet.OLEObjects
If InStr(Obj.progID, "Forms.Image") Then
ReDim Preserve Img(i)
Set Img(i).Img = Obj.Object
i = i + 1
End If
Next Obj
End Sub
Sư phụ ơi, ở đây em chỉ nêu ý kiến dùng ClassModule thôi mà... Đó mới là quan trọng, vì giúp cho code của sư phụ rút gọn đi rất nhiềuMột lý do cần fải xét đến là mới 20 lá bài mà file chú mày lên đến 87K rồi; Chú thử với 55 lá tất cả xem ra sao, có thuyết fục được lão này không đây??
Khà, khà,. . .
Chúc vui!
Sub Main()
ActiveSheet.Shapes(Application.Caller).ZOrder 1
End Sub
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Dim Dic, Check As Boolean, TPoint As Long
Sub Auto_Open()
Shuffle
End Sub
Sub Auto_Close()
ThisWorkbook.Save
End Sub
Sub Play()
Check = Not Check
With Sheet1.Shapes(Application.Caller)
.ZOrder 1
DoEvents
TPoint = TPoint + Val(.AlternativeText)
If Check = False Then
If TPoint = 14 Then
MsgBox "Ban duoc 10 diem"
Shuffle
Else
Sleep 500
End If
DoEvents
.Parent.Shapes.Range(Dic.Items).ZOrder 1
TPoint = 0
End If
End With
End Sub
Private Sub Shuffle()
Dim PicRng As Range, PicName As String, PicCel As Range
Dim i As Long, n As Long, Point As Long
Set PicRng = Sheet1.Range("B2:N5")
Set Dic = CreateObject("Scripting.Dictionary")
Do
Randomize
i = Int(Rnd * 52)
If Not Dic.Exists(i) Then
PicName = "Pic" & Chr(Int(i / 13) + 65) & Format((i Mod 13) + 1, "00")
Set PicCel = PicRng(Int(n / 13) + 1, (n Mod 13) + 1)
Dic.Add i, PicName
n = n + 1
With Sheet1.Shapes(PicName)
Point = Val(Right(.Name, 2))
.Parent.Shapes("Cover_" & n).AlternativeText = Point
.Left = PicCel.Left: .Top = PicCel.Top
.Width = PicCel.Width: .Height = PicCel.Height
End With
End If
Loop Until n = 52
End Sub
Nói thật, cái vụ bài bạc này em không rành luật lắm(1) Của chú mày 52 lá bài, như tới 4 chất, nên thực tế chỉ cần bấm chuột khoảng chưa chục lần gì đó là fải xào lại rồi.
(2) Đã là bài thì fải tính biến hoá đi chứ, VD với tổng 13 thì ta có nhiều fương án tính điểm như sau:
Con Ác có thể tính là 0, 1 , 10 hay 11 điểm;
1 Con Ka thì như kỳ đà cản mũi, nhưng có 2 con Ka thì được 26 điểm, chẳng hạn . . . (Luật là do ta đề ra mà, hề, hề,. . . )
( Vả lại dân Âu lẫn Á đều "Thích" con này mà, . . !)
Vui nha!
Em click thật nhanh 16 con bài rồi nhìn và... nhớ ---> Sau khi nó úp xuống, em chọn 1 phát có ngay 10 hoặc 20 điểm liền
Em click thật nhanh 16 con bài rồi nhìn và... nhớ ---> Sau khi nó úp xuống, em chọn 1 phát có ngay 10 hoặc 20 điểm liền
Ẹc... Ẹc...
Giải pháp: Bằng cách gì đó chỉ cho người ta click 2 lá thôi, sau khi 2 lá này úp thì mới có thể click tiếp (Em dùng BlockInput)
Public Lan As Byte
Sub Auto_Open()
'. . . .Code cũ'
Lan = 0
End Sub
Sub AnNut(Num As Double)
Lan = Lan + 1
If Lan > 2 Then
Lan = 0
TroVe
Exit Sub
Else
' . . . Code cũ '
End If
End Sub
Nghe thì có vẽ hợp lý, nhưng em nghĩ để giải quyết nó không đơn giản thế đâu sư phụ à! Lý do là code chạy có sự tham gia của Delay (Delay quá trình úp bài)Muốn chỉ click 2 lá hông cho click thêm thì đơn giản thôi:
PHP:Public Lan As Byte
PHP:Sub Auto_Open() '. . . .Code cũ' Lan = 0 End Sub
PHP:Sub AnNut(Num As Double) Lan = Lan + 1 If Lan > 2 Then Lan = 0 TroVe Exit Sub Else ' . . . Code cũ ' End If End Sub
Là thế này nè sư phụ:Test rồi ndu à, có thấy dư âm của delay, nhưng không đáng kể.
Muốn chắc ăn thì thêm 1 cái Msgbox "Click hoài, click 2 cái thôi", sẽ qua được cái delay.
Em thì dùng hàm API để Lock bàn phím, khá đơn giản ---> quá trình kiểm tra tổng điểm chính là lúc nó lock bàn phím
Hàm đó lock tất tần tật sư phụ à ---> Xem file em đính kèm ở trênCó lẽ nên lock chuột chứ nhỉ?
-- Ngoài ra:
Hình như từ đầu đến giờ sư phụ chưa nêu ra quy định tính điểm thì phải ---> Ai biết gì đâu mà chơi ???