1. ý tởng thuật toán:
- Một bàn cờ gồm 8ì8 ô. Có 8 quân cờ, ngời chơi phải làm sao để đặt hết 8 quân cờ vào bàn cờ với quy tắc: khi 1 quân cờ đợc đặt thì các ô nằm trên hàng ngang, cột dọc, đờng chéo sẽ bị bôi màu khác do đó không đặt đợc quân cờ tiếp theo vào đó.
- Để đặt 1 quân cờ vào bàn cờ thì ngời chơi giữ chuột vào quân cờ và kéo đặt vào ô muốn đặt.
- Nếu quân cờ đã đặt thì có thể đặt lại bằng cách nháy đúp vào quân cờ đó. - Các ô của bàn cờ là một mảng 64 PictureBox.
- Cần xây dựng các thủ tục để đặt quân cờ, đồng thời sau khi đặt 1 quân cờ vào bàn cờ thì cần pha màu khác cho các ô nằm trên hàng, cột và đờng chéo của ô đó.
- Cần kiểm tra các vị trí có thể đặt đợc quân cờ, đó là các ô cha có quân nào ở đó cả, kiểm tra nếu ngời chơi đặt hết đợc 8 quân cờ vào bàn cờ.
Giao diện gồm có:
- 3 bmButton: + cmdMoi: Bắt đầu trò chơi mới
+ cmdHDan: Hớng dẫn quy tắc cho ngời chơi. + cmdThoat: Thoát khỏi trò chơi.
- 1 bmLabel: dùng hiển thị số quân còn lại cha đặt vào bàn cờ. - 1 PictureBox: Hiển thị quân cờ để ngời chơi kéo và đặt vào bàn cờ. - Mảng 64 PictureBox: đặt vào 64 ô của bàn cờ.
3. Code chơng trình:
- Các biến chung của chơng trình: Option Explicit
Dim a(64) As Integer Dim Co As Integer
- Xây dựng hàm để pha màu cho các ô trong các trờng hợp:
+ Nếu gở bỏ 1 quân ra thì các ô liên quan sẽ chuyển thành màu trắng. + Khi một trò chơi mới đợc bắt đầu thì các ô của bàn cờ cũng là màu trắng: Function PhaMau()
Dim i As Integer
lblSoquan.Caption = CStr(Co) For i = 0 To 63
Pic(i).Picture = LoadPicture()
If a(i) = 1 Then 'a(i) = 1 se duoc pha mau do Pic(i).BackColor = QBColor(12)
ElseIf a(i) = 2 Then ' a(i) = 2 thi quan co duoc dat vao Pic(i).Picture = Quanco.Picture
Else ' Con lai thi de nen mau trang Pic(i).BackColor = QBColor(15) End If
Next i End Function
- Khi bắt đầu một trò chơi mới, cần khởi tạo số quân cờ, pha màu cho bàn cờ: Private Sub cmdMoi_Click()
Dim i As Integer
Co = 8 'Khoi tao 8 quan co For i = 0 To 63
a(i) = 0 Next i PhaMau End Sub
- Hàm để kiểm tra xem khi một quân cờ đợc đặt thì các ô nào sẽ đợc chuyển thành màu đỏ:
Function KiemTra() Dim i As Integer Dim j As Integer Dim cot As Integer Dim dong As Integer Dim coti As Integer Dim dongi As Integer
For j = 0 To 63 If a(j) = 2 Then dong = Int(j / 8) cot = j Mod 8 For i = 0 To 63 If i <> j Then dongi = Int(i / 8) coti = i Mod 8
If dongi = dong Or coti = cot Or dongi - coti = dong - cot Or dongi + coti = dong + cot Then
a(i) = 1 End If End If Next i End If Next j End Function
- Thủ tục để đặt 1 quân cờ vào bàn cờ, cần kiểm tra xem ô đặt vào có đợc đặt không, nếu đợc phép đặt thì giảm số quân cờ đi 1. Nếu đặt hết thì thông báo trò chơi đã chiến thắng.
Private Sub Pic_DragDrop(Index As Integer, Source As Control, X As Single, Y As Single) If a(Index) <> 0 Then
MsgBox "Bạn không thể đặt quân cờ ở đây!", vbCritical Exit Sub End If a(Index) = 2 KiemTra Co = Co - 1 If Co = 0 Then PhaMau
MsgBox "Bạn đã chiến thắng !", vbExclamation Exit Sub
End If PhaMau
End Sub
- Để gỡ 1 quân cờ ra khỏi bàn cờ:
Private Sub Pic_DblClick(Index As Integer) ' Click dup de di chuyen quan co lai Dim i As Integer
Dim dong As Integer Dim cot As Integer Dim dongi As Integer Dim coti As Integer If a(Index) <> 2 Then
MsgBox "Không có quân cờ nào để chuyển lại", vbCritical Exit Sub
End If
dong = Int(Index / 8) 'int chuyen 8.4 thanh 9 cot = Index Mod 8
For i = 0 To 63 ' O thu i va cac o nam tren duong cheo, hang ngang, doc thi gan a(i)=0 dongi = Int(i / 8)
coti = i Mod 8
If dongi = dong Or coti = cot Or dongi - coti = dong - cot Or dongi + coti = dong + cot Then a(i) = 0 End If Next i KiemTra Co = Co + 1 PhaMau End Sub