Trò chơi gieo xúc xắ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 26)

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ẽ lưu 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ẽ lưu 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ẽ lưu tên của ảnh được đặt vào làm ảnh nền. Các dòng tiếp theo sẽ lưu 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 để lưu 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 để lưu 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 để lưu đ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:

Private Sub Form_Load() SoNot = 1

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

If XLGame = True Then

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 imgGieo.Picture = imgThui(Not1 - 1) Timer1.Enabled = True 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

XucXac.Caption = " Người đi : " & txtTen1.Text 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 End Sub

CHƯƠNG IV: CÁC TRÒ CHƠI KHÉO LÉO I. Trò chơi “ Tám quân cờ”

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 ô chưa 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 chưa đặ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

+ Nếu đặt 1 quân vào thì màu các ô ở hàng ngang, cột dọc, đường chéo sẽ chuyển thành màu đỏ.

+ 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

1. Ý thưởng thuật toán:

- Một hình được vẽ ra hình dung như 1 con rắn đang đi săn mồi, 1 hình khác làm mồi cho con rắn đó. Cái mồi sẽ xuất hiện ngẫu nhiên ở 1 vị trí nào đó trên Form. Người chơi sẽ điều khiển con rắn để bắt con mồi. Nếu con rắn chạm vào con mồi thì người con rắn sẽ dài ra. Mỗi lần ăn được 1 mồi tương ứng với 1 điểm. Khi đã ăn được một mồi thì mồi sẽ xuất hiện ngẫu nhiên tại 1 trí khác. Con rắn mỗi lúc một dài ra. Nếu người chơi điều khiển con rắn không khéo léo đi ra khỏi không gian trò chơi thì trò chơi kết thúc.

- Để mỗi lần con rắn ăn được mồi, con rắn sẽ dài thêm ra. Do đó, sẽ xây dựng con rắn là một mảng các Shape, hình vuông. Ban đầu mảng này có 1 phần tử, cứ mỗi lần săn được mồi thì số phần tử của mảng này tăng lên.

2. Giao diện chương trình:

Giao diện gồm có:

- 1 bmButton: cmdBatdau: Bắt đầu trò chơi, khi trò chơi bắt đầu thì Nút này phải ẩn đi

- 1 Shape làm con mồi

- 1 mảng các Shape làm con rắn.

- 1 Image (ẩn) để cho con mồi chuyển động ngẫu nhiên cùng Image này: img - 1 Timer: để điều khiển trò chơi.

3. Code chương trình: -Các biến của chương trình: Dim i As Integer

Dim m As Integer Dim l As Integer Dim A(100) As Integer Dim b(100) As Integer Dim kq As Integer Dim t As Integer

- Khi bắt đầu trò chơi mới: Private Sub cmdBatdau_Click() cmdBatdau.Visible = False Timer1.Enabled = True Img.Visible = False End Sub

- Thủ tục dùng các phím mũi tên điều khiển:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = vbKeyLeft And (i = 2 Or i = 8) Then i = 4 ' Key Left If KeyCode = vbKeyDown And (i = 4 Or i = 6) Then i = 2 ' Key Down If KeyCode = vbKeyUp And (i = 4 Or i = 6) Then i = 8 ' Key Up If KeyCode = vbKeyRight And (i = 2 Or i = 8) Then i = 6 ' Key Right End Sub

- Sự kiện Form_Load: Private Sub Form_Load() Me.Top = 0 Me.Left = 0 Var = 0 t = 49 l = 51 Shape2.Visible = True

kq = 0 lblTT.Caption = CStr(Val(kq)) Timer1.Enabled = False Img.Visible = False End Sub - Sự kiện Timer1_Timer: Private Sub Timer1_Timer() On Error Resume Next For Var = 0 To kq A(Var) = Shape1(Var).Top b(Var) = Shape1(Var).Left Next For Var = 1 To kq Shape1(Var).Top = A(Var - 1) Shape1(Var).Left = b(Var - 1) Next Var = 0 lblTT.Caption = CStr(Val(kq))

If Shape1(0).Top <= 30 Or Shape1(0).Top >= 7420 Or Shape1(0).Left <= 40 Or Shape1(0).Left >= 7700 Then

MsgBox "Bạn đã thua ! Trò chơi kết thúc " Unload Me

End If

If Img.Top <= 0 Or Img.Top >= 7420 Then t = -t If Img.Left <= 0 Or Img.Left >= 7700 Then l = -l Img.Top = Img.Top + t * 2

Img.Left = Img.Left + l * 2

If (Shape1(0).Left >= Shape2.Left - 420 And Shape1(0).Left <= Shape2.Left + 420) And (Shape1(0).Top >= Shape2.Top - 420 And Shape1(0).Top <= Shape2.Top + 420) Then kq = kq + 1

Load Shape1(kq)

Shape1(kq).Visible = True m = kq - 1

If i = 2 Then ' Neu chay xuong

Shape1(kq).Top = Shape1(m).Top - 420 ' 420: do rong cua cac Shape Shape1(kq).Left = Shape1(m).Left

End If

If i = 4 Then ' Neu chay trai Shape1(kq).Top = Shape1(m).Top Shape1(kq).Left = Shape1(m).Left + 420 End If

If i = 6 Then ' Neu chay phai Shape1(kq).Top = Shape1(m).Top Shape1(kq).Left = Shape1(m).Left - 420 End If

If i = 8 Then ' Neu chay len

Shape1(kq).Top = Shape1(m).Top + 420 Shape1(kq).Left = Shape1(m).Left End If Shape2.Left = Img.Left Shape2.Top = Img.Top End If

If i = 2 Then ' Neu chay xuong

Shape1(0).Top = Shape1(0).Top + Shape1(0).Width End If

If i = 6 Then ' Neu chay phai

Shape1(0).Left = Shape1(0).Left + Shape1(0).Width End If

If i = 4 Then ' Neu chay trai

Shape1(0).Left = Shape1(0).Left - Shape1(0).Width End If

If i = 8 Then ' Neu chay len

Shape1(0).Top = Shape1(0).Top - Shape1(0).Width End If

III. Trò chơi N2 - 1 số (N = 4):

1. Ý tưởng thuật toán:

- Có 16 ô vuông, có 15 chữ số từ 1 đến 15 nằm trên các ô vuông, có 1 ô trống. Sau đó xáo trộn các ô này, người chơi phải sắp xếp lại sao cho đúng với trật tự ban đầu. Với quy tắc sắp xếp như sau: Ô trống có thể dịch lên, xuống, trái, phải. Khi dịch thì giá trị con số của ô đó và ô trống đổi chỗ cho nhau.

- Để dịch 1 ô cạnh ô trống thì ta nháy vào ô đó, giá trị ô này và ô trống đổi chỗ cho nhau. Ta cần kiểm tra các vị trí nào trong các ô có thể dịch lên, dịch xuống, trái, phải.

- Trò chơi kết thúc khi người chơi sắp xếp lại đúng theo trật tự ban đầu. 2. Giao diện chương trình:

Giao diện gồm có:

- 16 bmButton: C1. . . C16

- 2 bmButton: + cmdXaoTron: Thực hiện việc xáo trộn các số khi bắt đầu trò chơi.

+ cmdThoat: Thoát khỏi chương trình. - 1 bmLabel: Hiển thị thời gian chơi của người chơi.

- 1 Timer: Điều khiển thời gian.

3. Các bước xây dựng chương trình:

- Thủ tục thực hiện việc xáo trộn ngẫu nhiên.

- Xây dựng các sự kiện khi người chơi nháy chuột vào từng ô một cạnh ô trống.

- Hàm kiểm tra người chơi đã thắng chưa.

IV. Trò chơi ném bom:

1. Ý tưởng thuật toán:

- Dùng các Shape hình chữ nhật vẽ nên các thành phố với các tòa nhà có độ cao khác nhau. Một máy bay chuyển động ngang, hết mỗi lần bay lại quay về vị trí cũ nhưng hạ thấp hơn. Lúc đang bay có thể thả bom xuống các tòa nhà, mỗi tòa nhà bị trúng bom sẽ bị sụp đi 1 độ cao bao nhiêu đó. Nếu khi máy bay ném bom chưa hết mà hạ xuống chạm vào nóc các tòa nhà thì máy bay sẽ bị cháy và trò chơi kết thúc. Nếu các tòa nhà đều bị sụp cả thì người chơi đã chiến thắng. Trong quá trình chơi sẽ tính điểm cho người chơi.

- Người chơi có thể chọn mức độ khó của trò chơi, mức độ càng khó thì tố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 26)

Tải bản đầy đủ (DOC)

(54 trang)
w