Luận văn Áp dụng lý thuyết Game xây dựng một số trò chơi

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.

doc55 trang | Chia sẻ: vietpd | Lượt xem: 1409 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Á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).Capt