[VBA] Viết chương trình chơi game oẳn tù tì với máy tính

TomShaki

Yêu THVBA
Em mới học VBA mong mọi người giúp đỡ 2 bài sau ạ
1. Tạo chương trình để chơi với máy tính trên Excel
Khi người dùng chọn "Búa", "Kéo", "Giấy" và nhấp vào nút [Game],
① Máy tính chọn ngẫu nhiên "Búa", "Kéo", "Giấy
② Hãy hiển thị kết quả thắng hoặc thua
2.Nhập chuỗi ký tự vào một ô và nhấp vào nút để xuất chuỗi ký tự đã nhập sang ô khác theo thứ tự ngược lại.
(Ví dụ: Nếu nhập "ABC", xuất "CBA")
Bài này em dùng hàm strReverse để chuyển đổi nhưng nếu dùng vòng lặp thì như thế nào ạ?
Mong mọi người giúp đỡ!!!
 
Sửa lần cuối:

linhlbk

Yêu THVBA
@TomShaki
Bài toán 1: Bài toán nhỏ nên viết như này được, còn bài toán phức tạp thì sẽ viết khác.
Mã:
Sub kiemtra(kq As Integer)
rand = Int(3 * Rnd) + 1
Select Case kq
    Case 1:
            If rand = 1 Then
            MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Dam" & Chr(10) & "Hoa"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Keo" & Chr(10) & "Ban Thang"
            Else: MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Bao" & Chr(10) & "Ban Thua"
            End If
    Case 2:
            If rand = 1 Then
            MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Dam" & Chr(10) & "Ban Thua"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Keo" & Chr(10) & "Hoa"
            Else: MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Bao" & Chr(10) & "Ban Thang"
            End If
    Case 3:
            If rand = 1 Then
            MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Dam" & Chr(10) & "Ban Thang"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Keo" & Chr(10) & "Ban Thua"
            Else: MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Bao" & Chr(10) & "Hoa"
            End If
End Select

End Sub

Sub call_op()

If Sheet1.op1.Value = True Then
    Call kiemtra(1)
ElseIf Sheet1.Op2.Value = True Then
    Call kiemtra(2)
ElseIf Sheet1.Op3.Value = True Then
    Call kiemtra(3)
End If

End Sub
Bài toán 2:
Mã:
Sub abc()
Dim str As String
str = "DepTraiCoGiSai"
kytu = ""
str_reverse = ""
For i = Len(str) To 1 Step -1
    kytu = Mid(str, i, 1)
    str_reverse = str_reverse & kytu
Next
Cells(1, 1) = str_reverse

End Sub
 
Sửa lần cuối:
D

Deleted member 1392

Guest
Bài toán 1: Rảnh rang ngồi làm vui chút, xem như tập code.
Bạn cần đăng nhập để thấy hình ảnh

Link tải:
 
Sửa lần cuối bởi điều hành viên:

TomShaki

Yêu THVBA
@TomShaki
Bài toán 1: Bài toán nhỏ nên viết như này được, còn bài toán phức tạp thì sẽ viết khác.
Mã:
Sub kiemtra(kq As Integer)
rand = Int(3 * Rnd) + 1
Select Case kq
    Case 1:
            If rand = 1 Then
            MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Dam" & Chr(10) & "Hoa"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Keo" & Chr(10) & "Ban Thang"
            Else: MsgBox "Ban chon: Dam" & Chr(10) & "May chon: Bao" & Chr(10) & "Ban Thua"
            End If
    Case 2:
            If rand = 1 Then
            MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Dam" & Chr(10) & "Ban Thua"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Keo" & Chr(10) & "Hoa"
            Else: MsgBox "Ban chon: Keo" & Chr(10) & "May chon: Bao" & Chr(10) & "Ban Thang"
            End If
    Case 3:
            If rand = 1 Then
            MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Dam" & Chr(10) & "Ban Thang"
            ElseIf rand = 2 Then
            MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Keo" & Chr(10) & "Ban Thua"
            Else: MsgBox "Ban chon: Bao" & Chr(10) & "May chon: Bao" & Chr(10) & "Hoa"
            End If
End Select

End Sub

Sub call_op()

If Sheet1.op1.Value = True Then
    Call kiemtra(1)
ElseIf Sheet1.Op2.Value = True Then
    Call kiemtra(2)
ElseIf Sheet1.Op3.Value = True Then
    Call kiemtra(3)
End If

End Sub
Bài toán 2:
Mã:
Sub abc()
Dim str As String
str = "DepTraiCoGiSai"
kytu = ""
str_reverse = ""
For i = Len(str) To 1 Step -1
    kytu = Mid(str, i, 1)
    str_reverse = str_reverse & kytu
Next
Cells(1, 1) = str_reverse

End Sub
Em cảm ơn ạ!
Cho e hỏi câu lệnh Len kia là thế nào ạ?
 

TomShaki

Yêu THVBA
Bài toán 1: Rảnh rang ngồi làm vui chút, xem như tập code.
Bạn cần đăng nhập để thấy hình ảnh

Link tải:
Em cảm ơn ạ, cute quá.
Nhưng cho e hỏi thêm là làm thế nào để tạo ra các biểu tượng và chọn được như thế kia ạ?
Với cả phần module ModFunc có đoạn
Unprotect/ Protect và Visible giải thích thêm cho e được không ạ. Em mới học nên chưa biết nhiều mong được hướng dẫn ạ!!
 
Sửa lần cuối:

linhlbk

Yêu THVBA
@TomShaki
Len để lấy độ dài chuỗi. Cho vòng lặp chạy từ độ dài chuỗi về đến 1 và step -1. Dùng mid để lấy từng ký tự từ phải qua trái
Bạn ngày mới thêm đoạn protect vs unprotect để khóa/mở khóa sheet thôi, ng dùng đỡ thao tác các cells
 
D

Deleted member 1392

Guest
@TomShaki Các biểu tượng đó không được tạo ra. Về bản chất, nó có sẵn ở đó rồi, khi bạn nhấn vào mỗi kéo, búa hay bao, nó sẽ ẩn hiện tương ứng với các biểu tượng bạn đã chọn. VD: Khi chọn kéo, biểu tượng kéo sẽ hiện, bao và búa sẽ ẩn.
Đoạn UnProtect và Protect nhằm bảo vệ cấu trúc của sheet, tránh tình trạng người dùng kéo lung tung gây lỗi. Ban đầu Sheet đã bị khóa, nên sẽ không thao tác được nên phải dùng lệnh Unprotect để mở khóa Sheet cho code chạy. Sau khi chạy code hoàn thành, Sheet sẽ được Protect trở lại.
 

TomShaki

Yêu THVBA
@TomShaki
Len để lấy độ dài chuỗi. Cho vòng lặp chạy từ độ dài chuỗi về đến 1 và step -1. Dùng mid để lấy từng ký tự từ phải qua trái
Bạn ngày mới thêm đoạn protect vs unprotect để khóa/mở khóa sheet thôi, ng dùng đỡ thao tác các cells
Dạ, em cảm ơn ạ😇😇
 

TomShaki

Yêu THVBA
@TomShaki Các biểu tượng đó không được tạo ra. Về bản chất, nó có sẵn ở đó rồi, khi bạn nhấn vào mỗi kéo, búa hay bao, nó sẽ ẩn hiện tương ứng với các biểu tượng bạn đã chọn. VD: Khi chọn kéo, biểu tượng kéo sẽ hiện, bao và búa sẽ ẩn.
Đoạn UnProtect và Protect nhằm bảo vệ cấu trúc của sheet, tránh tình trạng người dùng kéo lung tung gây lỗi. Ban đầu Sheet đã bị khóa, nên sẽ không thao tác được nên phải dùng lệnh Unprotect để mở khóa Sheet cho code chạy. Sau khi chạy code hoàn thành, Sheet sẽ được Protect trở lại.
Em cảm ơn ạ! Em vẫn chưa hiểu đoạn biểu tượng lắm ạ, có phải ban đầu sẽ giống như tạo nút button không ạ?
 
D

Deleted member 1392

Guest
@TomShaki Mỗi lần ẩn hiện kéo, búa, bao, ô bên dưới các biểu tượng đó cũng sẽ cho thêm 1 giá trị. Kéo = 1, búa = 2, bao = 3. Dựa vào giá trị này lập các điều kiện if để xác định bên nào thẳng, bên nào thua. Các biểu tượng này chỉ là các Shape, Image bình thường thôi nha !
 

TomShaki

Yêu THVBA
Cho em hỏi thêm một chút ạ. Bài chơi oẳn tù tì e đang làm theo một cách khác là
Có 3 shape đao, búa,keo ấn chọn shape nào thì sẽ hiện ra shape tương ứng ở một ô riêng biệt.Nhưng e đang bị mắc đoạn là ở lần chơi tiếp theo thì kết quả cũ không được xóa đi nên các shape hiện ra chồng lên nhau.
Em lên mạng tìm được phương thức Intersect
Ví dụ em cho hiện kết quả ra ô E7 và muốn shape tự động xóa đi khi chơi lượt khác sẽ viết là:

Mã:
Dim img As Shape
For Each img In ActiveSheet.Shapes
 If Not Intersect(Range("E7"),img.TopLeftCell) Is Nothing  Then
    img.Delete
 End If
Next img
Em đã thử và xóa được nhưng không hiểu cách thức của Intersect như thế nào, anh/chị chỉ giúp em với được không ạ.
Ngoài ra còn cách nào khác có thể xóa không ạ?
 
Sửa lần cuối bởi điều hành viên:
Top