Bối cảnh và vấn đề nghiên cứu
Lập trình trò chơi (Game Development) là một lĩnh vực ứng dụng quan trọng của ngành Công nghệ thông tin, kết hợp giữa tư duy thuật toán, kỹ thuật xử lý đồ họa giao diện và mô hình hóa luật chơi thực tế. Việc chuyển đổi các trò chơi trí tuệ truyền thống như Cờ vây, Cờ vua, Cờ tướng và Cờ Caro lên nền tảng máy tính đòi hỏi người lập trình phải nắm vững cấu trúc dữ liệu, các phương thức quản lý sự kiện và giải thuật tương tác người - máy. Đồ án "Xây dựng trò chơi Cờ Caro cơ bản" do nhóm sinh viên Trần Hải Triều và Huỳnh Hoàng Trâm thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thanh Trường tại Khoa Công nghệ Thông tin – Trường Đại học Tài chính – Marketing (tháng 06/2024), nhằm hiện thực hóa các kiến thức nền tảng của học phần Lập trình C#.NET cơ bản thành một ứng dụng hoàn chỉnh trên hệ điều hành Windows.
Mục tiêu và nhiệm vụ nghiên cứu của đề tài được xác định cụ thể trong văn bản:
- Mục tiêu nghiên cứu:
- Hệ thống hóa các kiến thức cơ sở về ngôn ngữ C# và nền tảng .NET để làm nền tảng cho việc phát triển phần mềm ứng dụng.
- Khai thác và xây dựng đầy đủ các chức năng nghiệp vụ cần thiết cho trò chơi Cờ Caro.
- Nội dung và nhiệm vụ nghiên cứu:
- Tìm hiểu và vận dụng cú pháp, các đặc tính lập trình hướng đối tượng của ngôn ngữ C#.
- Thiết kế giao diện đồ họa người dùng (GUI) trực quan trên môi trường Microsoft Visual Studio 2022.
- Xây dựng thuật toán và lập trình các chức năng cốt lõi: khởi tạo bàn cờ ma trận, quản lý lượt đi, đặt quân cờ, kiểm tra trạng thái thắng/thua/hòa, và xử lý thuật toán đánh cờ tự động cho máy tính.
- Tiến hành kiểm thử đơn vị và kiểm thử chức năng để tối ưu hóa tính ổn định của trò chơi.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Trò chơi Cờ Caro (Gomoku) và các phương pháp mô hình hóa, thiết kế thuật toán trò chơi bàn cờ điện tử trên nền tảng desktop.
- Phạm vi chức năng: Xây dựng ứng dụng chạy trên hệ điều hành Windows với hai chế độ chơi: Đấu giữa hai người chơi (Player vs Player) và Đấu với máy tính (Player vs Com). Đồ án tập trung vào logic cục bộ, không phát triển tính năng đấu trực tuyến qua mạng (Online/LAN) và không tích hợp hệ quản trị cơ sở dữ liệu để lưu trữ lịch sử ván đấu.
- Phạm vi không gian và thời gian: Nghiên cứu và thực nghiệm tại Trường Đại học Tài chính – Marketing, TP. Hồ Chí Minh, hoàn thành vào tháng 06/2024.
Cơ sở lý thuyết và phương pháp
Đồ án được xây dựng dựa trên nền tảng lý thuyết lập trình hướng đối tượng và các công nghệ phát triển ứng dụng desktop của hệ sinh thái Microsoft .NET:
| Thành phần lý thuyết / Công nghệ |
Vai trò và đặc tính kỹ thuật trong đề tài |
| Trò chơi Cờ Caro (Gomoku / Omok) |
Trò chơi dân gian đối kháng hai người. Luật chơi áp dụng trong đề tài quy định người thắng là người đầu tiên tạo được chuỗi liên tục gồm 5 quân cờ cùng loại theo hàng ngang, hàng dọc hoặc đường chéo mà không bị chặn hai đầu. |
| Ngôn ngữ lập trình C# |
Ngôn ngữ hướng đối tượng an toàn kiểu (type-safe), cú pháp xuất phát từ C/C++, vận hành trên môi trường .NET Common Language Runtime (CLR), hỗ trợ cơ chế thu gom rác tự động (Garbage Collection) và kiểm tra kiểu dữ liệu nghiêm ngặt. |
| Windows Forms (.NET Framework) |
Thư viện xây dựng giao diện đồ họa người dùng (UI) trên Windows. Cung cấp các điều khiển chuẩn (Panel, Button, Label, Menu) và cơ chế quản lý sự kiện chuột (MouseClick), đồ họa GDI+ (Graphics, Point, SolidBrush). |
Cấu trúc dữ liệu Stack<T> |
Sử dụng cấu trúc dữ liệu ngăn xếp để lưu vết tuần tự các nước cờ đã đánh, phục vụ trực tiếp cho thuật toán vẽ lại bàn cờ, chức năng hoàn tác (Undo) và làm lại nước đi (Redo). |
| Giải thuật Heuristic đánh giá điểm |
Thuật toán đánh giá trạng thái bàn cờ dựa trên việc quét 4 hướng (dọc, ngang, chéo xuôi, chéo ngược) để tính tổng điểm tấn công và điểm phòng ngự cho từng ô trống, làm cơ sở ra quyết định cho máy tính. |
Phương pháp nghiên cứu:
- Phương pháp phân tích tài liệu: Thu thập, tổng hợp các tài liệu kỹ thuật về C#.NET, cơ chế đồ họa Windows Forms và phân tích quy tắc trò chơi Gomoku tiêu chuẩn.
- Phương pháp phân tích - thiết kế hệ thống: Thiết kế kiến trúc phần mềm theo mô hình hướng đối tượng, phân rã chức năng thành các lớp nghiệp vụ độc lập (
CaroChess, BanCo, OCo, Form1, Program).
- Phương pháp thực nghiệm phần mềm: Cài đặt mã nguồn trên môi trường Visual Studio 2022, xây dựng các hàm thuật toán tính điểm và kiểm tra điều kiện kết thúc.
- Phương pháp kiểm thử: Thực hiện kiểm thử đơn vị (Unit Testing) trên từng hàm xử lý và kiểm thử tổng thể chức năng ứng dụng nhằm phát hiện, sửa lỗi logic.
Thiết kế và triển khai
1. Kiến trúc tổng thể và cấu trúc các lớp (Class)
Hệ thống được thiết kế theo mô hình hướng đối tượng với 5 lớp chính:
OCo: Đại diện cho một ô cờ trên ma trận. Chứa các thuộc tính: chỉ số dòng (Dong), chỉ số cột (Cot), tọa độ hiển thị (Point ViTri), trạng thái sở hữu (Sohuu: 0 - ô trống, 1 - người chơi 1/xanh, 2 - người chơi 2/máy/đỏ), cùng các hằng số kích thước chiều rộng (_ChieuRong = 20) và chiều cao (_ChieuCao = 20).
BanCo: Quản lý cấu trúc bàn cờ. Chứa các biến quy định kích thước ma trận (số dòng _SoDong = 20, số cột _SoCot = 20) và phương thức vẽ lưới bàn cờ.
CaroChess: Lớp xử lý nghiệp vụ trung tâm. Chứa mảng hai chiều _MangOCo[20, 20], hai ngăn xếp stk_CacNuocDaDi và stk_CacNuocUndo, các biến quản lý trạng thái (_LuotDi, _CheDoChoi, _SanSang, _KetThuc), cùng toàn bộ thuật toán tính điểm AI và kiểm tra thắng/thua.
Form1: Lớp giao diện người dùng chính. Tiếp nhận tương tác chuột trên Panel, chuyển đổi tọa độ màn hình sang chỉ số ô cờ, liên kết các nút chức năng (New Game, PlayerVsPlayer, PlayerVsCom, Exit, Undo, Redo).
Program: Chứa phương thức Main() đóng vai trò điểm khởi nhập (entry point) để khởi chạy ứng dụng.
2. Thiết kế giao diện người dùng
Giao diện được bố trí tường minh gồm 4 khu vực:
- Khung bàn cờ: Sử dụng điều khiển
Panel để hiển thị lưới 20x20 ô vuông, bắt sự kiện click chuột để đặt quân cờ.
- Thanh điều hướng Menu (Menu File): Cung cấp các tùy chọn khởi tạo ván mới (
New -> PlayerVsPlayer, PlayerVsCom) và thoát ứng dụng (Exit).
- Khu vực điều khiển nhanh: Các
Button chức năng cho phép chuyển đổi chế độ chơi trực tiếp và nút Thoát.
- Khu vực thông tin: Các
Label hiển thị luật chơi, điểm số, lượt đi hiện tại và thông báo trạng thái trận đấu.
Nội dung chính theo từng chương
CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI
Chương 1 thiết lập cơ sở khoa học và định hướng nghiên cứu của đề tài. Tác giả phân tích sự phát triển của công nghệ thông tin trong lĩnh vực lập trình game, nhấn mạnh vai trò của việc số hóa các trò chơi trí tuệ nhằm rèn luyện tư duy logic, kỹ năng giải quyết vấn đề và làm việc nhóm.
Văn bản giới thiệu chi tiết nguồn gốc lịch sử của cờ Caro (tên tiếng Nhật: Gomoku Narabe, tiếng Triều Tiên: Omok), phân tích sự khác biệt giữa phiên bản chơi trên bàn cờ vây 19x19 truyền thống và phiên bản viết trên giấy tập học sinh tại Việt Nam. Trên cơ sở đó, chương xác định mục tiêu nghiên cứu, phạm vi chức năng (tập trung vào chế độ 1 người đấu với máy và 2 người đấu với nhau trên lưới 20x20), phương pháp thực hiện và các kết quả dự kiến đạt được của đồ án.
CHƯƠNG 2. MÔ TẢ BÀI TOÁN VÀ CÔNG CỤ HỖ TRỢ
Chương 2 mô tả chi tiết yêu cầu kỹ thuật và cơ sở công nghệ của hệ thống:
- Yêu cầu bài toán: Xây dựng bàn cờ ma trận kích thước 20x20 ô vuông. Hỗ trợ hai quân cờ X và O (phân biệt bằng màu xanh dương và màu đỏ). Hiện thực hóa các chức năng:
Undo (hoàn tác nước đi), Redo (phục hồi nước đi), PlayerVsPlayer, PlayerVsCom, và Thoát.
- Quy trình thuật toán: Vòng lặp trò chơi bắt đầu bằng việc chọn chế độ chơi và khởi tạo bàn cờ. Khi người chơi click chuột, hệ thống kiểm tra tính hợp lệ của ô cờ (ô phải còn trống). Nếu hợp lệ, hệ thống cập nhật ma trận, vẽ quân cờ, đẩy nước đi vào Stack, kiểm tra điều kiện thắng theo 4 hướng. Nếu chưa có người thắng, kiểm tra trạng thái đầy bàn cờ (hòa) hoặc chuyển lượt cho đối thủ.
- Khái niệm và quy tắc: Định nghĩa chính xác cấu trúc bàn cờ (Board), ô cờ (Cell), người chơi (Player) và luật thắng 5 ô liên tiếp không bị chặn.
- Công cụ phát triển: Phân tích các ưu điểm kỹ thuật của ngôn ngữ C# (tính an toàn kiểu, quản lý bộ nhớ tự động qua CLR) và Windows Forms trong việc quản lý sự kiện tương tác và hỗ trợ gỡ lỗi trực quan với Visual Studio 2022.
CHƯƠNG 3. PHÂN TÍCH THUẬT TOÁN
Chương 3 là phần trọng tâm kỹ thuật, trình bày mã giả (pseudocode) và giải thích chi tiết cơ chế hoạt động của toàn bộ các hàm thuật toán:
+-----------------------------------------------------------------------------------+
| CÁC NHÓM THUẬT TOÁN CHÍNH |
+-----------------------------------------------------------------------------------+
| 1. Khởi tạo & Đồ họa: |
| - VeBanCo(): Vẽ các đường dọc/ngang cách đều 20px trên Graphics. |
| - KhoiTaoMangOCo(): Tạo ma trận đối tượng OCo[20,20] với Sohuu = 0. |
| - VeQuanCo(): Vẽ Ellipse màu xanh/đỏ (thu nhỏ 4px so với viền ô). |
| - Danhco(): Xác định Cot = MouseX/20, Dong = MouseY/20, đổi lượt, lưu Stack. |
+-----------------------------------------------------------------------------------+
| 2. Trí tuệ nhân tạo (Player vs Com): |
| - Duyệt điểm tấn công 4 hướng: Doc, Ngang, CheoXuoi, CheoNguoc. |
| - Duyệt điểm phòng ngự 4 hướng: Doc, Ngang, CheoXuoi, CheoNguoc. |
| - TimKiemNuocDi(): Duyệt toàn bộ ô trống, tính DiemTam = max(TC, PN), |
| chọn ô có DiemMax lớn nhất trên toàn bàn cờ. |
| - KhoiDongComputer(): Đánh vào tâm nếu bàn cờ trống, hoặc theo TimKiemNuocDi. |
+-----------------------------------------------------------------------------------+
| 3. Kiểm tra kết thúc: |
| - DuyetDoc(), DuyetNgang(), DuyetCheoXuoi(), DuyetCheoNguoc(): |
| Kiểm tra chuỗi 5 ô liên tiếp cùng Sohuu và không bị chặn 2 đầu. |
| - Kiểm tra hòa: Số phần tử trong Stack bằng 400 ô. |
+-----------------------------------------------------------------------------------+
Chi tiết thuật toán đánh giá Heuristic của máy tính:
- Duyệt điểm tấn công: Tại một ô trống, hàm quét trong phạm vi 5 ô theo hướng tương ứng. Đếm số quân ta (
SoQuanTa) và quân địch (SoQuanDich). Nếu bị chặn bởi 2 quân địch thì trả về 0 điểm. Ngược lại, điểm số được tính bằng MangDiemTanCong[SoQuanTa] - MangDiemPhongNgu[SoQuanDich + 1] * 2.
- Duyệt điểm phòng ngự: Quét 5 ô liên tiếp. Nếu có 2 quân ta chặn thì không tính điểm (trả về 0). Ngược lại, cộng dồn giá trị tương ứng từ
MangDiemPhongNgu[SoQuanDich].
- Tìm nước đi tối ưu (
TimKiemNuocDi): Lặp qua toàn bộ ma trận $20 \times 20$, tại mỗi ô trống ($Sohuu = 0$), tính tổng điểm tấn công 4 hướng (DiemTanCong) và tổng điểm phòng ngự 4 hướng (DiemPhongNgu). Gán DiemTam = max(DiemTanCong, DiemPhongNgu). Ô cờ có DiemTam lớn nhất toàn cục (DiemMax) sẽ được chọn để máy tính đặt quân.
CHƯƠNG 4. HIỆN THỰC CHƯƠNG TRÌNH
Chương 4 tổng kết quá trình chuyển hóa mã giả thành mã nguồn C# thực thi trên Visual Studio 2022, tích hợp các lớp đối tượng vào hệ thống và hoàn thiện giao diện đồ họa cho người dùng.
Kết quả và đóng góp
1. Kết quả kỹ thuật đạt được
Đồ án đã hiện thực hóa thành công phần mềm trò chơi Cờ Caro hoàn chỉnh với các thông số kỹ thuật và tính năng cụ thể:
| Thông số / Chức năng |
Chi tiết hiện thực trong đồ án |
| Kích thước bàn cờ |
Lưới ma trận $20 \times 20$ ô vuông; kích thước mỗi ô cờ $20 \times 20$ pixel. |
| Chế độ chơi |
- Chế độ 1: Hai người chơi đối kháng (PlayerVsPlayer). - Chế độ 2: Người chơi đấu với máy tính (PlayerVsCom). |
| Xử lý đồ họa |
Vẽ trực tiếp bằng GDI+ thông qua đối tượng Graphics; quân cờ vẽ bằng FillEllipse với hai màu nhận diện riêng biệt: Xanh dương (sbBlue) và Đỏ (sbRed). |
| Cơ chế nước đi |
Quản lý lịch sử bằng Stack<OCo>, cho phép hoàn tác (Undo) và làm lại (Redo) chính xác từng lượt. |
| Trí tuệ nhân tạo (AI) |
Tự động hóa nước đi của máy tính thông qua thuật toán vét cạn ma trận kết hợp ma trận trọng số điểm tấn công - phòng ngự theo 4 hướng. |
| Xử lý luật chơi |
Tự động phát hiện điều kiện thắng khi có chuỗi 5 ô thẳng hàng không bị chặn; tự động xác định trạng thái hòa cờ khi số nước đi đạt 400. |
2. Đóng góp của đề tài
- Về mặt học thuật và đào tạo: Hệ thống hóa và chứng minh tính ứng dụng của các khái niệm lập trình hướng đối tượng trong C# (đóng gói lớp, quản lý thuộc tính, phương thức) vào bài toán phát triển phần mềm giải trí.
- Về mặt kỹ thuật lập trình: Đưa ra giải pháp kết hợp giữa cấu trúc dữ liệu ma trận 2 chiều (
Array) để quản lý tọa độ/trạng thái và ngăn xếp (Stack) để quản lý lịch sử ván đấu. Xây dựng giải thuật Heuristic đơn giản, trực quan, phù hợp cho sinh viên nghiên cứu nhập môn trí tuệ nhân tạo trong game đối kháng.
Hạn chế và hướng nghiên cứu tiếp
Căn cứ theo nội dung phạm vi nghiên cứu được tác giả công bố trong văn bản, đồ án tồn tại một số hạn chế và định hướng phát triển như sau:
Hạn chế:
- Trò chơi chỉ vận hành cục bộ trên một máy tính đơn lẻ, chưa hỗ trợ chế độ thi đấu qua mạng LAN hoặc Internet (TCP/IP Socket).
- Chưa tích hợp cơ chế lưu trữ dữ liệu (Database hoặc File) để ghi nhận thông tin tài khoản người chơi, bảng xếp hạng và lịch sử các ván đấu.
- Thuật toán AI cho máy tính mới dừng lại ở mức Heuristic đánh giá cục bộ 1 nước đi (Greedy search trên bảng điểm), chưa triển khai các thuật toán duyệt cây trò chơi sâu (như Minimax kết hợp cắt tỉa Alpha-Beta) và chưa có tính năng lựa chọn các cấp độ khó khác nhau (Dễ, Trung bình, Khó).
Hướng nghiên cứu tiếp:
- Xây dựng mô hình Client - Server sử dụng giao thức mạng để hỗ trợ tính năng đấu trực tuyến giữa các người chơi từ xa.
- Tích hợp hệ thống lưu trữ dữ liệu (SQL Server hoặc SQLite) để theo dõi thành tích, điểm số và xem lại ván đấu (Replay).
- Cải tiến thuật toán AI bằng cách áp dụng giải thuật Minimax / Alpha-Beta Pruning nhiều tầng nhằm nâng cao độ thông minh và khả năng tính toán chiến thuật của máy tính.
Giá trị tham khảo
Tài liệu đồ án là nguồn tư liệu tham khảo hữu ích cho:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm: Đặc biệt là sinh viên đang học các học phần Lập trình C#.NET cơ bản, Lập trình ứng dụng Windows Forms, hoặc Phát triển game 2D cơ bản.
- Nội dung tham khảo trọng tâm:
- Cách tổ chức cấu trúc lớp hướng đối tượng để mô hình hóa trò chơi bàn cờ ma trận (
CaroChess, BanCo, OCo).
- Kỹ thuật vẽ đồ họa tùy biến bằng GDI+ (
Graphics, SolidBrush, Point) trên Panel của Windows Forms.
- Phương pháp xây dựng giải thuật kiểm tra 4 hướng thẳng hàng và thuật toán Heuristic tính điểm tấn công - phòng thủ cho AI đơn giản.
- Cơ chế ứng dụng
Stack để xử lý chức năng Undo/Redo.
Câu hỏi thường gặp
1. Bàn cờ trong đồ án được thiết kế với kích thước và quy cách kỹ thuật như thế nào?
Bàn cờ được thiết kế dưới dạng ma trận $20 \times 20$ ô vuông. Mỗi ô cờ có kích thước chiều rộng và chiều cao bằng 20 pixel. Khi vẽ quân cờ, hệ thống sử dụng hàm FillEllipse để vẽ hình tròn có kích thước thu nhỏ 4 pixel so với viền ô cờ nhằm tạo khoảng cách hiển thị trực quan.
2. Thuật toán trí tuệ nhân tạo (Player vs Com) của trò chơi hoạt động dựa trên nguyên lý nào?
Hệ thống sử dụng giải thuật đánh giá Heuristic. Với mỗi ô cờ còn trống, hệ thống quét theo 4 hướng (dọc, ngang, chéo xuôi, chéo ngược) để tính tổng điểm tấn công (DiemTanCong) và điểm phòng ngự (DiemPhongNgu) dựa trên số lượng quân ta và quân địch trong phạm vi 5 ô. Giá trị điểm tạm thời được lấy bằng giá trị lớn hơn giữa điểm tấn công và phòng ngự. Ô cờ có điểm số lớn nhất trên toàn bộ bàn cờ (DiemMax) sẽ được chọn làm nước đi của máy tính.
3. Điều kiện xác định chiến thắng và hòa cờ được cài đặt như thế nào trong mã nguồn?
Người chơi chiến thắng khi tạo được một chuỗi liên tục gồm 5 quân cờ cùng loại theo một trong 4 phương (dọc, ngang, chéo xuôi, chéo ngược) và các đầu của chuỗi không bị chặn bởi quân đối phương hoặc chạm biên bàn cờ. Trận đấu được xác định hòa khi toàn bộ $20 \times 20 = 400$ ô cờ đã được đánh kín mà không có bên nào thỏa mãn điều kiện thắng.
4. Chức năng hoàn tác (Undo) và làm lại nước đi (Redo) được quản lý bằng cấu trúc dữ liệu nào?
Đồ án sử dụng cấu trúc dữ liệu ngăn xếp (Stack<OCo>) với hai đối tượng là stk_CacNuocDaDi (lưu các nước cờ đã thực hiện) và stk_CacNuocUndo (lưu các nước cờ vừa hoàn tác). Khi người chơi đánh một nước mới, đối tượng OCo tương ứng được đẩy vào stk_CacNuocDaDi. Sau mỗi thao tác, hàm VeLaiQuanCo() sẽ duyệt lại stack để vẽ lại trạng thái bàn cờ.
5. Đồ án giới hạn những tính năng nâng cao nào so với các ứng dụng cờ thương mại?
Theo phạm vi nghiên cứu được công bố, đồ án không bao gồm tính năng chơi trực tuyến qua mạng (Online/LAN), không có hệ thống cơ sở dữ liệu lưu trữ kết quả/lịch sử ván đấu, và thuật toán AI chưa hỗ trợ tùy chọn nhiều mức độ khó khác nhau.
Kết luận
Đồ án "Xây dựng trò chơi Cờ Caro cơ bản" của nhóm sinh viên Trường Đại học Tài chính – Marketing đã hoàn thành đầy đủ các mục tiêu thiết kế và cài đặt một trò chơi đối kháng 2D hoàn chỉnh trên nền tảng C#.NET Windows Forms. Ứng dụng đã giải quyết tốt bài toán mô hình hóa ma trận bàn cờ $20 \times 20$, tích hợp mượt mà các chức năng thi đấu hai người, đấu với máy tính qua thuật toán Heuristic 4 hướng, cùng cơ chế Undo/Redo bằng Stack. Đây là tài liệu thực hành có giá trị tham khảo rõ ràng cho sinh viên công nghệ thông tin trong việc rèn luyện kỹ năng lập trình hướng đối tượng, xử lý đồ họa GDI+ và tiếp cận các giải thuật trò chơi cơ bản.