Cùng với sự phát triển của các lĩnh vực kinh tế, xã hội, nhu cầu ứng dụng công nghệ thông tin ngày càng cao và không ngừng biến đổi. Khi một hệ thống càng phát triển, càng phức tạp thì các phương thức cổ điển truyền thống sẽ trở nên cồng kềnh và khó có thể áp dụng được yêu cầu ngày càng cao của hệ thống. Để xử lý các thông tin một cách nhanh chóng, chính xác, thuận tiện và hiệu quả, đòi hỏi phải có sự hỗ trợ của một công cụ hiện đại, đó chính là công nghệ thông tin.
Sự phát triển nhảy vọt của công nghệ thông tin đã tác động mạnh mẽ đến các hoạt động xã hội, làm thay đổi một cách sâu sắc đến phong cách làm việc của một xã hội. Công nghệ thông tin đã trở thành trụ cột chính của nền kinh tế tri thức. ứng dụng công nghệ thông tin vào các hoạt động giải trí của xã hội được nhiều người quan tâm. Phạm vi ứng dụng của công nghệ thông tin ngày càng mở rộng trên nhiều lĩnh vực: quản lý các hoạt động của con người và xã hội, tự động hóa, truyền thông, giải trí. .
Đời sống của con người ngày càng được nâng cao. Bên cạnh đó nhu cầu về vui chơi giải trí của con người ngày càng được đòi hỏi. Các trò chơi được thiết kế bằng máy tính đã ra đời và đang trên đà phát triển để đáp ứng những nhu cầu đòi hỏi đó của con người. Vì lý do đó tôi đã mạnh dạn chọn đề tài: “Áp dụng lý thuyết Game xây dựng một số trò chơi” làm khoá luận tốt nghiệp đại học.
55 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1271 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Đề tài Áp dụng lý thuyết Game xây dựng một số trò chơi, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỜI NÓI ĐẦU
Cùng với sự phát triển của các lĩnh vực kinh tế, xã hội, nhu cầu ứng dụng công nghệ thông tin ngày càng cao và không ngừng biến đổi. Khi một hệ thống càng phát triển, càng phức tạp thì các phương thức cổ điển truyền thống sẽ trở nên cồng kềnh và khó có thể áp dụng được yêu cầu ngày càng cao của hệ thống. Để xử lý các thông tin một cách nhanh chóng, chính xác, thuận tiện và hiệu quả, đòi hỏi phải có sự hỗ trợ của một công cụ hiện đại, đó chính là công nghệ thông tin.
Sự phát triển nhảy vọt của công nghệ thông tin đã tác động mạnh mẽ đến các hoạt động xã hội, làm thay đổi một cách sâu sắc đến phong cách làm việc của một xã hội. Công nghệ thông tin đã trở thành trụ cột chính của nền kinh tế tri thức. ứng dụng công nghệ thông tin vào các hoạt động giải trí của xã hội được nhiều người quan tâm. Phạm vi ứng dụng của công nghệ thông tin ngày càng mở rộng trên nhiều lĩnh vực: quản lý các hoạt động của con người và xã hội, tự động hóa, truyền thông, giải trí... .
Đời sống của con người ngày càng được nâng cao. Bên cạnh đó nhu cầu về vui chơi giải trí của con người ngày càng được đòi hỏi. Các trò chơi được thiết kế bằng máy tính đã ra đời và đang trên đà phát triển để đáp ứng những nhu cầu đòi hỏi đó của con người. Vì lý do đó tôi đã mạnh dạn chọn đề tài: “Áp dụng lý thuyết Game xây dựng một số trò chơi” làm khoá luận tốt nghiệp đại học.
Mục tiêu của chương trình là xây dựng một số trò chơi đơn giản nhằm giúp cho người chơi thư giản sau những giờ học tập, làm việc căng thẳng. Chương trình được tổ chức dưới dạng một chương trình quản lý các trò chơi, do đó người chơi có thể chơi các trò chơi khác nhau, ở các mức độ khác nhau. Sau khi tìm hiểu ngôn ngữ Visual Basic 6.0, cùng bộ công cụ “Bảo Minh UniToolBox", tôi đã xây dựng chương trình quản lý các trò chơi áp dụng lý thuyết Game gồm 4 chương cấu trúc như sau:
Lời nói đầu
Chương I: Giao diện chính chương trình quản lý một số trò chơi.
Chương II: Các trò chơi có bước đi may rủi.
Chương III: Các trò chơi đối kháng.
Chương IV: Các trò chơi khéo léo.
Kết luận
Tôi xin chân thành cảm ơn tiến sỹ Phan Lê Na đã hướng dẫn và giúp đỡ tận tình tôi trong thời gian qua. Qua đây tôi cũng xin gửi lời cảm ơn các thầy giáo, cô giáo trong khoa Công nghệ thông tin và các bạn trong lớp 43B2 đã góp nhiều ý kiến cho chương trình này.
Với thời gian cho phép tôi đã hoàn thành đề tài. Song trong quá trình thiết kế và phân tích chương trình không tránh khỏi một số hạn chế vì vậy tôi rất mong được sự góp ý giúp đỡ của các thầy cô giáo, các bạn để chương trình được hoàn thiện hơn.
Sinh viên thực hiện
Đinh Thuần Nho
CHƯƠNG I: GIAO DIỆN CHÍNH CHƯƠNG TRÌNH QUẢN LÝ MỘT SỐ TRÒ CHƠI
I. Lý do chọn ngôn ngữ:
Trong trường Đại học chúng ta được học cơ bản về một số ngôn ngữ lập trình mang tính lý thuyết nhiều hơn là ứng dụng như Pascal, C, Assembly,...Trong cuộc sống nhiều bài toán quản lý, tính toán đòi hỏi ngoài sự chính xác, tính đúng đắn còn cần phải có tính thẩm mỹ cao, chương trình dễ sử dụng. Để đáp ứng được điều đó, tôi thấy mình cần tìm hiểu thêm một số ngôn ngữ lập trình trong môi trường Windows mà chúng hỗ trợ rất nhiều trong quá trình thiết kế giao diện chương trình. Visual Basic là một trong số các ngôn ngữ đó.
Visual Basic là một ngôn ngữ khá mới, hỗ trợ rất mạnh cho người lập trình, nó có thể hỗ trợ, kết nối được với nhiều ngôn ngữ khác. Ngoài phần chính là lập trình với cơ sở dữ liệu, các tính năng đồ họa trong Visual Basic cũng được ứng dụng rất rộng rãi.
Bên cạnh đó, tôi còn sử dụng bộ công cụ “Bảo Minh UniToolBox", với một số tính năng nổi trội sau:
- Là người lập trình, bạn sẽ quan tâm đến UniCode, nếu bạn chọn một môi trường để phát triển nào đó hỗ trợ UniCode, chẳng hạn Microsoft.Net. Tuy nhiên nếu chúng ta dùng Visual Basic6, mà vẫn muốn dùng nó, thì chúng ta phải làm sao?
- Microsoft hỗ trợ cho chúng ta các Activex trong Microsoft Form 2.0: TextBox, Label, ListBox,... Với các Control này đã có thể xử lý được dữ liệu đơn giản trên Unicode. Tuy nhiên giữa các Control chuẩn của Windows và MS Form 2.0 có những nét không giống nhau, gây khó khăn khi xử lý.
- Mặt khác, chắc chắn người lập trình sẽ quan tâm đến giao diện của sản phẩm do mình viết ra: hình thức trình bày, giao tiếp với người dùng, tính hợp lý, dễ sử dụng... nói cách khác, tính “Thân thiện với người sử dụng”.
Để thể hiện một phần kiến thức nghiên cứu được, em cài đặt một chương trình thể hiện một số trò chơi đơn giản.
II.Giao diện chính của chương trình quản lý một số trò chơi:
Chương trình được thiết kế dưới dạng thực đơn (Menu) để người chơi thuận tiện trong việc lựa chọn các trò chơi ở các mức độ khác nhau. Giao diện chính của chương trình được thiết kế như sau:
Các chức năng của chương trình được phân rã thành các chức năng con theo sơ đồ sau:
Sơ đồ bố trí các chức năng con của chức năng Trò chơi may mắn:
Sơ đồ bố trí các chức năng con của chức năng Trò chơi đối kháng:
Sơ đồ bố trí các chức năng con của chức năng Trò chơi khéo léo:
Người chơi có thể chọn nhạc trong quá trình chơi các trò chơi.
Sơ đồ các choc năng của hệ thống:
Chương trình Áp dụng lý thuyết Game xây dựng một số trò chơi hy vọng nó sẽ giúp ích phần nhỏ để thư giản sau những giờ học tập hay làm việc căng thẳng.
CHƯƠNG II: CÁC TRÒ CHƠI CÓ BƯỚC ĐI MAY RỦI
I. Trò chơi “Oẳn tù tỳ”
Ý tưởng thuật toán:
- Chúng ta thường thấy các em nhỏ có trò chơi Oẳn tù tì, trò chơi cần có 2 người hoặc 2 đội tham gia để phân thắng bại dành quyền đi trước cho một trò chơi nào đó tiếp theo, hoặc chỉ để thử may mắn của 2 người. Tuy nhiên nếu chỉ có một người, lại đang ngồi làm việc bên máy tính, cũng muốn thử may rủi của mình? Do đó xây dựng trò chơi này và xem máy tính như người chơi còn lại.
- Người chơi có thể chọn 1 trong 3 lựa chọn là: Búa, Kéo hoặc Giấy.
- Khi người chơi đã lựa chọn phương án cho mình, máy tính sẽ chọn ngẫu nhiên 1 trong 3 lựa chọn đó.
- Sau đó sẽ kiểm tra các trường hợp xảy ra là: Máy tính thắng, người chơi thắng hoặc trò chơi hòa. Với các quy tắc:
+ Búa thắng kéo
+ Kéo thắng giấy
+ Giấy thắng búa
+ Nếu máy tính và người chơi cùng chọn 1 lựa chọn thì trò chơi hòa.
- Lưu số lần thắng của mỗi bên trong mỗi lần chơi.
Giao diện chương trình:
I_May (Image)
I_Ban
(Image)
cmdBua
cmdGiay
Giao diện gồm có:
- 3 bmBotton: cmdBua, cmdKeo, cmdGiay: là 3 lựa chọn của người chơi.
- 2 Image: I_Ban, I_May: hiển thị lựa chọn của người chơi và của máy tính.
- 2 bmLabel để ghi điểm người chơi: Diem1, Diem2.
- Timer1: điều khiển trò chơi: lấy giá trị ngẫu nhiên cho lựa chọn của máy, kiểm tra các trường hợp thắng, thua.
- Timer2: điều khiển điểm chơi.
Code của chương trình:
- Biến lưu điểm của 2 người chơi:
Dim d1 As Integer
Dim d2 As Integer
- Khi người chơi lựa chọn 1 phương án, chẳng hạn người chơi chọn là Kéo, thì sẽ đặt hình Kéo vào I_Ban, đồng thời Timer1 hoạt động:
Private Sub cmdKeo_Click()
Let I_Ban.Picture = cmdKeo.Picture
Timer1.Enabled = True
End Sub
- Private Sub Timer1_Timer()
Let Timer1.Interval = Timer1.Interval + 5
Randomize Timer
1 X = Int(Rnd * 2) + 1 'Lay ngau nhien cac so >=0 va <1 roi +1, Rnd tra ve 0<gia tri<1
If X = 1 And cmdBua.Picture I_May.Picture Then Let I_May.Picture = cmdBua.Picture Else If X = 1 Then GoTo 1
If X = 2 And cmdKeo.Picture I_May.Picture Then Let I_May.Picture = cmdKeo.Picture Else If X = 2 Then GoTo 1
If X = 3 And cmdGiay.Picture I_May.Picture Then Let I_May.Picture = cmdGiay.Picture Else If X = 3 Then GoTo 1
If Timer1.Interval = 66 Then ' Interval la mot so chia cho 5 du 1
Let Timer1.Enabled = False
Let Timer1.Interval = 1
' Cac truong hop hoa
If I_Ban.Picture = cmdBua.Picture And I_May.Picture = cmdBua.Picture Then MsgBox " Kết quả hoà ! ", vbOKOnly + vbInformation, "Hoà..."
If I_Ban.Picture = cmdKeo.Picture And I_May.Picture = cmdKeo.Picture Then MsgBox " Kết quả hoà ! ", vbOKOnly + vbInformation, "Hoà..."
If I_Ban.Picture = cmdGiay.Picture And I_May.Picture = cmdGiay.Picture Then MsgBox " Kết quả hoà ! ", vbOKOnly + vbInformation, "Hoà..."
' Cac truong hop thang, thua
If I_Ban.Picture = cmdKeo.Picture And I_May.Picture = cmdBua.Picture Then
MsgBox "Búa thắng kéo! Bạn thua! ", vbOKOnly + vbInformation, "Bạn thua!"
d2 = d2 + 1
End If
If I_Ban.Picture = cmdBua.Picture And I_May.Picture = cmdKeo.Picture Then
MsgBox "Búa thắng kéo! Bạn thắng! ", vbOKOnly + vbInformation, "Bạn thắng!"
d1 = d1 + 1
End If
If I_Ban.Picture = cmdBua.Picture And I_May.Picture = cmdGiay.Picture Then
MsgBox "Giấy thắng búa! Máy thắng! ", vbOKOnly + vbInformation, "Bạn thua!"
d2 = d2 + 1
End If
If I_Ban.Picture = cmdGiay.Picture And I_May.Picture = cmdBua.Picture Then
MsgBox "Giấy thắng búa! Bạn thắng! ", vbOKOnly + vbInformation, "Bạn thắng! "
d1 = d1 + 1
End If
If I_Ban.Picture = cmdGiay.Picture And I_May.Picture = cmdKeo.Picture Then
MsgBox "Kéo thắng giấy! Bạn thua! ", vbOKOnly + vbInformation, "Bạn thua!"
d2 = d2 + 1
End If
If I_Ban.Picture = cmdKeo.Picture And I_May.Picture = cmdGiay.Picture Then
MsgBox "Kéo thắng giấy! Bạn thắng! ", vbOKOnly + vbInformation, "Bạn thắng!"
d1 = d1 + 1
End If
End If
End Sub
- Sau khi kết thúc lần chơi, cần làm trắng điểm của người chơi và của máy tính.
Function LamTrang()
Diem1.Visible = False
Diem2.Visible = False
End Function
- Khi kết thúc trò chơi, làm trắng điểm:
Private Sub Form_Unload(Cancel As Integer)
LamTrang
End Sub
II. Trò chơi “ Tập tầm vông”:
Ý tưởng thuật toán:
- Chúng ta thấy trò chơi dân gian: Một vật nhỏ được bí mật bỏ vào một trong hai tay của một người, và người này sẽ quay vòng 2 tay, rồi chìa tay ra đố 1 người khác lựa chọn được tay nào có vật nhỏ nằm trong đó.
- Ở trò chơi này, máy tính sẽ đóng vai trò của người đố.
- Khi thực hiện đổi vật của các tay, thì vật sẽ được ẩn đi và lấy hai giá trị ngẫu nhiên cho vật tương ứng với vật ở tay phải hoặc tay trái.
- Ứng với mỗi giá trị sẽ tương ứng với từng trường hợp: lựa chọn là đúng hoặc sai.
Giao diện chương trình:
Sau khi thực hiện Đổi vật:
Người chơi nghĩ tay nào sẽ có vật trong đó thì sẽ nhấn vào tay đó, máy tính sẽ thông báo kết quả của lựa chọn đó.
Giao diện gồm có:
+ 2 Image là một mảng: Image(0), Image(1)
+ 2 bmButton: cmdVongVo, cmdThoat
+ 1 Shape: dùng để vẽ vật được dấu vào tay: Vat
+ 1 bmLabel: dùng để đưa ra các thông báo.
Code của chương trình:
- Biến lưu giá trị ngẫu nhiên cho vật:
Dim Bong As Integer
- Khi click vào nút cmdVongvo:
Private Sub cmdVongvo_Click()
Vat.Top = 720
Vat.Visible = True
For X = 1 To 20
Vat.Top = Vat.Top + 10
Next X
Vat.Visible = False
cmdVongvo.Enabled = False
For t = 1 To 10
For X = 1 To 20
Image1(0).Left = Image1(0).Left + 150
Image1(1).Left = Image1(1).Left - 150
Next X
For X = 1 To 20
Image1(0).Left = Image1(0).Left - 150
Image1(1).Left = Image1(1).Left + 150
Next X
Next t
Image1(0).Left = 120
Image1(1).Left = 2520
bong = Int(Rnd * 2) + 1 ' Lấy ngẫu nhiên giá trị cho biến bong la 1 hoặc 2
bmLabel1.Caption = " Hãy chọn tay mà bạn nghĩ rằng quả bóng nằm trong đó..."
End Sub
- Khi người chơi lựa chọn vào tay mà mình nghĩ se có vật nằm trong đó:
Private Sub image1_Click(Index As Integer)
If bong = 1 Then bmLabel1.Caption = "Chúc mừng ! Bạn đã chọn đúng! "
If bong = 2 Then bmLabel1.Caption = " Kém quá, bạn đã chọn sai!"
Vat.Top = 720
Vat.Visible = True 'Tra bong ve
cmdVongvo.Enabled = True
End Sub
CHƯƠNG III: CÁC TRÒ CHƠI ĐỐI KHÁNG
I. Trò chơi Caro:
I.1. Hai người chơi với nhau:
Ý tưởng giải thuật:
- Ở trò chơi này chỉ giới hạn chơi với 3´3 ô.
- Đặt tại mỗi vị trí 1 Image
- Người chơi thứ 1 sẽ đi quân X, chọn vị trí đặt quân, khi đến lượt quân X đi thì ảnh của Image chính là ảnh của quân X.
- Người chơi thứ 2 đi quân O, chỉ được đi vào vị trí chưa có quân nào ở đó.
- Các vị trí được đặt vào đó 2 Image tương ứng với các hình của X và của O chồng lên nhau, khi đến lượt người chơi X hay O click để đặt quân lên đó thì quân của mình sẽ hiện lên.
- Sau mỗi lần đi sẽ kiểm tra thắng. Nếu đã có 1 người chơi thắng thì ván chơi sẽ dừng lại, tăng số điểm của người chơi thắng lên, và xóa sạch các ô để bắt đầu một ván chơi mới.
Giao diện chương trình:
Giao diện gồm có:
- 9 Image được đặt tại các vị trí có quân: Image1, ... . Image9
- 9 Image ứng với các ảnh của X: X1,X2,... X9
- 9 Image ứng với các ảnh của O: O1, O2, ... O9
- 2 bmLabel hiển thị số lượt thắng của người chơi X và người chơi O: DiemX, DiemO
- 2 bmBotton: + Reset: xóa sạch các ô để chơi mới
+ Thoát: Thóat khỏi trò chơi.
- Timer1: Kiểm tra người chơi nào đã thắng sau mỗi lần người khác đi
- Timer2: Cập nhật đỉêm của người chơi
- Timer3: Điều khiển trỏ chuột cho mỗi người chơi.
Code chương trình:
- Các biến:
Dim ng1 As Boolean 'Biến người chơi 1
Dim ng2 As Boolean ' Biến người chơi 2
Dim Diem1 As Integer 'Điểm người chơi 1
Dim Diem2 As Integer 'Điểm người chơi 2
- Form Load: Làm ẩn các ảnh của X và O
Private Sub Form_Load()
ng1 = True ' Thiet dat nguoi 1 choi truoc
ng2 = False
X1.Visible = False
X2.Visible = False
X3.Visible = False
X4.Visible = False
X5.Visible = False
X6.Visible = False
X7.Visible = False
X8.Visible = False
X9.Visible = False
O1.Visible = False
O2.Visible = False
O3.Visible = False
O4.Visible = False
O5.Visible = False
O6.Visible = False
O7.Visible = False
O8.Visible = False
O9.Visible = False
End Sub
- Khi một vị trí (Image) được Click vào: nếu người chơi Click vị trí ô chơi thì quân của mình hiện lên: Ví dụ click vào Image1
Private Sub image1_Click()
' Kiểm tra nếu đến lượt người chơi 1 đi quân X và vị trí đó chưa có quân O thì
' hiển thị quân X lên
If ng1 = True And O1.Visible = False Then 'Nguoi choi truoc se di quan X
X1.Visible = True
ng2 = True
ng1 = False
Exit Sub
End If
' Đến lượt người chơi 2 đi và đi quân O
If ng2 = True And X1.Visible = False Then
O1.Visible = True
ng1 = True
ng2 = False
Exit Sub
End If
End Sub
- Thao tác Click vào 9 Image là tương tự nhau, chỉ khác tên của các ô này.
- Kiểm tra người chơi đã thắng hay chưa, nếu thắng thì tăng số điểm lên, đồng thời phải làm sạch các ô để chuẩn bị cho ván chơi mới. Kiểm tra thắng thì cần kiểm tra xem có 3 ô nào cùng X hoặc cùng O nằm trên cùng 1 hàng, 1 cột hoặc đường chéo không? Ví dụ, để kiểm tra quân X có cùng nằm trên 1 hàng trên cùng không?
Private Sub Timer1_Timer()
' Kiem tra xem Nguoi choi X da thang chua?
' Kiem tra xem X co o cac vi tri 1,2,3?
If X1.Visible = True And X2.Visible = True And X3.Visible = True Then
MsgBox "Người chơi X đã thắng!", vbOKOnly, " Kết thúc ván chơi !"
Timer1.Enabled = False
LamTrang
Diem1 = Diem1 + 1
Timer1.Enabled = True
End If
. . . . . . . .
Trong đó, hàm LamTrang sẽ làm cho các vị trí trống, không có quân cờ xuất hiện ở đó:
Function LamTrang()
'Ham lam cho tat ca cac o deu trang
O1.Visible = False
O2.Visible = False
O3.Visible = False
O4.Visible = False
O5.Visible = False
O6.Visible = False
O7.Visible = False
O8.Visible = False
O9.Visible = False
X1.Visible = False
X2.Visible = False
X3.Visible = False
X4.Visible = False
X5.Visible = False
X6.Visible = False
X7.Visible = False
X8.Visible = False
X9.Visible = False
End Function
- Timer 2 sẽ cập nhật số điểm của từng người chơi:
Private Sub Timer2_Timer()
'Cap nhat diem cua cac nguoi choi
DiemX.Caption = Diem1
DiemO.Caption = Diem2
End Sub
I.2. Chơi với máy:
Ý tưởng giải thuật:
- Là trò chơi đối kháng, nhưng đôi lúc chỉ có 1 người chơi, do đó máy tính sẽ đóng vai trò của người chơi còn lại.
- Kẻ 3´3 ô, trong các ô đó đặt một mảng các nhãn (Label).
- Dùng một biến để lưu lượt chơi có kiểu Boolean.
- Nếu ban đầu chọn quân của người chơi là X thì bước đi đầu tiên sẽ gán Label của ô được click vào là X. Sau khi người chơi đi, sẽ gọi hàm MayDi.
- Hàm MayDi: Kiểm tra xem người chơi đã có 2 quân nào nằm trên 1 hàng, 1 cột hoặc đường chéo chưa, nếu đã có thì bước đi của máy tính sẽ chặn trạng thái thắng của người chơi. Ngược lại, máy tính sẽ đi 1 bước đi ngẫu nhiên.
- Sau mỗi bước đi sẽ kiểm tra xem người chơi hay máy tính đã thắng hay chưa. Kiểm tra thắng theo nguyên tắc nếu có 3 quân cùng là X hoặc cùng là O nằm trên hàng ngang, cột dọc hoặc đường chéo là thắng. Nếu quân X hoặc quân O thắng thì sẽ tăng số điểm lên, sau đó sẽ gọi hàm ChoiLai: làm trắng các ô, gán biến LuotChoi=False.
Giao diện chương trình:
Giao diện gồm có:
- Mảng 9 Label: lblNhan(0), lblNhan(1),. . . , lblNhan(8)
- 2 bmOption: Dùng để xác định người chơi chọn quân X hay quân O: OptX, OptO.
- 2 bmLabel lưu điểm của người chơi và của máy tính: DiemX, DiemO.
- bmBotton: cmdChoi: xây dựng 1 trò chơi mới, tức làm cho các o trống.
- bmBotton: cmdThoat: thoát khỏi trò chơi.
- Timer1: Điều khiển điểm của người chơi.
- Timer2: Điều khiển kiểu trỏ chuột của người chơi.
Code chương trình:
- Các biến của chương trình:
Option Explicit
Private LuotChoi As Boolean
Dim d1 As Integer ' Lưu điểm của người chơi 1
Dim d2 As Integer ' Lưu điểm của người chơi 2
- Form_Load
Private Sub Form_Load()
Randomize Timer ' Lấy thời gian như một đại lượng ngẫu nhiên
Call ChoiLai ' Làm trống các ô cho trò chơi mới
End Sub
- Hàm ChoiLai:
Sub ChoiLai()
Dim i As Byte
LuotChoi = False
cmdChoi.Caption = "Chơi"
optX.Enabled = True
optO.Enabled = True
For i = 0 To 8
lblNhan(i).ForeColor = &HC0FFC0
lblNhan(i) = Str(i) 'Tra ve 1 thay doi xau bieu dien cua mot so
Next
End Sub
- Khi người chơi chọn bước đi của mình:
Private Sub lblNhan_Click(Index As Integer)
If Not LuotChoi Then Exit Sub
If optX.Value = False And lblNhan(Index).Caption "X" And lblNhan(Index).Caption "O" Then
lblNhan(Index).Caption = "O"
lblNhan(Index).ForeColor = vbRed
Call MayTinhDi
ElseIf optO.Value = False And lblNhan(Index).Caption "X" And lblNhan(Index).Caption "O" Then
lblNhan(Index).Caption = "X"
lblNhan(Index).ForeColor = vbRed
Call MayTinhDi
End If
End Sub
- Thủ tục MayTinhDi:
Sub MayTinhDi()
Dim MTinh As Byte
Dim Index As Byte
If KTThang = True Then Exit Sub
MTinh = 255
If lblNhan(0).Caption = lblNhan(3).Caption And lblNhan(3).Caption lblNhan(6).Caption And lblNhan(6).Caption "X" And lblNhan(6).Caption "O" Then
MTinh = 6
GoTo DiChuyen
ElseIf lblNhan(3).Caption = lblNhan(6).Caption And lblNhan(3).Caption lblNhan(0).Caption And lblNhan(0).Caption "X" And lblNhan(0).Caption "O" Then
MTinh = 0
GoTo DiChuyen
ElseIf lblNhan(1).Caption = lblNhan(4).Caption And lblNhan(4).Caption lblNhan(7).Caption And lblNhan(7).Caption "X" And lblNhan(7).Caption "O" Then
MTinh = 7
GoTo DiChuyen
ElseIf lblNhan(4).Caption = lblNhan(7).Caption And lblNhan(4).Caption lblNhan(1).Caption And lblNhan(1).Caption "X" And lblNhan(1).Caption "O" Then
MTinh = 1
GoTo DiChuyen
ElseIf lblNhan(2).Caption = lblNhan(5).Caption And lblNhan(5).Caption lblNhan(8).Caption And lblNhan(8).Caption "X" And lblNhan(8).Caption "O" Then
MTinh = 8
GoTo DiChuyen
ElseIf lblNhan(5).Caption = lblNhan(8).Caption And lblNhan(5).Caption lblNhan(2).Caption And lblNhan(2).Caption "X" And lblNhan(2).Caption "O" Then
MTinh = 2
GoTo DiChuyen
ElseIf lblNhan(0).Caption = lblNhan(1).Caption And lblNhan(1).Caption lblNhan(2).Caption And lblNhan(2).Caption "X" And lblNhan(2).Caption "O" Then
MTinh = 2
GoTo DiChuyen
ElseIf lblNhan(1).Caption = lblNhan(2).Caption And lblNhan(1).Caption lblNhan(0).Caption And lblNhan(0).Caption "X" And lblNhan(0).Caption "O" Then
MTinh = 0
GoTo DiChuyen
ElseIf lblNhan(3).Caption = lblNhan(4).Caption And lblNhan(4).Caption lblNhan(5).Caption And lblNhan(5).Caption "X" And lblNhan(5).Caption "O" Then
MTinh = 5
GoTo DiChuyen
ElseIf lblNhan(4).Caption = lblNhan(5).Caption And lblNhan(4).Caption lblNhan(3).Caption And lblNhan(3).Caption "X" And lblNhan(3).Caption "O" Then
MTinh = 3
GoTo DiChuyen
ElseIf lblNhan(6).Caption = lblNhan(7).Caption And lblNhan(7).Caption lblNhan(8).Caption And lblNhan(8).Caption "X" And lblNhan(8).Caption "O" Then
MTinh = 8
GoTo DiChuyen
ElseIf lblNhan(7).Caption = lblNhan(8).Caption And lblNhan(7).Caption lblNhan(6).Caption And lblNhan(6).Caption "X" And lblNhan(6).Caption "O" Then
MTinh = 6
GoTo DiChuyen
ElseIf lblNhan(0).Caption = lblNhan(4).Caption And lblNhan(4).Caption lblNhan(8).Caption And lblNhan(8).Caption "X" And lblNhan(8).Caption "O" Then
MTinh = 8
GoTo DiChuyen
ElseIf lblNhan(4).Caption = lblNhan(8).Caption And lblNhan(4).Caption lblNhan(0).Caption And lblNhan(0).Caption "X" And lblNhan(0).Caption "O" Then
MTinh = 0
GoTo DiChuyen
ElseIf lblNhan(6).Caption = lblNhan(4).Caption And lblNhan(4).Caption lblNhan(2).Caption And lblNhan(2).Caption "X" And lblNhan(2).Caption "O" Then
MTinh = 2
GoTo DiChuyen
ElseIf lblNhan(2).Caption = lblNhan(4).Caption And lblNhan(4).Caption lblNhan(6).Caption And lblNhan(6).Caption "X" And lblNhan(6).Caption "O" Then
MTinh = 6
GoTo DiChuyen
End If
DiChuyen:
If MTinh = 255 Then
For Index = 0 To 9
MTinh = Round(Rnd * 8, 0)
If lblNhan(MTinh).Caption "X" And lblNhan(MTinh).Caption "O" Then Exit For
If Index = 9 Then
MsgBox "Ván chơi này đã hoà!", vbInformation, ".::Hoà::."
Exit Sub
End If
Next
End If
If optX.Value = True Then
lblNhan(MTinh).Caption = "O"
ElseIf optO.Value = True Then
lblNhan(MTinh).Caption = "X"
End If
lblNhan(MTinh).ForeColor = vbRed
Call KTThang
End Sub
- Hàm kiểm tra người chơi hay máy tính đã thắng chưa:
Function KTThang() As Boolean
Dim NguoiThang As String * 1
If lblNhan(0).Caption = lblNhan(3).Caption And lblNhan(3).Caption = lblNhan(6).Caption Then NguoiThang = lblNhan(0).Caption
If lblNhan(1).Caption = lblNhan(4).Caption And lblNhan(4).Caption = lblNhan(7).Caption Then NguoiThang = lblNhan(1).Caption
If lblNhan(2).Caption = lblNhan(5).Caption And lblNhan(5).Caption = lblNhan(8).Caption Then NguoiThang = lblNhan(2).Caption
If lblNhan(0).Caption = lblNhan(1).Caption And lblNhan(1).Caption = lblNhan(2).Caption Then NguoiThang = lblNhan(0).Caption
If lblNhan(3).Caption = lblNhan(4).Caption And lblNhan(4).Caption = lblNhan(5).Caption Then NguoiThang = lblNhan(3).Caption
If lblNhan(6).Caption = lblNhan(7).Caption And lblNhan(7).Caption = lblNhan(8).Caption Then NguoiThang = lblNhan(6).Caption
If lblNhan(0).Caption = lblNhan(4).Caption And lblNhan(4).Caption = lblNhan(8).Caption Then NguoiThang = lblNhan(0).Caption
If lblNhan(2).Caption = lblNhan(4).Caption And lblNhan(4).Caption = lblNhan(6).Caption Then NguoiThang = lblNhan(2).Caption
If NguoiThang = "X" Then
MsgBox "X đã chiến thắng!!!", vbInformation, "Người thắng..."
d1 = d1 + 1
Call ChoiLai: KTThang = True
ElseIf NguoiThang = "O" Then
MsgBox "O đã chiến thắng!!!", vbInformation, "Người thắng..."
d2 = d2 + 1
Call ChoiLai: KTThang = True
End If
End Function
II. Trò chơi gieo Xúc xắc:
Ý 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.
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
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 ShellEx
Các file đính kèm theo tài liệu này:
- Áp dụng lý thuyết Game xây dựng một số trò chơi.doc