Trò chơi tám quân cờ

Một phần của tài liệu Áp dụng lí thuyết game xây dựng một số trò chơi (Trang 33 - 37)

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 (adsbygoogle = window.adsbygoogle || []).push({});

- 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

Một phần của tài liệu Áp dụng lí thuyết game xây dựng một số trò chơi (Trang 33 - 37)