Truyền thông có kết nối có nghĩa là trước khi truyền dữ liệu giao thức TCP gửi và giao thức TCP nhận phải thiết lập kênh truyền trước khi gửi/nhận dữ liệu trong suốt quá trình trao đổi d
Trang 1ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Trang 4MỞ ĐẦU
Cờ vua, trước kia còn được gọi là cờ quốc tế, là trò chơi quốc tế và là môn thể
thao trí tuệ cho 2 người chơi Ngày nay, cờ vua là một trong những trò chơi phổbiến nhất với hàng triệu người tại nhà riêng, trong câu lạc bộ, trực tuyến, từ xa vàtrong các giải đấu
Hình 1.1 Cờ vua
Trang 5
LỜI CẢM ƠN
Em xin chân thành cám ơn cô Phan Thị Quỳnh Hương đã tận tâm hướng dẫn
em qua những buổi trao đổi Trong thời gian được học tập và thực hành dưới sựhướng dẫn của thầy, chúng em đã thu được rất nhiều kiến thức bổ ích Nếu không
có những lời hướng dẫn, dạy bảo của thầy thì em nghĩ đồ án này của chúng em rấtkhó có thể hoàn thành được Xin gửi lời cảm ơn chân thành đến gia đình, bè bạn,
đã luôn là nguồn động viên to lớn, giúp em vượt qua những khó khăn trong suốtquá trình học tập và thực hiện đồ án Mặc dù đã rất cố gắng hoàn thiện đồ án vớitất cả sự nỗ lực, tuy nhiên, do bước đầu đi vào thực tế, tìm hiểu và xây dựng đồ án
trong thời gian có hạn, và kiến thức còn hạn chế, nhiều bỡ ngỡ, nên đồ án “Xây
dựng game cờ vua chơi qua mạng” chắc chắn sẽ không thể tránh khỏi những
thiếu sót Em rất mong nhận được sự quan tâm, thông cảm và những đóng gópquý báu của các thầy cô và các bạn để đồ án này ngày càng hoàn thiện hơn Mộtlần nữa, em xin chân thành cám ơn và luôn mong nhận được sự đóng góp của mọingười Sau cùng, em xin kính chúc các thầy cô trong Khoa Công nghệ thông tindồi dào sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh cao đẹp của mình làtruyền đạt kiến thức cho thế hệ mai sau
Trang 6NHẬN XÉT
(Của giảng viên hướng dẫn)
………
………
………
………
………
………
Trang 7Chương 1 Giới thiệu 8
1.1 Tổng quan 8
1.1.1 Mục tiêu của chuyên đề 8
1.1.2 Đối tượng nghiên cứu 8
1.1.3 Phạm vi nghiên cứu 8
1.2 Phương pháp, kết quả 8
1.2.1 Phương pháp 8
1.2.2 Kết quả 9
1.3 Cấu trúc đồ án 9
Chương 2 Nghiên cứu tổng quan 10
2.1 Nghiên cứu Giao thức TCP/IP 10
2.1.1 Khái niệm 10
2.1.2 Tổng quan về giao thức TCP/IP 10
2.2 Khái niệm Socket 11
2.3 Mô hình Client – Server với giao thức TCP 12
2.4 Dạng trò chơi và cây trò chơi 12
Chương 3 Phân tích thiết kế hệ thống và triển khai xây dựng 14
3.1 Mô hình tổng quan của hệ thống nghiên cứu 14
3.1.1 Sơ đồ tổng quát của Server - Client 14
3.1.2 Các chức năng tổng quan của trò chơi 15
3.1.3 Xử lý thuật toán 16
3.2 Triển khai viết chương trình 17
Chương 4 Triển khai và đánh giá kết quả 25
4.1 Kết quả thực hiện các chức năng 25
4.1.1 Giao diện chính của trò chơi 25
4.1.2 Bàn cờ và gameplay 26
4.1.3 Các client kết nối với nhau 27
4.1.4 Kiểm tra thắng thua 27
4.2 Kết quả hoàn thành 28
4.3 Hạn chế 28
4.4 Hướng phát triển 28
Trang 8DANH MỤC HÌNH
Hình 1.1 Cờ vua 3
Hình 2.2 Quá trình bắt tay 3 bước 11
Hình 2.3 Minh họa việc truyền dữ liệu bởi giao thức TCP 11
Hình 2.4 Các giao thức trong Socket 12
Hình 2.5 Các quân cờ 13
Hình 2.6 Cách xếp cờ 13
Hình 3.7: Sơ đồ tổng quát mô hình server - client 14
Hình 3.8: Giao diện tổng quan của trò chơi 15
Hình 3.9: Quy trình thuật toán của trò chơi 16
Hình 3.10: Hàm khởi tạo server 18
Hình 3.11: Client.java 19
Hình 3.12: Thiết lập bàn cờ 8x8 ô 21
Hình 3.13: Lần lượt thiết kế chức năng và nước đi của từng quân cờ 22
Hình 3.14: Hàm gọi các quân cờ và set sự kiện cho từng nút - quân cờ 23
Hình 3.15: Giao diện kết nối đến server 23
Hình 3.16: Giao diện hiển thị các client đang kết nối trong server 24
Hình 3.17: Hàm kiểm tra và hiển thị kết quả 25
Hình 4.18 Giao diện trang chủ 26
Hình 4.19 Bàn cờ và gameplay 26
Hình 4.20 Hiển thị các id đang hoạt động và các hành động 27
Hình 4.21 Chấp nhận lời mời 27
Hình 4.22 Hiển thị kết quả 28
Trang 9Chương 1 Giới thiệu
1.1 Tổng quan
1.1.1 Mục tiêu của chuyên đề
- Hiểu nguyên lý hoạt động của mô hình Server – Client 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
- 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ờ vua, cờ tướng,… Tìm hiểu về cây trò chơi
- Trình bày tổng quan về lý thuyết về TCP/IP
- Trình bày bài toán các nước đi của các quân cờ trên bàn cờ
- Xây dựng chương trình demo game cờ vua chơi trên TCP/IP
1.1.2 Đối tượng nghiên cứu
- Mô hình tổng quan về game cờ vua qua TCP/IP
- Các thuật toán liên quan đến nước đi của các quân cờ
- Ngôn ngữ Java
1.1.3 Phạm vi nghiên cứu
- lập trình game cờ vua
- Sản phẩm là phần mềm demo nhận dạng chữ viết máy
- Ứng dụng của đề tài là phục vụ cho học tập và giải trí
1.2 Phương pháp, kết quả
1.2.1 Phương pháp
* Phương pháp chủ đạo
- Phương pháp nghiên cứu lý thuyết
+ Tìm hiểu tổng quan về lý thuyết thuật toán di chuyển của các quân cờ trênbàn cờ
+ Tìm hiểu các hướng tiếp cận giải quyết bài toán liên qua đến nước đi củacác quân cờ trên bàn cờ
Trang 10+ Tìm hiểu về một số phương pháp làm game bằng java và nhận gửi dử liệubằng tcp/ip.
- Phương pháp nghiên cứu thực nghiệm
+ Tiến hành phân tích và cài đặt trên công cụ Eclipse Java 2019
+ Đánh giá kết quả đạt được
Nội dung chính của chuyên đề được chia thành 4 phần như sau:
Chương 1 Tổng quan về game cờ vua : Chương này trình bày một cách tổng
quan về mục tiêu, đối tượng và phạm vi nghiên cứu, các hướng tiếp cận để giảiquyết bài toán nhận dạng và kết quả dự tính
Chương 2 Phương pháp làm game cờ vua :
Chương 3 Phân tích thiết kế hệ thống và triển khai xây dựng: giới thiệu mô
hình tổng quan và triển khai xây dựng phần mềm Trọng tâm chính của chươngnày chính là giới thiệu phần mềm demo nhận dạng chữ viết máy với giao diện đồhoạ thân thiện với người sử dụng
Chương 4 Kết luận và hướng phát triển: Phần này tổng kết các kết quả đã đạt
được của đồ án cùng với các hướng phát triển trong tương lai
Trang 11Chương 2 Nghiên cứu tổng quan
2.1 Nghiên cứu Giao thức TCP/IP
2.1.1 Khái niệm
Mô hình TCP/IP là một mô hình được sử dụng rất phổ biến hiện nay Mô hình TCP/IP được xây dựng bao gồm các giao thức (còn được gọi là dịch vụ)
được phân bố ở các tầng, phục vụ cho quá trình biến đổi và truyền, nhận dữ liệu
Để dữ liệu có thể được truyền đi trên mạng, dữ liệu được đưa vào từ người dùng phải được chia nhỏ, biến đổi qua nhiều bước thành định dạng có thể truyền được trên các phương tiện truyền
2.1.2 Tổng quan về giao thức TCP/IP
Giao thức TCP là giao thức truyền thông có kết nối (connection oriented)
và tin cậy
Truyền thông có kết nối có nghĩa là trước khi truyền dữ liệu giao thức TCP gửi và giao thức TCP nhận phải thiết lập kênh truyền trước khi gửi/nhận dữ liệu trong suốt quá trình trao đổi dữ liệu hãy nhận thức gửi dẫn phải duy trì kênh đã được thiết lập
Quá trình thiết lập kênh được kiện cụ thể bởi một quá trình gọi là quá trình bắt tay (three-way handshake) 3 bước như sau:
1 Một trước hết giao thức TCP khi máy gửi phải yêu cầu thiết lập một kênh truyền bằng cách gửi một phân đoạn (segment) gọi là SYN đến giao thức TCP phía máy nhận
2 Giao thức TCP khi máy nhận trả lại một phân đoạn (segment) gọi là ACK để xác nhận đã nhận được thành công
3 Giao thức TCP phía máy gửi tiếp tục gửi một phân đoạn ACK để xác nhận và sau đó là quá trình gửi dữ liệu
Trang 12Hình 2.2 Quá trình bắt tay 3 bước
Giao thức TCP sử dụng truyên thông dạng luồng dữ liệu hay dãy các bytes(bytes-tream) liên tục trên kênh truyền, được mô tả như hình vẽ bên dưới:
Hình 2.3 Minh họa việc truyền dữ liệu bởi giao thức TCP
2.2 Khái niệm Socket
Như đã đề cập, để xây dựng một chương trình theo mô hình Client-Server cho phép truyền nhận dữ liệu qua mạng, người lập trình chỉ cần viết chương trình
ở tầng ứng dụng và tìm cách giao tiếp với một trong hai giao thức (dịch vụ) ở tầng vận chuyển là TCP hoặc UDP Để làm được việc này, các hệ điều hành cung cấp một phương tiện cho phép ứng dụng người dùng giao tiếp được với các giao thức TCP và và UDP một cách dễ dàng, các hệ điều hành cung cấp một phương tiện cho phép ứng dụng người dùng giao tiếp được với các giao thức TCP và và UDP một cách dễ dàng Phương tiện đó được gọi là Socket, được biểu diễn như hình vẽ bên dưới:
Trang 13Hình 2.4 Các giao thức trong Socket
2.3 Mô hình Client – Server với giao thức TCP
Việc xây dựng chương trình client server sử dụng giao thức của tầng vận chuyển được thực hiện thông qua TCP socket.Do vậy, người lập trình chỉ cần viết
mã lệnh để đọc và ghi dữ liệu giữa chương trình và TCP Socket Sau đó TCP Socket sẽ có nhiệm vụ liên lạc và gửi, nhận dữ liệu với TCP Socket phía phần còn lại Các hoạt động bao gồm như sau:
2.4 Dạng trò chơi và cây trò chơi
- Cờ vua là một trò chơi trên bàn
- Là một trò chơi đối kháng trí tuệ giữa 2 trò chơi
Trang 14- Là một trò chơi, một môn thể thao nổi tiếng thế giới
- Mỗi người sẽ bắt đầu ván cờ với 16 quân cờ và sẽ lần lượt đi ở quân của mình sau khi đối phương đã đi xong một nước(hoàn thành nước đi) Các quân cở của mỗi bên bao gồm: 8 tốt, 2 xe, 2 mã, 2 tượng, 1 hậu và 1 vua
- Quân cờ:
Hình 2.5 Các quân cờ
- Cách xếp cờ
Trang 15Chương 3 Phân tích thiết kế hệ thống và triển khai xây dựng
3.1 Mô hình tổng quan của hệ thống nghiên cứu
3.1.1 Sơ đồ tổng quát của Server - Client
Hình 3.7: Sơ đồ tổng quát mô hình server - client
Sau đây là quá trình tạo kết nối mạng TCP cho game:
Server
Tạo ServerSocket
Gọi thực thi phương thức accept() để chấp nhận thiết lập kết nối với Client
=> nhận được Socket giao tiếp với Client
Lấy InputStream và OutputStream để nhận và gửi dữ liệu với Client
Gửi và nhận dữ liệu với Client, sử dụng các phương thức read() và write()của các lớp đối tượng InputStream và OutputStream
Đóng Socket và ServerSocket
Trang 16 Kết thúc chương trình.
Client
Tạo Socket kết nối đến Server
Lấy InputStream và OutputStream để nhận và gửi dữ liệu với Server
Gửi và nhận dữ liệu với Server, sử dụng các phương thức read() và write()của các đối tượng InputStream và OutputStream
Đóng Socket
Kết thúc chương trình
3.1.2 Các chức năng tổng quan của trò chơi
Trang 17- Chat trong khi chơi game
- Server kiểm soát các hoạt động của game và các client
- Chơi với máy (AI)
Trang 18- Chương trình cờ vua hai người bao gồm 1 server và các client, các Clientmuốn chơi thì phải đăng ký tới Server.
- Mỗi một ván cờ sẽ bao gồm hai người chơi trên bàn cờ, các client giao tiếpvới nhau thông qua một Server
- Server cờ vua sẽ đảm nhận việc giao tiếp giữa các client, server này sẽ trả
về một danh sách người dùng đã đăng ký chơi khi có yêu cầu người chọnchơi từ client
- Khi 2 người chơi bắt đầu chơi thì Server sẽ gửi bàn cờ về cho 2 client hiểnthị và Server sẽ chịu trách nhiệm truyền qua lại bàn thờ cho 2 client khi bàn
cờ được cập nhật
Chương trình bao gồm 4 package chính:
- Gamechess gồm các lớp chính là Boardchess.java (hiển thị bàn cờ),
Crown.java (gọi và hiển thị từng quân cờ trên bàn cờ), Client.java (fileClient gửi dữ liệu đến Server), PlayOnline.java( Khởi tạo chức năng chơionline giữa các client) và Main.java để chạy chương trình
- Piece bao gồm các lớp chứa chức năng và nước từng quân cờ bao gồm
King, Queen, Knight, Rook, Bishop, Pawn
- Server gồm 2 lớp Server.java và ServerThread nhằm khởi tạo một server
và cho phép nhiều client có thể truy cập vào server
- AI bao gồm file AI cho phép người chơi có thể chơi với máy.
3.2 Triển khai viết chương trình
Dựa vào sơ đồ thuật toán ở trên, nhóm tiến hành viết code xây dựng ứng dụng.Đầu tiên chúng ta triển khai viết chương trình tạo server với IP được lấy từ thiết bị
và một cổng Port cấp sẵn
Trang 19Hình 3.10: Hàm khởi tạo server
Server được khởi tạo với địa chỉ IP được cấp từ thiết bị và cổng Port đã cấp sẵn từtrước
Khởi tạo một file client nhằm nhận dữ liệu server gửi đến và để gửi dữ liệu đếnserver thông qua phương thức InputStream và OutputStream
Trang 20Hình 3.11: Client.java
Trang 21Khởi tạo hàm BoardChess.java để tạo bàn cờ 8x8
Trang 23Trong package piece ta lần lượt khởi tạo hàm chứa chức năng của từng quân cở
với 2 màu đen trắng:
Hình 3.13: Lần lượt thiết kế chức năng và nước đi của từng quân cờ
Trang 24Tạo một lớp Crown để gọi tất cả các quân cờ lên bàn cờ
Hình 3.14: Hàm gọi các quân cờ và set sự kiện cho từng nút - quân cờ
Tạo một giao diện kết nối trong lớp Connect.java nhằm mục đích kết nối đến server
Trang 25Khi người chơi ấn nút OK, chương trình sẽ gọi hàm Connect() để kết nối đến server với các thông số như địa chỉ IP để kết nối server, port.
Hàm Connect() có nhiệm vụ kết nối đến server thông qua socket qua port được định nghĩa và nó sẽ gửi thông tin của user hiện tại lên server thông qua phương thức OutputStream Hàm này cũng có nhiệm vụ yêu cầu server gửi danh sách người đã kết nối về cho client hiện tại
Tại lớp PlayOnline.java, tạo một giao diện cùng với chức năng hiển thị các client
đã kết nối hiện tại vào server, cùng với 2 button CHALLENGE và SURRENDER
Hình 3.16: Giao diện hiển thị các client đang kết nối trong server
Trang 26Hình 3.17: Hàm kiểm tra và hiển thị kết quả
Chương 4 Triển khai và đánh giá kết quả
4.1 Kết quả thực hiện các chức năng
Trang 27Hình 4.18 Giao diện trang chủ
4.1.2 Bàn cờ và gameplay
Hình 4.19 Bàn cờ và gameplay
Trang 284.1.3 Các client kết nối với nhau
Hình 4.20 Hiển thị các id đang hoạt động và các hành động
Khi kết nối thành công, bảng console sẽ hiển thị trạng thái kết nối giữa các client
Hình 4.21 Chấp nhận lời mời
4.1.4 Kiểm tra thắng thua
Trò chơi sẽ kết thúc khi một trong 2 bên chịu thua và nhấn vào nút SURRENDER.Khi ấn vào, một thông báo sẽ được hiện ra và đưa người chơi trở lại giao diện chính
Trang 29- Cho phép kết nối các client đến server
- Hiểu được lý thuyết về giao thức TCP/IP và xây dựng chương trình Server– Client
4.3 Hạn chế
Các mặt hạn chế còn tồn tại của ứng dụng như:
- Giao diện chưa thực sự tối ưu
- Tốc độc xử lý chưa cao
- Vẫn còn ít tính năng
- Khả năng kết nối chưa được ổn định
4.4 Hướng phát triển
- Cải thiện tốc xử lý của game
- Cải thiện giao diện đồ họa, hình ảnh của game
DANH MỤC TÀI LIỆU THAM KHẢO
Trang 30Tiếng Việt:
1 Đồ án tốt nghiệp: Tìm hiểu về Socket và phương thức TCP(Nguồn Internet)
Tiếng Anh:
2 Wikipedia TCP/IP