Lịch sử: Cờ tướngchữ Hán gọi là 象棋, phiên âm Hán Việt làTượng Kỳtức "cờ hình tượng", có người cho là "cờ voi" nhưng chữ "tượng" nên hiểu theo nghĩa "phỏng theo, bắt chước" hợp lí hơn ngh
Trang 1MỤC LỤC
CHƯƠNG 1: MỞ ĐẦU 1
1.1 Trò chơi cờ tướng 1
1.2 Mục tiêu của đề tài 4
1.3 Yêu cầu của đề tài 4
1.4 Nội dung luận văn 5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Error! Bookmark not defined
2.1 Tìm hiểu Socket Error! Bookmark not defined
2.2 Giao thức TCP/IP Error! Bookmark not defined
2.2.1 Tầng ứng dụng (Application Layer) Error! Bookmark not defined
2.2.2 Tầng giao vận (Transport Layer) Error! Bookmark not defined
2.2.3 Tầng liên mạng (Internet Layer) Error! Bookmark not defined
2.2.4 Tầng giao diện mạng (Network Interface Layer)Error! Bookmark not defined
2.3 Mô hình Client – Server Error! Bookmark not defined
2.4 Dạng trò chơi và cây trò chơi Error! Bookmark not defined
2.5 Vét cạn Error! Bookmark not defined
2.6 Chiến lược tìm kiếm trong trò chơi Error! Bookmark not defined
2.7 Đánh giá một thế cờ Error! Bookmark not defined
2.8 Thủ tục MiniMax Error! Bookmark not defined
2.9 Thủ tục AlphaBeta Error! Bookmark not defined
CHƯƠNG 3: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNGError! Bookmark not defined
3.1 THIẾT KẾ HỆ THỐNG Error! Bookmark not defined
3.1.1 Sơ đồ usecase Error! Bookmark not defined
3.1.2 Sơ đồ lớp Error! Bookmark not defined
Trang 23.2 ĐẶC TẢ CHỨC NĂNG Error! Bookmark not defined
3.2.1 Các yêu cầu chức năng cơ bản Error! Bookmark not defined
3.2.2 Yêu cầu phi chức năng Error! Bookmark not defined
3.3 ĐẶC TẢ KỸ THUẬT Error! Bookmark not defined
3.3.1 Kho dữ liệu (Resource) Error! Bookmark not defined
3.3.2 Các lớp quân cờ Error! Bookmark not defined
3.3.3 Lớp Luatchoi Error! Bookmark not defined
3.3.4 Lớp cothedi Error! Bookmark not defined
3.3.5 Lớp LoadResource Error! Bookmark not defined
3.3.6 Lớp HienThiCT Error! Bookmark not defined
3.3.7 Lớp ServerProgram Error! Bookmark not defined
3.3.8 Lớp ClientProgram: Error! Bookmark not defined
3.3.9 Lớp ChessEngine Error! Bookmark not defined
CHƯƠNG 4: TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ 6
4.1 Kết quả thực hiện các chức năng 6
4.1.1 Giao diện đăng nhập 6
4.1.2 Menu game 7
4.1.3 Bàn cờ: 8
4.1.4 Nhấc quân cờ đánh dấu các vị trí có thể đi: 9
4.1.5 Kiểm tra chiếu tướng: 10
4.1.6 Kiểm tra thắng thua: 11
4.1.7 Chức năng xin thua 13
4.1.8 Chức năng cầu hòa: 14
4.2 Đánh giá và nhận xét 15
Trang 3DANH SÁCH HÌNH VẼ
Hình 1: Bàn cờ tướng 2
Hình 2: Mô hình bốn tầng của giao thức TCP/IP Error! Bookmark not defined Hình 3: Mô hình Client – Server Error! Bookmark not defined Hình 4: Hình ảnh mô phỏng cây chương trình Error! Bookmark not defined Hình 5: Thuật toán Mimax Error! Bookmark not defined Hình 6: Minh họa chiến lược chơi cờ của người và chương trình máy tính Error!
Bookmark not defined.
Hình 7: Thuật toán AlphaBeta Error! Bookmark not defined Hình 8: Usecase tổng quát Error! Bookmark not defined Hình 9: Usecase chức năng chơi mạng Error! Bookmark not defined Hình 10: Usecase chức năng chơi với máy Error! Bookmark not defined Hình 11: Sơ đồ lớp chức năng chơi qua mạng LANError! Bookmark not defined.
Hình 12: Sơ đồ lớp chức năng đánh với máy Error! Bookmark not defined Hình 13: Thư mục chứa dữ liệu Error! Bookmark not defined Hình 14: Mô phỏng bàn cờ tướng với tọa độ Error! Bookmark not defined Hình 15: Miền xem xét nằm giữa Alpha, Beta Error! Bookmark not defined Hình 16 Cây trò chơi minh họa cho thuật toán AlphaBetaError! Bookmark not
defined.
Trang 4DANH SÁCH BẢNG BIỂU
Bảng 1: Luật đi của mỗi quân cờ 3
Bảng 2: Một số port phổ biến Error! Bookmark not defined Bảng 3: Giá trị của các quân cờ Error! Bookmark not defined Bảng 4: So sánh hai thuật toán MiniMax và AlphaBetaError! Bookmark not
defined.
Trang 5
CHƯƠNG 1: MỞ ĐẦU
Nội dung chương 1 trình bày, giới thiệu về trò chơi cờ tướng, lịch sử ra
đời, luật chơi Phần cuối chương sẽ trình bày mục tiêu và ý nghĩa của đề tài
Lịch sử:
Cờ tướng(chữ Hán gọi là 象棋, phiên âm Hán Việt làTượng Kỳtức "cờ hình tượng", có người cho là "cờ voi" nhưng chữ "tượng" nên hiểu theo nghĩa "phỏng theo, bắt chước" hợp lí hơn nghĩa "voi"), hay còn gọi làcờ Trung Hoa (Tiếng Anh: Chinese Chess) vì nó được phổ biến ra thế giới từ Trung Quốc và cũng được coi là
"quốc hồn quốc túy" của nước này (nhưng theo phương Tây thì nó có nguồn gốc
từ Ấn Độ), là một trò chơi trí tuệ dành cho hai người, là loại cờ được chơi phổ biến nhất thế giới cùng với cờ vua
Cờ Tướng là một trong những trò chơi có thâm niên lâu đời và tồn tại bất biến với thời gian Đây không phải là môn giải trí đơn thuần như bao trò chơi khác, mà
nó còn rèn luyện cho con người trí thông minh và khả năng phán đoán Trong cờ Tướng, có những quy luật và nguyên tắc được quy định chặt chẽ, buộc người chơi phải tuân theo để làm nên thành công của ván cờ Trong cờ Tướng, người chơi phải biết “điều binh khiển Tướng” và phải biết giá trị của các quân cờ để có những chiến lược phù hợp
Bàn cờ:
Bàn cờ là mộthình chữ nhậtdo 9 đường dọc và 10 đường ngang cắt nhau vuông góc tại 90 điểm hợp thành Một khoảng trống gọi là sông (hay hà) nằm ngang giữa bàn cờ, chia bàn cờ thành hai phần đối xứng bằng nhau Mỗi bên có một cung Tướnghình vuông(Cửu cung) do 4 ô hợp thành tại các đường dọc 4, 5, 6 kể từ đường ngang cuối của mỗi bên, trong 4 ô này có vẽ hai đường chéo xuyên qua Theo quy ước, khi bàn cờ được quan sát chính diện, phía dưới sẽ là quân Trắng (hoặc Đỏ), phía trên sẽ là quân Đen Các đường dọc bên Trắng (Đỏ) được đánh số
Trang 6từ 1 đến 9 từ phải qua trái Các đường dọc bên Đen được đánh số từ 9 tới 1 từ phải qua trái
Hình 1: Bàn cờ tướng
Luật chơi:
Ván cờ được tiến hành giữa hai người, một người cầm quân Trắng (hay Đỏ), một người cầm quân Đen (hay Xanh lá cây) Mục đích của mỗi người là tìm mọi cách đi quân trên bàn cờ theo đúng luật để chiếu bí Tướng (hay Soái, hoặc Suý) của đối phương và giành thắng lợi Quân cờ được di chuyển theo luật sau:
Stt Đối tượng Luật đi
1 Tướng Đi từng ô một, đi ngang hoặc dọc Tướng luôn luôn phải
ở trong phạm vi cung và không được ra ngoài “Cung” tức là hình vuông 3×3 được đánh dấu bởi lằng chéo hình chử X
Trang 72 Sĩ Đi xéo 1 ô mỗi nước Sĩ luôn luôn phải ở trong cung
như con Tướng
3 Tượng Đi chéo 2 ô (ngang 2 và dọc 2) cho mỗi nước đi Tượng
chỉ được phép ở một bên của bàn cờ, không được di chuyển sang nữa bàn cờ của đối phương Nước đi của tượng sẽ không hợp lệ khi có một quân cờ nằm chặn giữa đường đi
4 Xe Đi ngang hay dọc trên bàn cờ miễn là đừng bị quân
khác cản đường từ điểm đi đến điểm đến
5 Mã Đi ngang 2 ô và dọc 1 ô (hay dọc 2 ô và ngang 1 ô) cho
mỗi nước đi Nếu có quân nằm ngay bên cạnh mã và cản đường ngang 2 (hay đường dọc 2), mã bị cản không được đi đường đó
6 Pháo Đi ngang và dọc giống như xe Điểm khác biệt là nếu
pháo muốn ăn quân, pháo phải nhảy qua đúng 1 quân nào đó Khi không ăn quân, tất cả những điểm từ chổ đi đến chổ đến phải không có quân cản
7 Tốt (hay Binh) đi một ô mỗi nước Nếu chốt chưa vượt qua
sông, nó chỉ có thể đi thẳng tiến Khi đã vượt sông rồi, chốt có thể đi ngang 1 nước hay đi thẳng tiến 1 bước mỗi nước
Bảng 1: Luật đi của mỗi quân cờ
- Ăn quân: Khi quân di chuyển đến một vị trí giử bởi quân đối phương, quân đối phương bị ăn và bị lấy ra khỏi bàn cờ
- Chống tướng: Hai con tướng trên bàn không được nằm trên cùng 1 cột dọc
mà không có quân cản nào ở giữa Nước đi để 2 con tướng trong vị trí chống tướng là không hợp lệ
- An toàn của tướng: Sau một nước đi, tướng của bên đã đi không được để quân đối phương ăn ngay trong nước tiếp Những nước để tướng không an toàn là không hợp lệ.Thông thường bị xử lý lổi kỹ thuật,nếu một ván cờ bị phạm 3 lổi thì sẽ thua
Ván cờ kết thúc khi một trong những tình huống sau:
- Chiếu bí: Nếu một bên chiếu (bắt tướng), và đối thủ không có khả năng
đở, bên chiếu tướng thắng
- Hết nước đi: Nếu bên tới phiên đi nhưng không có nước hợp lệ để đi, bên
đó sẽ bị thua
- Khi một hoặc hai bên bị phạm lỗi
Trang 81.2 Mục tiêu của đề tài
Đề tài: “Xây dựng game cờ tướng ”
Để làm đề tài này, ta cần:
- Hiểu nguyên lý hoạt động của mô hình Client – Server trong lập trình mạng
- Hiểu được kỹ thuật Socket trong Java Cách áp dụng nó để xây dựng ứng dụng
- Biết kết hợp Socket trong Java và mô hình Client – Server để xây dựng một ứng dụng chạy trên môi trường mạng
- Tìm hiểu cách một chương trình máy tính có thể chơi được các trò chơi đấu trí như cờ tướng, cờ vua, … Tìm hiểu về cây trò chơi và vét cạn
- Tìm hiểu về chiến lược tìm kiếm trong thể loại trò chơi đối kháng như cờ tướng, cờ vua, … từ đó xây dựng và viết chương trình cho thủ tục MiniMax
- Cải tiến thuật toán MiniMax bằng việc xây dựng thủ tục AlphaBeta, giảm thời gian tìm kiếm nước đi của chương trình
- Xây dựng chương trình với giao diện dễ nhìn, thân thiện với người chơi và
dễ sử dụng
Để triển khai xây dựng đề tài hoàn chỉnh ta phải am hiểu tổng quan, sơ lược về các mô hình hoạt động trong môi trường mạng thông dụng hiện nay cùng các cơ chế
hỗ trợ cho mô hình đó và ngôn ngữ lập trình mạng thích hợp Cụ thể trong đề tài đã lựa chọn cần tìm hiểu kỹ các phần sau:
- Tìm hiểu mô hình Client – Server
- Tìm hiểu cơ chế Socket
- Tìm hiểu kỹ thuật Socket trong Java
- Tìm hiểu cây trò chơi, chiến lược tìm kiếm trên cây
- Xây dựng hàm MiniMax
- Cải thiện thủ tục MiniMax với AlphaBeta
Trang 91.4 Nội dung luận văn
Luận văn bao gồm 4 chương:
Chương 1: Giới thiệu tổng quan về trò chơi cờ tướng, mục tiêu của đề tài và yêu
cầu của đề tài
Chương 2: Trình bày, giới thiệu về mô hình Client – Server, các giao thức và lý
thuyết trò chơi
Chương 3: Trình bày các kiến trúc trong game và giải pháp để xây dựng game Chương 4: Kết luận và hướng phát triển
Trang 10TRIỂN KHAI VÀ ĐÁNH GIÁ KẾT QUẢ
Nội dung chương này trình bày các kết quả đạt được trong quá trình thực
hiện luận văn và hướng phát triển của đề tài
1.5.1 Giao diện đăng nhập
Trang 111.5.2 Menu game
Trang 121.5.3 Bàn cờ:
Bàn cờ người chơi:
Sau khi đăng nhập thành công, giao diện chính của chương trình sẽ hiện lên giúp người chơi tiếp cận với ván cờ Người chơi nào đăng nhập trước sẽ được đi trước Tên người chơi lúc đăng nhập được hiển thị ở khung tên
Trang 131.5.4 Nhấc quân cờ đánh dấu các vị trí có thể đi:
Khi người chơi nhấc quân lên để thực hiện nước, chương trình sẽ hiển thị các vị trí trên bàn cờ mà quân cờ có thể đi được, quân cờ nhấc lên sẽ được đánh dấu
Trang 141.5.5 Kiểm tra chiếu tướng:
Chương trình sẽ kiểm tra chiếu tướng sau mỗi nước đi, nếu có chiếu tướng, chương trình đưa ra thông báo cho cả hai người chơi Thông báo chiếu tướng chỉ hiển thị trong 2s rồi tắt để người chơi tiếp tục ván cờ
Trang 151.5.6 Kiểm tra thắng thua:
Người chơi:
Chương trình sẽ kiểm tra thắng sau mỗi nước đi, nếu người chơi ăn được tướng của đối phương sẽ thắng, chương trình đưa ra thông báo thắng, ván cờ kết thúc
Trang 16Đối phương:
Chương trình chỉ kiểm tra thắng nên khôi đối phương thắng thì đồng thời chương trình cũng hiển thị thông báo thua đối với người chơi, ván cờ kết thúc
Trang 171.5.7 Chức năng xin thua
Khi thấy thế cờ đã thua, người chơi có thể nhấn nút xin thua, chương trình đưa ra thông báo thua, ván cờ kết thúc
Trang 181.5.8 Chức năng cầu hòa:
Khi đối phương nhấp vào nút cầu hòa:
Khi nhận thấy ván cờ vào thế hòa, người chơi có thể nhấn nút cầu hòa để kết thúc ván cờ với kết quả hòa Khi nhấn nút, chương trình hiển thị yêu cầu cầu hòa đến đối phương
Trang 19Nếu người chơi chấp nhận:
Nếu người chơi chấp nhận, ván cờ kết thúc với kết quả hòa, chương trình hiển thị thông báo hòa cho cả hai người chơi Nếu người chơi từ chối, ván cờ sẽ tiếp tục
Chương trình được xây dựng tương đối hoàn thiện, đáp ứng đầy đủ các yêu cầu của đồ án, tuy chưa thể phát triển thành một trò chơi online hoàn thiện song đồ án
đã giúp củng cố và hoàn thiện kiến thức
Trang 20KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
Các kết quả đạt được:
Tìm hiểu kiến thức về lập trình mạng, mô hình Client – Server, lý thuyết trò chơi, kỹ thuật lập trình game2D
Đề tài “Xây dựng game Cờ tướng” được hoàn thành đúng yêu cầu và thời gian quy định
Chương trình được xây dựng đủ chức năng cơ bản của một game cờ tướng đánh qua mạng LAN đồng thời giúp người chơi luyện tập với chương trình máy tính
Các kết quả chưa đạt được:
Một số chức năng vẫn chưa thật hoàn thiện, ở một số trường hợp đặc biệt chương trình vẫn chưa xử lý được
Chưa tạo được phòng cho người chơi lựa chọn
Tốc độ tìm nước đi của chương trình máy tính chưa được tốt
Hướng phát triển:
Tối ưu chương trình máy tính đánh cờ
Xây dựng phòng chơi, thêm một số chức năng trong game như hoãn nước, tính thời gian
Phát triển thành game Online