ĐỀ TÀI: Lập trình trò chơi cờ caro có nối mạng sử dụng ngôn ngữ Visual C++ Báo cáo đề tài gồm các phần sau: • Phần 1: Giới thiệu về đề tài. • Phần 2: Ngôn ngữ và cách thức sử dụng • Phần 3: Thiết kế chương trình và giải thuật • Phần 4: Các hàm chính của chương trình • Phần 5: Chương trình chạy • Phần 6: Kết luận
Phần 1: Giới thiệu sơ lược về đề tài. 1. Giới thiệu sơ lược về trò chơi cờ caro:
Cờ caro là một loại trò chơi khá phổ biến vì luật chơi đơn giản và không đòi hỏi nhiều về công cụ chơi, bạn chỉ cần một tờ giấy có kẻ ô và bút là đủ.Chính vì vậy trò chơi này lại càng phổ biến trong giới học sinh sinh viên. Cờ caro là trò chơi đối kháng 2 người: Trò chơi đối kháng (two-agent, conflicting game ) : Gồm 2 người chơi, đối thủ này sẽ tìm cách dành chiến thắng trước đối thủ kia trong một số hữu hạn nước đi, mỗi nước đi đuợc tạo ra dựa từ 1 trạng thái bất kỳ của trận đấu. Nếu sau 1 số giới hạn nước đi, nếu chưa ai dành chiến thắng thì xem như hoà. Ngoài ra, thông tin về trận đấu là hoàn toàn biết đuợc (perfect information) đối với cả 2 đối thủ. Trò chơi có luật chơi hết sức đơn giản như sau: mỗi đối thủ trong mỗi lượt đi của mình sẽ chọn 1 ô trống còn lại trên bàn cờ (kẻ sẵn các ô lưới ) sao cho tạo thành n con liên tiếp để chiến thắng ... Nếu n = 3 thì nó có 1 tên khác là Tic Tac Toe, nhưng ở đây trò chơi kết thúc khi có một người đạt được 5 con liền nhau cùng trên một hàng ngang, hàng dọc hoặc đường chéo. Nếu khi đã chơi kín bàn cờ nhưng không có ai đạt được 5 con liền nhau thì trò chơi kết thúc và hoà nhau. Trò chơi cờ caro có nguồn gốc từ rất lâu, và là trò chơi mang tính quốc tế. Ở các nước khác nhau trò chơi này mang những cái tên khác nhau nhưng đều gắn với luật chơi đơn giản của nó. Ví dụ như: ở Nhật trò chơi có tên Gomoku, Gobang (Go trong tiếng Nhật có nghĩa là 5, Gomoku có nghĩa là 5 điểm), ở Anh trò chơi có tên là Connect 5. Sau đây là một hình ảnh của trò chơi Gomoku trên bàn cờ 15x15 Hình 1:
Ta thấy rõ, trên bàn cờ, quân đen là quân đi trước, các nước đi theo thứ tự được đánh dấu như trên.
Do thông thường quân đen được đi trước nên người chơi thấy rõ quân đen có lợi thế hơn hẳn quân trắng. Victor Allis đã chứng minh được rằng quân đen hoàn toàn có thể chiến thắng được dễ dàng. Và vì vậy có một số phiên bản khác nhau của trò chơi cùng với sự thay đổi nho nhỏ trong luật chơi để nhằm giảm lợi thế của quân đen đi. Trong đó ở Việt Nam, trò chơi cờ caro là một phiên bản như vậy với sự tăng thêm trong luật chơi là người thắng phải có 5 quân liền nhau và không bị chặn ở 2 đầu. Luật chơi làm cho trò chơi Gomoku trở nên phức tạp hơn và tăng thêm sức mạnh cho quân trắng có thể dành chiến thắng. 2. Giới thiệu sơ lược về đề tài: Đề tài là xây dưng một chương trình phục vụ chơi cờ caro với các chức năng cơ bản như sau: • Chức năng Single Player: Chơi với máy tính, có phân các mức độ dễ và khó cho người chơi. • Chức năng Multi Player: Chơi đa người dùng, chơi online: Chương trình hỗ trợ cho 2 người ở trên cùng mạng LAN để có thể chơi và chat trực tiếp với nhau trong lúc chơi. 3. Lý do chọn đề tài: Như đã giới thiệu ở trên, Cờ caro là một trò chơi có từ lâu đời nay, hiện nay nó rất phổ biến trong giới học đường. Từ nhu cầu giải trí đó, đã có rất nhiều hãng đã sản xuất trò chơi caro trên máy tính, giúp cho việc chơi cờ caro được dễ dàng hơn, và bạn có thể đánh cờ với máy mà không cần một người bạn thực sự. Trên cùng mục đích muốn đem trò chơi cờ caro đến với mọi người, làm cho việc chơi cờ trở nên dễ dàng hơn, có thể hỗ trợ cho bạn chơi với bạn bè, bọn em đã chọn chương trình chơi cờ caro làm đề tài thực tập của mình.
Phần 2: Ngôn ngữ và cách thức sử dụng. 1. Giới thiệu về ngôn ngữ Visual C++: Chương trình được xây dựng bằng ngôn ngữ Visual C++. Đây là một ngôn ngữ lập trình hướng đối tượng điển hình. Microsoft Visual C++ (còn được gọi là MSVC) là một sản phẩm Môi trường phát triển tích hợp (IDE) cho các ngôn ngữ lập trình C, C++, và C++/CLI của Microsoft. Nó có các công cụ cho phát triển và gỡ lỗi mã nguồn C++, đặc biệt là các mã nguồn viết cho Microsoft Windows API, DirectX API, và Microsoft .NET Framework. Các đặc trưng Các chức năng của Visual C++ như tô sáng cú pháp, IntelliSense (chức năng về tự động hoàn thành việc viết mã) và các chức năng gỡ lỗi tiên tiến. Ví dụ, nó cho phép gỡ lỗi từ xa sử dụng một máy tính khác và cho phép gỡ lỗi bằng cách duyệt qua từng dòng lệnh tại một thời điểm. Chức năng "biên tập và tiếp tục" cho phép thay đổi mã nguồn và dịch lại chương trình trong quá trình gỡ lỗi, mà không cần phải khởi động lại chương trình đang được gỡ lỗi. Đặc trưng biên dịch và xây dựng hệ thống, tính năng tiền biên dịch các tập tin đầu đề (header files) và liên kết tịnh tiến (incremental link) - chỉ liên kết những phần bị thay đổi trong quá trình xây dựng phần mềm mà không làm lại từ đầu: Những đặc trưng về tính năng này thuyên giảm tổng thời gian biên tập, biên dịch và liên kết chương trình phần mềm, đặc biệt đối với những đề án phần mềm lớn. Lịch sử Phiên bản trước của Visual C Professional Edition được gọi là Microsoft C/C++ Professional Development System. Phiên bản tương đương với Phiên bản Tiêu chuẩn (Standard Edition) ngày nay được gọi là Microsoft QuickC. •
•
•
Visual C++ 1.0, có MFC 2.0, là phiên bản đầu tiên của Visual C++, ra đời năm 1992, hỗ trợ cả 16-bit và 32-bit, mặc dù đây là phiên bản tiếp sau của C/C++ 7.0. Visual C++ 1.5, có MFC 2.5, hỗ trợ thêm OLE 2.0 và ODBC cho MFC. Nó nguyên chỉ là một phiên bản dùng 16-bit mà thôi và là phiên bản đầu tiên của Visual C++ được in ấn trên CD-ROM. Phiên bản này cũng quan trọng như phiên bản trước với hỗ trợ cho việc xây dựng phần mềm 16-bit. Visual C++ 2.0, có MFC 3.0, là phiên bản đầu tiên chỉ dành riêng cho 32bit, mặc dù vào thời điểm đó cũng có Visual C++ 1.51 (một bản cập nhật của Visual C++ 1.5) ra đời. Các phiên bản cập nhật cho phiên bản này gồm
•
• • •
•
•
có: Visual C++ 2.1, ra đời cùng lúc với Visual C++ 1.52, là một bản cập nhật khác cho Visual C++ 1.5, và 2.2. Visual C++ 4.0, hỗ trợ MFC 4.0, được thiết kế cho Windows 95, cũng như Windows NT. Phiên bản cập nhật cho nó gồm có Visual C++ 4.1 và Visual C++ 4.2, không hỗ trợ Win32s. Visual C++ 5.0, hỗ trợ MFC 4.21, là một bản cập nhật chính từ 4.2. Visual C++ 6.0, MFC 6.0, ra đời 1998, đã và đang được sử dụng rộng rãi cho các project lớn và nhỏ. Visual C++ .NET 2002 (còn được gọi là Visual C++ 7.0), hỗ trợ MFC 7.0, ra đời năm 2002, hỗ trợ kiến tạo mã trong khi liên kết (link time code generation) và kiểm lỗi những duyệt thảo trong quá trình thi hành (debugging runtime checks). Phiên bản này còn bao gồm các phần mở rộng sang ngôn ngữ C++, cùng đồng thời kèm theo một giao diện người dùng mới (phân hưởng cùng với Visual Basic và Visual C#). Đây cũng chính là nguyên nhân tại sao Visual C++ 6.0 hiện vẫn còn được sử dụng rộng rãi. Visual C++ .NET 2003 (còn được gọi là Visual C++ 7.1), bao gồm MFC 7.1, đã được xuất bản trong năm 2003 và là một phiên bản nâng cấp chất lượng lớn đối với Visual C++ .NET 2002. Visual C++ 2005 (Visual C++ 8.0), MFC 8.0, ra đời tháng 11 năm 2005. Hỗ trợ C++/CLI và OpenMP. Đây là phiên bản mới nhất.
Do chương trình được xây dựng trên ngôn ngữ Visual C++ 2005 nên sau đây em xin trình bày chi tiết về ngôn ngữ này với nền Visual C++ 2005. Hình 2: Giao diện của chương trình:
Microsoft Visual C++ 2005 cung cấp một môi trường mạnh và linh hoạt để xây dựng những ứng dụng dựa trên cửa sổ của Microsoft Windows và Microsoft.NET. Nó có thể được sử dụng như một hệ thống môi trường phát triển tích hợp, hoặc như một tập những công cụ độc lập. Visual C++ được kết hợp bởi những thành phần sau: + Những công cụ dịch Visual C++2005: Trình dịch có nhiều tính năng mới hỗ trợ người lập trình mà hướng tới nền máy ảo như the Common Language Runtime (CLR). + Thư viện Visual C++ 2005: Thư viện bao fồm những Thư viện mẫu chuẩn Active Template Library (ATL), Microsoft Foundation Class (MFC), the C RunTime Library (CRT) và những thư viện chuẩn ví dụ như Standard C++ Library, mà đã được mở rộng để cung cấp thêm những tính năng bảo mật cho các hàm để đàm bảo vấn đề an ninh. Một thư viện mới, C++ Support Library, được thiết kế để làm đơn giản hoá những chương trình hướng tới CLR. + Môi trường phát triển : The Visual C++ 2005 Development Environment: Cho dù các trình dịch C++ và thư viện có thể được sử dụng từ môi trường dòng lệnh, môi trường phát triển này cung cấp những hỗ trợ mạnh nhất để quản lý và cấu hình các dự án đề tài lớn , chỉnh sửa mà nguồn, duyệt mà nguồn, và công cụ gỡ lỗi. Môi trường này cũng cung cấp hỗ trợ IntelliSense, giúp tạo nên những thông báo, những gợi ý tuỳ vào hoàn cảnh khi mà code được viết ra. Ngoài những ứng dụng giao diện đồ hoạ với người sử dụng thông thường Visual C++ còn hỗ trợ người lập trình để xây dựng các ứng dụng Web, ứng dụng dựa trên cửa sổ thông minh trên máy khách, và những giải pháp cho các thiết bị di động thin-client và smart-client. C++ là ngôn ngữ mức độ hệ thống phổ biến nhất trên thế giới và Visual C++ đã đưa ra cho người lập trình một công cụ hỗ trợ lớp tốt nhất để xây dựng các phần mềm. 2. Giới thiệu về MFC:
The Microsoft Foundation Class Library là một nền ứng dụng để lập trình trong Microsoft Windows. Được viết trong C++, MFC cung cấp nhiều mã cần thiết cho việc quản lý các cửa sổ, menu, và các hộp hội thoại, biểu diễn hầu hết những chức năng nhập vào và ra đơn giản, lưu trữ một tập các đối tượng dữ liệu ... Tất cả những gì bạn phải làm là thêm vào ứng dụng của mình những đoạn mã đặc trưng vào nền đó. Và được cung cấp kĩ thuật lập trình lớp C++, nên rất dễ dàng để có thể mở rộng hoặc kế thừa những chức năng cơ bản mà nền MFC cung cấp. Nền MFC là một bước tiến mạnh mẽ cho phép bạn có thể xây dựng dựa trên công việc của các chuyên gia lập trình Windows. MFC giúp rút ngắn thời gian lập trình, làm mã trở nên dễ dàng chuyển đổi hơn, cung cấp hỗ trợ vô cũng lớn mà không
làm giảm tính linh hoạt và tự do của chương trình và cung cấp truy xuất dễ dàng cho các thành phần và công nghệ thuộc giao diện khó lập trình như công nghệ Active, OLE, và lập trình Internet. Ngoài ra, MFC đơn giản hoá lập trình cơ sở dữ liệu thông qua Access Objects (DAO) và Open Database Connectivity (ODBC), lập trình mạng thông qua Windows Sockets. MFC làm cho các tính năng lập trình như các thanh thuộc tính, xem trước khi in, thanh công cụ có thể thay đổi…trở nên dễ dàng.
3. Phần 3: Thiết kế chương trình và giải thuật
1. Thiết kế chương trình Chương trình được thiết kế như sau: 2. Giải thuật của chương trình: Đây là một chương trình trò chơi mang tính trí tuệ nên phần giải thuật của chương trình là phần quan trọng nhất. Đánh giá một chương trình trò chơi cờ hay hay không là thông qua giải thuật của chương trình.Trong phần này, ta sẽ trình bày chi tiết về giải thuật của chương trình chơi cờ caro. Giải thuật có 2 phần chính: • Giải thuật xác định thắng thua cho một ván cờ, giải thuật này áp dụng cho cả chơi 2 người và chơi với máy nên có thể dùng chung. • Giải thuật tìm nước đi của máy trong khi chơi với máy. Sau đây xin được trình bày chi tiết: 1.1 Giải thuật xác định thắng thua cho một ván cờ: Giải thuật được dựa trên của chương trình cờ caro cổ điển với luật chơi là xác định một người thắng khi người đó có 5 con liên tiếp nằm trên cùng một hàng ngang, hàng dọc hoặc đường chéo. Ta sử dụng các giải thuật như sau để xác định: * 5 con liên tiếp trên một hàng