1. ý thởng thuật toán:
- Trong thực tế chúng ta thấy trò chơi gieo quân xúc xắc có 6 mặt tơng ứng với 6 giá trị từ 1 đến 6, có thể 2 hoặc 4 ngời chơi. Mỗi ngời chơi gieo đợc giá trị bao nhiêu thì quân của ngời đó đợc đi số bớc bằng số nốt trên con xúc xắc. Quân của ngời nào về đích trớc thì sẽ chiến thắng.
- Dựa trên ý tởng đó, ở chơng trình này ta xây dựng cho 2 ngời chơi.
- Một bàn cờ 10ì10 ô đợc vẽ ra, tơng ứng trong mỗi ô sẽ là các Image. Do đó sẽ lu 1 mảng 100 Image.
- Mỗi ngời chơi tơng ứng với 1 quân xanh hoặc quân đỏ, ban đầu cùng đứng ở vị trí xuất phát. Mỗi quân gieo con xúc xắc, sẽ đợc di chuyển số ô tơng ứng với số nốt mà mình gieo đợc. Quân nào đến đích trớc sẽ chiến thắng.
- Tuy nhiên để tăng thêm độ khó và độ may rủi cho trò chơi, hãy đặt vào trong bàn cờ hình các thang và các con vật với quy luật: Nếu quân của ngời chơi đến đợc đúng vị trí chân cầu thang thì đợc lên ô trên đỉnh của cầu thang. Còn nếu quân cờ của ngời chơi đến đúng đầu của con vật thì sẽ bị rơi xuống ô ở vị trí chân của con vật đó.
- Đế giải quyết đợc vấn đề này, sẽ lu các trạng thái, hay các vị trí thứ tự đi vào 1 tệp SoDo.TXT. Dòng đầu tiên của tệp đó sẽ lu tên của ảnh đợc đặt vào làm ảnh nền. Các dòng tiếp theo sẽ lu thứ tự các bớc đi. Các ô bắt đầu từ số 0. Chẳng hạn ta đặt 1 chiếc cầu thang có vị trí chân cầu thang là 2, ngọn cầu thang ở vị trí 23. Thì đầu vào của tệp Sodo.txt sẽ có dạng:
- Tệp DocAnh.txt dùng để lu tên các quân đỏ, quân đen của ngời chơi. - Gieo con xúc xắc là một đại lợng ngẫu nhiên, có giá trị từ 1 đến 6.
2. Giao diện chơng trình:
- Image1: ảnh bao xung quanh các ảnh nhỏ, Image này lấy ảnh Sodo.bmp làm ảnh nền.
- Mảng 100 Image đợc đặt tơng ứng với các ô vuông của bàn cờ, Ovuong(i) - Mảng 6 Image để lu các giá trị của con xúc xắc: imgThui(i)
- 1 Image để hiển thị giá trị của con xúc xắc khi đợc gieo: imgGieo - 2 Image tơng ứng với 2 ngời chơi: Nguoi1, Nguoi2
- Các textbox để nhập tên ngời chơi, các label để lu điểm ngời chơi. - Timer1: để điều khiển quá trình chơi
3. Code chơng trình:
- Các biến trong Modul: Public SoNot As Integer Public SoONguoi1 As Integer Public SoONguoi2 As Integer - Các biến trong Form:
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Dim HinhVuong(99) As Integer Dim NguoiDi As Integer
Dim XLGame As Boolean Dim Not1 As Integer - Form_Load:
Dim a As Integer On Error GoTo 1
Open "Sodo.txt" For Input As #1 Input #1, TenTep For a = 0 To 99 Input #1, HinhVuong(a) Next a Close #1 On Error GoTo 2
Open "docanh.txt" For Input As #1 Input #1, qDo
Input #1, qDen Close #1
On Error GoTo 0
Let Nguoi1.Picture = LoadPicture(qDo) Let Nguoi2.Picture = LoadPicture(qDen) Image1.Picture = LoadPicture(TenTep) GoTo 3
1 MsgBox "Không tìm thấy tệp Sodo.txt hoặc không đọc đợc", vbOKOnly + vbInformation, "Thông báo"
End
2 MsgBox "Không tìm thấy tệp DocAnh.txt hoặc không đọc đợc", vbOKOnly + vbInformation, "Thông báo"
End 3
End Sub
- Khi bắt đầu 1 trò chơi mới: Private Sub cmdChoimoi_Click() Dim d As Integer
d = MsgBox(" Trò chơi đang diênc ra, bạn co muốn chơi lại? ", vbYesNo + vbQuestion, "Thông báo!") If d = vbYes Then SoONguoi1 = 0 SoONguoi2 = 0 End If If d = vbNo Then Exit Sub End If End If
If txtTen1.Text = "" Or txtTen2.Text = "" Then
MsgBox "Bạn phải nhập tên 2 ngời chơi!", vbOKOnly + vbInformation, "Thông báo!" txtTen1.SetFocus
Exit Sub End If
txtTen1.Locked = True txtTen2.Locked = True
MsgBox "Trò chơi mới đã bắt đầu! ", vbOKOnly + vbInformation, "Mời bạn đi" NguoiDi = 1 Nguoi1.Left = OVuong(0).Left Nguoi1.Top = OVuong(0).Top Nguoi2.Left = OVuong(0) - 5 Nguoi2.Top = OVuong(0).Top Nguoi1.Visible = True Nguoi2.Visible = True XLGame = True End Sub
- Khi thực hiện gieo con xúc xắc: Private Sub cmdGieo_Click()
If XLGame = False Then Exit Sub If Timer1.Enabled = True Then Exit Sub Randomize Timer
Not1 = Int(Rnd * 6) + 1
End Sub - Timer1:
Private Sub Timer1_Timer() If Not1 = 0 Then
Timer1.Enabled = False
If NguoiDi = 1 Then Let NguoiDi = 2 Else NguoiDi = 1 Exit Sub
End If
If NguoiDi = 1 Then If SoONguoi1 = 99 Then
MsgBox "Ngời chơi 1 chiến thắng! ", vbOKOnly + vbInformation, "Chúc mừng! " Timer1.Enabled = False XLGame = False SoONguoi1 = 0 SoONguoi2 = 0 Exit Sub End If SoONguoi1 = SoONguoi1 + 1 Nguoi1.Left = OVuong(SoONguoi1).Left Nguoi1.Top = OVuong(SoONguoi1).Top Not1 = Not1 - 1 If Not1 = 0 Then If SoONguoi1 = 99 Then
MsgBox "Ngời chơi 1 đã chiến thắng! ", vbOKOnly + vbInformation, "Chúc mừng!" Timer1.Enabled = False XLGame = False SoONguoi1 = 0 SoONguoi2 = 0 Exit Sub End If SoONguoi1 = HinhVuong(SoONguoi1) Nguoi1.Left = OVuong(SoONguoi1).Left Nguoi1.Top = OVuong(SoONguoi1).Top
lblSo1.Caption = "Số ô đã đi: " & SoONguoi1 Exit Sub End If End If If NguoiDi = 2 Then If SoONguoi2 = 99 Then
MsgBox "Ngời chơi 2 đã chiến thắng! ", vbOKOnly + vbInformation, "Chúc mừng! " Timer1.Enabled = False XLGame = False SoONguoi1 = 0 SoONguoi2 = 0 Exit Sub End If SoONguoi2 = SoONguoi2 + 1 Nguoi2.Left = OVuong(SoONguoi2).Left Nguoi2.Top = OVuong(SoONguoi2).Top Not1 = Not1 - 1 If Not1 = 0 Then If SoONguoi2 = 99 Then
MsgBox "Ngời chơi 2 đã chiến thắng! ", vbOKOnly + vbInformation, "Chúc mừng! " Timer1.Enabled = False XLGame = False SoONguoi1 = 0 SoONguoi2 = 0 Exit Sub End If SoONguoi2 = HinhVuong(SoONguoi2) Nguoi2.Left = OVuong(SoONguoi2).Left Nguoi2.Top = OVuong(SoONguoi2).Top XucXac.Caption = " Ngời đi : " & txtTen2.Text lblSo2.Caption = "Số ô đã đi: " & SoONguoi2 Exit Sub
End If End If
Chơng IV: Các trò chơi khéo léo