Đồ án môn học Lập trình C# cơ bản: Lập trình trò chơi Caro

MỤC LỤC

CƠ SỞ LÝ THUYẾT

  • Công cụ hỗ trợ 1. Ngôn ngữ lập trình C#

    Trong trò chơi cờ caro này, người chơi sẽ chọn vị trí A muốn đặt quân cờ bằng click chuột, sau đó hệ thống sẽ kiểm tra vị trí đã chọn có hợp lệ hay không (tức là vị trí đó còn trống). Sau khi đã hoàn thành phần chọn vị trí, hệ thống sẽ cập nhật bàn cờ bằng cách đặt quân cờ của người chơi vào vị trí đã chọn trên bàn cờ. Khi trò chơi tiếp tục, hệ thống sẽ kiểm tra người thắng bằng cách kiểm tra xem sau nước đi vừa rồi, người chơi hiện tại có thắng hay không (kiểm tra 4 hướng : ngang, dọc, chéo chính, chéo ngược).

    Người chơi cờ xanh đi trước, sau đó đến người chơi cờ đỏ.Mỗi lượt đi, người chơi sẽ đánh dấu cờ xanh hoặc cờ đỏ vào một ô trống trên bàn cờ.Người chiến thắng là người đầu tiên có một dãy 5 ô liên tục có các ký hiệu của mình theo hàng ngang, hàng dọc hoặc đường chéo.Trò chơi kết thúc khi một trong hai người chơi thắng hoặc không còn ô trống nào để đi (hòa).  Nó duyệt các ô cờ từ vị trí hiện tại (currDong, currCot) về phía dưới và về phía trên để đếm số quân ta và số quân địch.  Nó duyệt các ô cờ từ vị trí hiện tại (currDong, currCot) về phía trước và về phía sau để đếm số quân ta và số quân địch.

     Nó duyệt các ô cờ từ vị trí hiện tại (currDong, currCot) về phía trên bên trái và về phía dưới bên phải để đếm số quân ta và số quân địch.  Nó duyệt các ô cờ từ vị trí hiện tại (currDong, currCot) về phía trên bên phải và về phía dưới bên trái để đếm số quân ta và số quân địch. Nếu stack không rỗng, nó sẽ gọi phương thức TimKiemNuocDi() để tìm nước đi tốt nhất và sau đó đặt quân cờ vào vị trí được tính toán.

    Sử dụng một biến _KetThuc để lưu trạng thái kết thúc trò chơi, có thể là hòa, người chơi 1 thắng, người chơi 2 thắng, người chơi thắng, hoặc máy tính thắng. Kể từ đó ngôn ngữ này ngày càng phổ biến hơn, và có thể cho rằng nó trở thành ngôn ngữ của sự lựa chọn của Windows và nhà phát triển web sử dụng NET Framework. C# có thể được sử dụng để phát triển nhiều loại ứng dụng khác nhau như ứng dụng desktop, web, ứng dụng di động và game.

    Thứ nhất, việc ngụn ngữ C# cú cỳ phỏp rừ rảng, đơn giản, dễ hiểu sẽ giỳp cho việc lập trình dễ nắm bắt và triển khai dự án.Thứ hai, C# cùng với sự hỗ trợ của Visual Studio giúp cho việc phát triển, gỡ lỗi cũng như triển khai trò chơi trở nên đơn giản và hiệu quả.Cuối cùng, .NET framework kết hợp với C# cung cấp hiệu suất tối đa và độ ổn định cao đảm bảo cho trò chơi có thể hoạt động mượt mà. Window Form là một phần của .NET Framework, cung cấp một nền tảng mạnh mẽ để phát triển các ứng dụng desktop với giao diện đồ họa người dùng (UI) trong môi trường Windows.Sử dụng Window Form người lập trình có thể dễ dàng thiết kế và quản lý giao diện của ứng dụng, từ đó giúp tập trung vào logic xử lý và chức năng của các phần mềm.Window Form cũng là 1 thư viện các điều khiển (nút bấm, thanh công cụ, menu,.) mà người dùng có thể sử dụng. Đây chính là những gì cần trong đồ án lần này, nhờ những tính năng của Window From mà việc phát triển trò chơi cờ caro trở nên thuận lợi và nhanh chóng hơn.

    Trong đồ án game cờ caro bằng C#, Window Form được chúng em sử dụng để thiết kế giao diện bàn cờ , các ô cờ trong trò chơi được tạo bằng panel, ngoài ra còn các button cho phép người chơi tương tác bằng cách click chuột. Ta còn sử dụng label, textbox để hiển thị các thông tin như điểm số, thời gian, luật chơi ,.Window Form hỗ trợ về việc xử lý logic của trò chơi bao gồm việc kiểm tra chiến thắng, quản lý lượt chơi và thông báo kết quả.

    PHÂN TÍCH THUẬT TOÁN

    Giao diện khởi tạo 1. Vẽ bàn cờ

    • Đánh cờ

       Các đối tượng OCo được lưu vào mảng _MangOCo tại vị trí tương ứng với dòng và cột của từng ô cờ.  Kiểm tra xem vị trí click của chuột có hợp lệ không (không trùng với đường ô cờ).  Dựa trợn lượt đi hiện tại, gán sở hữu ô cờ cho người chơi tương ứng và vẽ quân cờ lên bàn cờ.

      Kiểm tra nếu SoQuanTa bằng 2 thì trả về 0, vì đây là trường hợp bị chặn. Kiểm tra nếu SoQuanTa bằng 2 thì trả về 0, vì đây là trường hợp bị chặn. Kiểm tra nếu SoQuanTa bằng 2 thì trả về 0, vì đây là trường hợp bị chặn.

      Kiểm tra nếu SoQuanTa bằng 2 thì trả về 0, vì đây là trường hợp bị chặn.

      3.1.2.1. Sơ đồ thuật toán
      3.1.2.1. Sơ đồ thuật toán

      Kiểm tra chiến thắng - Duyệt các phương thẳng hàng

       Nó sử dụng các phương thức khác để tính toán điểm tấn công và phòng ngự cho mỗi ô trên bàn cờ, sau đó so sánh và tìm ra ô có điểm số cao nhất.  Nếu ô bên trái hoặc bên phải dãy 5 ô không có chủ sở hữu, thì trả về true.  Kiểm tra xem nếu currDong hoặc currCot vượt quá _BanCo.SoCot - 5 thì trả về false.

       Nếu currDong là 0 hoặc currDong + Dem bằng _BanCo.SoDong, hoặc currCot là 0 hoặc currCot + Dem bằng _BanCo.SoCot, thì trả về true.  Nếu ô trên trái hoặc dưới phải dãy 5 ô không có chủ sở hữu, thì trả về true.  Đầu tiên, hàm kiểm tra xem nếu currDong nhỏ hơn 4 hoặc currCot lớn hơn _BanCo.SoCot - 5, thì trả về false.

       Nếu currDong bằng 4 hoặc currDong bằng _BanCo.SoDong - 1, hoặc currCot bằng 0 hoặc currCot + Dem bằng _BanCo.SoCot, thì trả về true.  Nếu ô trên phải hoặc dưới trái dãy 5 ô không có chủ sở hữu, thì trả về true. DuyetCheoXuoi(oco.Dong, oco.Cot, oco.Sohuu) or DuyetCheoNguoc(oco.Dong, oco.Cot, oco.Sohuu):. _KetThuc = KETTHUC.Player return true.  Đầu tiên, hàm kiểm tra xem số lượng nước đã đi có bằng với số ô trên bàn cờ hay không. Nếu có, thì trò chơi kết thúc với kết quả hòa và _KetThuc được gán giá trị KETTHUC.HoaCO. ngang, chéo xuôi, chéo ngược) hay không.

      Nếu có, thì _KetThuc được gán giá trị KETTHUC.Player1 hoặc KETTHUC.Player2 tùy theo chủ sở hữu của ô đó.  Nếu chế độ chơi là 2 (người vs máy), hàm cũng lặp qua tất cả các nước đã đi và kiểm tra xem có ô nào thỏa mãn một trong 4 hàm kiểm tra hay không. Nếu có, thì _KetThuc được gán giá trị KETTHUC.COM hoặc KETTHUC.Player tùy theo chủ sở hữu của ô đó.

       Hàm bắt đầu bằng một câu lệnh switch để kiểm tra giá trị của biến _KetThuc.  Tùy theo giá trị của _KetThuc, hàm sẽ hiển thị một thông báo tương ứng với kết quả của trò chơi.  Cuối cùng, biến _SanSang được gán giá trị false để chỉ ra rằng trò chơi đã kết thúc.