trò chơi "BColor" của SA_DQ

Liên hệ QC

handung107

Thành viên gắn bó
Thành viên danh dự
Tham gia
30/5/06
Bài viết
1,630
Được thích
17,436
Nghề nghiệp
Bác sĩ
Xin gới thiệu sơ lược trò chơi "BColor":

Hàm Rnd() cho 4 màu ngẫu nhiên trong 6/7 màu để khuất sau 4 ô;
Người chơi chọn 4 trong 6/7 màu & nhấn nút kiểm để máy cho biết kết quả so sánh với 4 màu trên; nếu đúng màu & đúng vị trí sẽ được báo X (& bị trừ 2 điểm- đầu ván biếu 71/76(7) điểm) nếu chỉ đúng màu sẽ báo O ( & trừ 1 điểm)
Trò chơi tiếp tục ở các hàng dưới (qua mỗi hàng bị trừ 3 điểm); Có tổng cộng 10 hàng; ~ người chơi hay chỉ cần khoảng 5-7 dòng là xong ván (khi đó bốn màu đã chọn ở hàng này trùng với 4 màu ngẫu nhiên mà máy đã chọn ban đầu & đúng theo trật tự nữa.
Ngày 29-30/08: Nút 7 dùng để chuyển đổi giữa 6 màu => 7 màu & ngược lại! Khi <> 7, nút có tác dụng dời vị trí
 

File đính kèm

  • BColor.zip
    21.1 KB · Đọc: 448
Hướng dẫn thực hiện CTrình!

Phần chuẩn bị:

ngày 19/9: B0: Khai báo một số biến dùng chung, như 1 vài biến chuỗi, một vái biến Integer dùng cho vòng lặp & 1 biến Integer để đếm điểm người chơi & gán cho nó điểm = 71/76 ứng với 6/7 màu.
B1: Tạo các Macro tô các màu vào các ô cần thiết khi nhấn nút tương ứng;
B2: Dùng hàm Rnd() chọn lấy 4 số biểu thị 4 màu ngẫu nhiên (có thể trùng nhau giữa các ô, kệ nó & càng hay!);
B3: Khai báo 3 biến mảng (4 fần tử) cho 3 đối tượng của quy trình đối chiếu & kiểm tra: 1 biến cho các ô màu ngẫu nhiên (4 ô M); 1 biến cho 4 ô của người chơi nhập màu (4 ô N) & biến mảng cho các ô ghi kết quả (4 ô G) (trong đó M: ghi lại việc đã chọn 1/4 ô ngẫu nhiên đem Ssánh hay chưa; N- ghi nhận đã đem ô do người chơi đánh dấu đã đem đối chiếu hay chưa & G - để khẳng định đã ghi lên ô này hay chưa;
B4: Tô các màu = màu nguyên thuỷ;
(Toàn bộ fần này thực hiện bỡi nút lệnh New (có thể bấm CTRL+SHIFT+N để run))
19/9: Quá trình tô màu các ô của người chơi: Macro tô màu; Macro này thực thi tô màu tương ứng của các nút lệnh gởi đối số đến

Sub ToMau(Iw As Integer)
On Error GoTo Loi_ToMau
Chu = Choose(iCot, "B", "C", "D", "E")
Chu = Chu & CStr(4 + iHang)

iCot = Choose(iCot, 2, 3, 4, 1) 'Chuyển cột khi đã tô xong màu
Range(Chu).Select: Selection.Interior.ColorIndex = Iw
Err_ToMau: Exit Sub
Loi_ToMau: MsgBox Error$
Resume Err_ToMau
End Sub

Ngày 21/09: Quan trọng nhất của phần viết chương trình BColor là phần kiểm tra & ghi nhận kết quả thực hiện theo từng hàng; Trước hết phải ghi nhận các ô mà người chơi đã chọn đúng màu & đúng vị trí để đánh dấu màu đen cho chữ [O]; Điều này ta phải lần lượt từ trái qua phải theo thói quen mà thôi, ghi kết quả cũng lần lượt từ ô trái nhất, thể hiện tuần tự [O] màu đen trước, [O] màu trắng sau; Khi thu được 4 chữ [O] màu đen => thực hiện thủ tục HetVan.
Sau khi kiểm hết 4 ô đúng màu & vị trí, thì đến lượt kiểm màu không đúng vị trí so với ~ ô còn lại chưa đúng (nhờ các biến để loại trừ). Chuyện này phức tạp & dài dòng hơn trước nhiều!
 
Sub DanhGia

Sub DanhGia()
Dim DaDanhGia(1 To 4) As Boolean
Dim DaGhi(1 To 4) As Boolean
ReDim DaChon(1 To 4) As Boolean
10 '. Đúng màu & Đúng vị trí:
Chu = "B" & CStr(4 + iHang): Range(Chu).Select
If Mau(1) = Selection.Interior.ColorIndex Then
GhiDau "G", 1 'Sub GhiDau dùng để đánh dấu (ghi nhận) đúng KQ [O]
DaGhi(1) = -1
DaDanhGia(1) = True: DaChon(1) = -1
End If
11 Chu = "C" & CStr(4 + iHang): Range(Chu).Select
If Mau(2) = Selection.Interior.ColorIndex Then
If DaGhi(1) = 0 Then
Chu = "G": DaGhi(1) = True
ElseIf DaGhi(1) Then
Chu = "H": DaGhi(2) = True
End If
GhiDau Chu, 1
DaDanhGia(2) = True: DaChon(2) = -1
End If
12
Chu = "D" & CStr(4 + iHang): Range(Chu).Select
If Mau(3) = Selection.Interior.ColorIndex Then
If DaGhi(1) = 0 Then
Chu = "G": DaGhi(1) = -1
ElseIf DaGhi(1) Then
If DaGhi(2) = 0 Then
Chu = "H": DaGhi(2) = -1
ElseIf DaGhi(2) = -1 Then
Chu = "I": DaGhi(3) = -1
End If
End If
GhiDau Chu, 1
DaDanhGia(3) = True: DaChon(3) = -1
End If
13
Chu = "E" & CStr(4 + iHang): Range(Chu).Select
If Mau(4) = Selection.Interior.ColorIndex Then
If DaGhi(1) = 0 Then
Chu = "G": DaGhi(1) = -1
ElseIf DaGhi(1) Then
If DaGhi(2) = 0 Then
Chu = "H": DaGhi(2) = -1
ElseIf DaGhi(2) Then
If DaGhi(3) = 0 Then
Chu = "I": DaGhi(3) = -1
ElseIf DaGhi(3) Then
Chu = "J": DaGhi(4) = -1
End If
End If
End If
GhiDau Chu, 1
DaDanhGia(4) = True: DaChon(4) = -1
End If
If DaGhi(4) Then
HetVan
End If
20 '. Chỉ đúng màu & không đúng vị trí:
Chu = "B" & CStr(4 + iHang): Range(Chu).Select
If DaGhi(1) = 0 Then
For ii = 2 To 4
If Mau(ii) = Selection.Interior.ColorIndex Then
GhiDau "G", 2
DaDanhGia(ii) = -1: DaChon(1) = -1
DaGhi(1) = -1
End If
Next ii
ElseIf DaGhi(1) = -1 And DaGhi(2) = 0 And DaChon(1) = 0 Then
For ii = 2 To 4
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "H", 2
DaDanhGia(ii) = -1: DaChon(1) = -1
DaGhi(2) = -1
End If
Next ii
ElseIf DaGhi(2) = -1 And DaGhi(3) = 0 And DaChon(1) = 0 Then '?? ??
For ii = 2 To 4
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "I", 2
DaDanhGia(ii) = -1: DaChon(1) = -1
DaGhi(3) = -1
End If
Next ii
ElseIf DaGhi(3) = -1 And DaGhi(4) = 0 And DaChon(1) = 0 Then
For ii = 2 To 4
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "J", 2
DaDanhGia(ii) = -1: DaChon(1) = -1
DaGhi(4) = -1
End If
Next ii
End If
'!!!! Cột C
Chu = "C" & CStr(4 + iHang): Range(Chu).Select
If DaGhi(1) = 0 Then
For ii = 1 To 4
If ii <> 2 And Mau(ii) = Selection.Interior.ColorIndex Then
GhiDau "G", 2
DaDanhGia(ii) = -1: DaChon(2) = -1
DaGhi(1) = -1
End If
Next ii
ElseIf DaGhi(1) = -1 And DaGhi(2) = 0 And DaChon(2) = 0 Then
For ii = 1 To 4
If ii <> 2 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "H", 2
DaDanhGia(ii) = -1: DaChon(2) = -1
DaGhi(2) = -1
End If
Next ii
ElseIf DaGhi(2) = -1 And DaGhi(3) = 0 And DaChon(2) = 0 Then
For ii = 1 To 4
If ii <> 2 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "I", 2
DaDanhGia(ii) = -1: DaChon(2) = -1
DaGhi(3) = -1
End If
Next ii
ElseIf DaGhi(3) = -1 And DaGhi(4) = 0 And DaChon(2) = 0 Then
For ii = 1 To 4
If ii <> 2 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "J", 2
DaDanhGia(ii) = -1: DaChon(2) = -1
DaGhi(4) = -1
End If
Next ii
End If
'Cột D ////
Chu = "D" & CStr(4 + iHang): Range(Chu).Select
If DaGhi(1) = 0 Then
For ii = 1 To 4
If ii <> 3 And Mau(ii) = Selection.Interior.ColorIndex Then
GhiDau "G", 2
DaDanhGia(ii) = -1: DaChon(3) = -1
DaGhi(1) = -1
End If
Next ii
ElseIf DaGhi(1) = -1 And DaGhi(2) = 0 And DaChon(3) = 0 Then
For ii = 1 To 4
If ii <> 3 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "H", 2
DaDanhGia(ii) = -1: DaChon(3) = -1
DaGhi(2) = -1
End If
Next ii
ElseIf DaGhi(2) = -1 And DaGhi(3) = 0 And DaChon(3) = 0 Then
For ii = 1 To 4
If ii <> 3 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "I", 2
DaDanhGia(ii) = -1: DaChon(3) = -1
DaGhi(3) = -1
End If
Next ii
ElseIf DaGhi(3) = -1 And DaGhi(4) = 0 And DaChon(3) = 0 Then
For ii = 1 To 4
If ii <> 3 And Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "J", 2
DaDanhGia(ii) = -1: DaChon(3) = -1
DaGhi(4) = -1
End If
Next ii
End If
'Cột E ////
Chu = "E" & CStr(4 + iHang): Range(Chu).Select
If DaGhi(1) = 0 Then
For ii = 1 To 3 '4
If Mau(ii) = Selection.Interior.ColorIndex Then ' ii<>3
GhiDau "G", 2
DaDanhGia(ii) = -1: DaChon(4) = -1
DaGhi(1) = -1
End If
Next ii
ElseIf DaGhi(1) = -1 And DaGhi(2) = 0 And DaChon(4) = 0 Then
For ii = 1 To 3
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "H", 2
DaDanhGia(ii) = -1: DaChon(4) = -1
DaGhi(2) = -1
End If
Next ii
ElseIf DaGhi(2) = -1 And DaGhi(3) = 0 And DaChon(4) = 0 Then
For ii = 1 To 3
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "I", 2
DaDanhGia(ii) = -1: DaChon(4) = -1
DaGhi(3) = -1
End If
Next ii
ElseIf DaGhi(3) = -1 And DaGhi(4) = 0 And DaChon(4) = 0 Then
For ii = 1 To 3
If Mau(ii) = Selection.Interior.ColorIndex And DaDanhGia(ii) = 0 Then
GhiDau "J", 2
DaDanhGia(ii) = -1: DaChon(4) = -1
DaGhi(4) = -1
End If
Next ii
End If

DiemSo = DiemSo - 3
Range("B2").Select: ActiveCell.Value = DiemSo
Range("L" & CStr(4 + iHang)).Select
iHang = 1 + iHang: iCot = 1

End Sub
 
Một bài viết hay, mình học rất nhiều thư rừ trang web này. Xin cám ơn các thành viên.
 
Web KT
Back
Top Bottom