BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH
CÔNG TRÌNH NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
XÂY DỰNG MODULE HỖ TRỢ HAI CHƯƠNG TRÌNH MÁY TÍNH THI ĐẤU CỜ CARO TỰ ĐỘNG
MÃ SỐ: SV2020-09
S K C 0 0 7 3 6 3
Tp. Hồ Chí Minh, tháng 10/2020
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TP.HCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
XÂY DỰNG MODULE HỖ TRỢ HAI CHƯƠNG TRÌNH
MÁY TÍNH THI ĐẤU CỜ CARO TỰ ĐỘNG
Mã số đề tài: SV2020-09
Chủ nhiệm đề tài
Nguyễn Huỳnh Phúc
TP. Hồ Chí Minh, Tháng 10/2020
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
BÁO CÁO TỔNG KẾT
ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN
XÂY DỰNG MODULE HỖ TRỢ HAI CHƯƠNG TRÌNH
MÁY TÍNH THI ĐẤU CỜ CARO TỰ ĐỘNG
Mã số đề tài: SV2020-09
Thuộc nhóm ngành khoa học: Công nghệ thông tin
SV thực hiện: Nam, Nữ:
Nguyễn Huỳnh Phúc (Chủ nhiệm) Nam
Nam Lê Hồng Đạo
Nam Phạm Thái Dương
Dân tộc: Kinh
Lớp: 171101, 17910 Khoa: CNTT Năm thứ: 3 Số năm đào tạo: 4
Ngành học: Công nghệ thông tin
Người hướng dẫn: ThS. Trần Công Tú
TP. Hồ Chí Minh, 10/2020
CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập - Tự do - Hạnh phúc
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ THÔNG TIN
BẢN GIẢI TRÌNH CHỈNH SỬA BÁO CÁO TỔNG KẾT ĐỀ TÀI NCKH SINH VIÊN
1. Tên đề tài: Xây dựng module hỗ trợ hai chương trình máy tính thi đấu cờ caro tự động
2. Mã số đề tài: SV2020-09
3. Họ và tên chủ nhiệm: Nguyễn Huỳnh Phúc
4. Họ và tên GVHD: Trần Công Tú
5. Đơn vị công tác: Khoa Công nghệ thông tin
6. Giải trình chỉnh sửa báo cáo tổng kết đề tài:
Không có chỉnh sửa
Giảng viên hướng dẫn (Ký và họ tên)
Tp. HCM, ngày tháng năm Chủ nhiệm đề tài (Ký và họ tên)
MỤC LỤC
MỤC LỤC ............................................................................................................................ 3
DANH MỤC NHỮNG MỤC VIẾT TẮT ............................................................................ 6
DANH MỤC CÁC HÌNH VẼ .............................................................................................. 7
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI .................................................... 9
MỞ ĐẦU ............................................................................................................................ 11
1. Tổng quan tình hình nghiên cứu ........................................................................... 11
2. Lý do chọn đề tài ................................................................................................... 11
3. Mục tiêu đề tài ...................................................................................................... 12
3
4. Phương pháp nghiên cứu ...................................................................................... 12
5. Đối tượng và phạm vi nghiên cứu ........................................................................ 13
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT ................................................................................... 14
1.1. Mạng cục bộ (Local Network Area) ..................................................................... 14
1.2. Mô hình Client – Server ........................................................................................ 15
1.3. Socket .................................................................................................................... 19
1.4. Database (Microsoft SQL Server) ........................................................................ 21
1.5. WPF (Windows Presentation Foundation) ........................................................... 22
1.6. .NET Framework .................................................................................................. 24
CHƯƠNG 2: XÂY DỰNG PHẦN MỀM .......................................................................... 25
1. Xác định yêu cầu ................................................................................................... 25
2. Xây dựng giao diện phần mềm ............................................................................. 26
2.1. Xây dựng giao diện của chương trình Server (Hình 8) ................................. 26
2.2. Xây dựng giao diện của chương trình Client (Hình 29) ................................ 27
CHƯƠNG 3: CÁC KẾT QUẢ NGHIÊN CỨU ................................................................. 28
3.1. Chương trình Server .............................................................................................. 28
3.1.1. Màn hình Trang chủ .................................................................................... 28
3.1.2. Màn hình Tạo tài khoản mới ....................................................................... 34
3.1.3. Màn hình Tường thuật lại trận đấu ............................................................. 40
3.2. Chương trình Client .............................................................................................. 43
3.2.1. Màn hình Trang chủ .................................................................................... 43
3.2.2. Màn hình Đăng nhập .................................................................................. 45
3.3. Một số đoạn code quan trọng ................................................................................ 47
CHƯƠNG 4: ĐÁNH GIÁ .................................................................................................. 51
4
KẾT LUẬN VÀ KIẾN NGHỊ ............................................................................................ 52
TÀI LIỆU THAM KHẢO .................................................................................................. 53
PHỤ LỤC ........................................................................................................................... 54
5
DANH MỤC NHỮNG MỤC VIẾT TẮT
- CNTT: Công nghệ thông tin
- CPU: Central Processing Unit (Bộ xử lý trung tâm)
- DBMS: Database Management System (Hệ quản trị cơ sở dữ liệu)
- DSL: Digital Subcriber Line (kênh thuê bao số)
- GIS: Geographic Information System (Hệ thống thông tin địa lý)
- IP: Internet Protocol (Giao thức mạng)
- IPC: Inter Process Communication
- LAN: Local Area Network (Mạng máy tính cục bộ)
- MAN: Metropolitan Area Network (Mạng máy tính đô thị)
- NIC: Network Interface Card (Card giao tiếp mạng)
- SQL: Structured Query Language (Ngôn ngữ truy vấn dữ liệu)
- SV: Sinh viên
- TCP: Transmission Control Protocol (Giao thức vận chuyển truyền vận)
- VPN: Virtual Private Network (Mạng riêng ảo)
- WAN: Wide Area Network (Mạng máy tính diện rộng)
- WPF: Windows Presentation Foundation
- XAML: eXtensible Application Markup Language (Ngôn ngữ đánh dấu ứng dụng
mở rộng được)
- XBAP: XAML Browser Applications (Ứng dụng trình duyệt XAML)
6
DANH MỤC CÁC HÌNH VẼ
Hình 1: Sơ đồ Mạng LAN .................................................................................................. 14
Hình 2: Mô hình Client - Server ......................................................................................... 15
Hình 3: Hoạt động của mô hình Client - Server ................................................................. 17
Hình 4: Giao thức Stream Socket ....................................................................................... 20
Hình 5: Database ................................................................................................................ 21
Hình 6: SQL (Structured Query Language) ....................................................................... 21
Hình 7: WPF ....................................................................................................................... 22
Hình 8: Màn hình trang chủ ................................................................................................ 28
Hình 9: Thanh hiển thị những người chơi đã kết nối với Server........................................ 29
Hình 10: Thanh công cụ ..................................................................................................... 30
Hình 11: Khu vực hiển thị các trận đấu .............................................................................. 31
Hình 12: Thông tin của hai người chơi trong trận đấu ....................................................... 32
Hình 13: Tuỳ chọn số lượng trận đấu sẽ bắt đầu ................................................................ 33
Hình 14: Nút Play - Bắt đầu chơi dựa trên số lượng trận đấu đã lựa chọn ........................ 33
Hình 15: Nút Replay - Sẽ hiển thị Cửa sổ Tường thuật trận đấu ....................................... 34
Hình 16: Màn hình Tạo tài khoản mới ............................................................................... 34
Hình 17: Ô nhập thông tin tài khoản của người chơi ......................................................... 35
Hình 18: Ô nhập thông tin mật khẩu của người chơi ......................................................... 35
Hình 19: Nút tạo tài khoản mới .......................................................................................... 36
Hình 20: Màn hình Tạo trận đấu mới ................................................................................. 36
Hình 21: Thanh hiển thị danh sách các người chơi ............................................................ 37
Hình 22: Ô lựa chọn số lượng trận dấu .............................................................................. 37
Hình 23: Ô chọn bật/ tắt Luật chặn hai đầu trong game Caro ............................................ 38
Hình 24: Ô thông tin của hai người chơi ............................................................................ 39
Hình 25: Nút tạo mới .......................................................................................................... 39
Hình 26: Màn hình Tường thuật trận đấu ........................................................................... 40
Hình 27: Ô thông tin của hai người chơi ............................................................................ 41
Hình 28: Ô hiển thị trận đấu ............................................................................................... 42 7
Hình 29: Màn hình Trang chủ ............................................................................................ 43
Hình 30: Trạng thái kết nối của người chơi đến Server ..................................................... 43
Hình 31: Nút đăng nhập lại ................................................................................................ 44
Hình 32: Ô dùng để điền đường dẫn của Chương trình AI mà người chơi thiết kế ........... 44
Hình 33: Màn hình Đăng nhập ........................................................................................... 45
Hình 34: Ô nhập địa chỉ IP của Server mà người chơi muốn kết nối ................................ 45
Hình 35: Ô nhập tài khoản và mật khẩu của người chơi và nút đăng nhập ....................... 46
Hình 36: Màn hình chờ sau khi ấn nút đăng nhập .............................................................. 46
8
BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐH SƯ PHẠM KỸ THUẬT TPHCM
THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI
1. Thông tin chung:
- Tên đề tài: Xây dựng module hỗ trợ hai chương trình máy tính thi đấu cờ caro tự động
- Chủ nhiệm đề tài: Nguyễn Huỳnh Phúc Mã số SV: 17110350
- Lớp: 17910 Khoa: Công nghệ thông tin
- Thành viên đề tài:
STT Họ và tên MSSV Lớp Khoa
1 Phạm Thái Dương 17110273 171101 Công nghệ thông tin
2 Lê Hồng Đạo 17110276 171101 Công nghệ thông tin
- Người hướng dẫn: ThS. Trần Công Tú
2. Mục tiêu đề tài: Xây dựng module hỗ trợ 2 chương trình máy tính thi đấu cờ caro tự
động một cách thống nhất, công bằng. Ứng dụng vào để chấm điểm bài tập về lập trình
game Caro. Tạo ra một sân chơi trong lĩnh vực lập trình, có thể tạo ra một cuộc thi học thuật
thi đấu Caro giữa nhiều đối tượng khác nhau
3. Tính mới và sáng tạo: Dự án này mang lại lợi ích lớn trong môi trường giảng dạy, tổ
chức các cuộc thi học thuật liên quan đến lĩnh vực công nghệ thông tin. Khuyến khích sinh
viên làm quen với trí tuệ nhân tạo, ứng dụng vào lập trình trò chơi caro tự động và so sánh
kết quả với nhau.
4. Kết quả nghiên cứu: Xây dựng được module có khả năng kết nối 2 máy, giúp 2 chương
trình có thể thi đấu. Client có khả năng tương tác với chương trình thi đấu và gửi thông tin
về cho Server. Server có khả năng tổng hợp các kết nối, cài đặt trận đấu. Cung cấp
9
framework để người dùng lập trình chương trình thi đấu. Server có khả năng lưu lại kết
quả, phục hồi trạng thái trận đấu nếu có sự cố xảy ra như mất kết nối, mất điện,...
5. Đóng góp về mặt giáo dục và đào tạo, kinh tế - xã hội, an ninh, quốc phòng và khả
năng áp dụng của đề tài: Dự án này mang lại lợi ích lớn trong môi trường giảng dạy, tổ
chức các cuộc thi học thuật liên quan đến lĩnh vực công nghệ thông tin: giảm chi phí tổ
chức, khuyến khích sinh viên làm quen với trí tuệ nhân tạo, ứng dụng vào lập trình trò chơi
caro tự động và so sánh kết quả với nhau.
6. Công bố khoa học của SV từ kết quả nghiên cứu của đề tài (ghi rõ tên tạp chí nếu có)
hoặc nhận xét, đánh giá của cơ sở đã áp dụng các kết quả nghiên cứu (nếu có): không có
Ngày tháng năm
SV chịu trách nhiệm chính
thực hiện đề tài
(kí, họ và tên)
Nhận xét của người hướng dẫn về những đóng góp khoa học của SV thực hiện đề tài
(phần này do người hướng dẫn ghi): ...................................................................................
...............................................................................................................................................
...............................................................................................................................................
...............................................................................................................................................
Ngày tháng năm
Người hướng dẫn
(kí, họ và tên)
10
MỞ ĐẦU
1. Tổng quan tình hình nghiên cứu
- Trong nước: Hiện nay, có khá nhiều phần mềm chơi caro trên mạng, hầu hết là
các phần mềm cho phép người chơi với người hay là người chơi với máy như
phần mềm đánh caro qua mạng LAN 2 người chơi của nhóm HowKteam, hay
game cờ caro qua mạng LAN bằng viết bằng Python của nhóm CODELEARN…
Nhưng dĩ nhiên các phần mềm trên đều chỉ cho phép hai người chơi thi đấu với
nhau qua mạng LAN nên nó khó có thể sử dụng để tạo ra sân chơi để người chơi
sáng tạo và thi đấu. Hầu hết các cuộc thi cờ caro trên cả nước đều diễn ra trực
tiếp trên giấy như cuộc thi cờ caro của FPT Software.
Trên giao diện mobile cũng ngày càng có nhiều ứng dụng cho phép người
chơi thi đấu caro với nhau hoặc thi đấu với máy ở các mức độ khó khác nhau.
Nhưng chúng ta hãy nghĩ đến việc thay vì người đấu với người hay người đấu
với máy thì có thể làm một mudule để cho phép hai chương trình máy tính có thể
thi đấu với nhau hay không? Qua đó, có thể kiểm tra khả năng lập trình của người
tham gia để tạo ra các chương trình thông minh.
Qua ý tưởng đó, nhóm đang nghiên cứu về việc xây dựng module để hỗ trợ
hai chương trình máy tính thi đấu cờ caro tự động, theo nhóm thì phần mềm này
hiện nay chưa có ở Việt Nam.
- Ngoài nước: Không có dữ liệu về tình hình nghiên cứu ở nước ngoài.
2. Lý do chọn đề tài
Trong những năm gần đây, cùng với sự phát triển của công nghệ thông tin.
Nền kinh tế thế giới đang bước vào giai đoạn kinh tế tri thức. Để bắt kịp thời đại ở
Việt Nam hiện nay công nghệ thông tin cũng đã được nghiên cứu và ứng dụng rộng
rãi trong nhiều lĩnh vực, đặc biệt là trong lĩnh vực phần mềm hay lập trình ứng dụng
và đặc biệt là trí tuệ nhân tạo.
11
Và trong ngành công nghệ thông tin, đặc biệt trong môi trường trường học
thì một cuộc thi vừa có tính giải trí vừa giúp sinh viên có sân chơi để rèn luyện bản
thân và áp dụng những gì được học là rất cần thiết. Hiện nay, có khá nhiều các cuộc
thi offline được tổ chức đối kháng giữa những người chơi thi đấu trực tiếp với nhau.
Nhưng trong thời đại trí tuệ nhân tạo phát triển thì các cuộc thi lập trình cho các
chương trình máy tính thi đấu với nhau là một trong những việc hết sức quan trọng.
Thế nhưng trên thực tế hiện nay các module cho phép tổ chức các cuộc thi như thế
này khá ít và nếu có thì việc tổ chức hết sức phức tạp. Từ đó, nhóm quyết định tạo
ra một chương trình để đáp ứng nhu cầu này. Và cuộc thi đơn giản và hiệu quả nhất
có thể kể đến là cuộc thi cờ caro, nó vừa dễ thực hiện vừa có thể thể hiện được khả
năng lập trình của người chơi, ai là người lập trình ra được chương trình thông minh
hơn và biết đâu sẽ có những chương trình có thể thắng được con người. Qua những
lý do trên nhóm thực hiện đã quyết định chọn đề tài làm sao để tổ chức kì thi caro
cho các chương trình máy tính thi đấu với nhau, tạo môi trường thống nhất, công
bằng.
3. Mục tiêu đề tài
- Xây dựng module hỗ trợ 2 chương trình máy tính thi đấu cờ caro tự động một cách
thống nhất, công bằng.
- Qua đó, giúp cho công việc giảng dạy của các giảng viên được dễ dàng hơn. Ứng
dụng vào để chấm điểm bài tập về lập trình game Caro. Tạo ra một sân chơi trong
lĩnh vực lập trình, có thể tạo ra một cuộc thi học thuật thi đấu Caro giữa nhiều đối
tượng khác nhau.
- Đưa module áp dụng vào môi trường trường học để tổ chức các cuộc thi trong thực
tế.
4. Phương pháp nghiên cứu
12
- Phương pháp nghiên cứu lý thuyết: Nghiên cứu lý thuyết cũng như cách sử dụng các
công nghệ để có thể áp dụng để thực hiện đề tài như: .NET Framwork, Socket,
WPF,…
- Phương pháp phi thực nghiệm: Tiếp xúc trực tiếp với sinh viên ngành công nghệ
thông tin để thu thập thông tin cũng như nhu cầu của sinh viên thông qua việc quan
sát trực tiếp
- Phương pháp thực nghiệm: Trong quá trình thực hiện đề tài nhóm liên tục đưa ra các
sản phẩm demo thực nghiệm trong thực tế (đưa cho các bạn sinh viên ngành công
nghệ thông tin sử dụng thử)
- Phương pháp chuyên gia: Tham khảo ý kiến, hướng dẫn từ các thầy cô trong trường
để hoàn thiện dự án
5. Đối tượng và phạm vi nghiên cứu
Đối tượng nghiên cứu: Xây dựng module sử dụng kết nội cục bộ (LAN) để hai
chương trình máy tính thi đấu cờ caro với nhau sử dụng ngôn ngữ lập trình C#.
Phạm vi nghiên cứu: Trường Đại học Sư phạm kỹ thuật thành phố Hồ Chí Minh
mà chủ yếu là sinh viên khoa Công nghệ thông tin.
13
CHƯƠNG 1: CƠ SỞ LÝ THUYẾT
1.1. Mạng cục bộ (Local Network Area)
Local Area Network (LAN): là một hệ thống mạng dùng để kết nối các máy tính
trong một phạm vi nhỏ (nhà ở, phòng làm việc, trường học, …). Các máy tính trong mạng
LAN có thể chia sẻ tài nguyên với nhau, mà điển hình là chia sẻ tập tin, máy in, máy quét
và một số thiết bị khác. [2]
Một mạng LAN tối thiểu cần có máy
chủ (server), các thiết bị ghép nối (Repeater,
Hub, Switch, Bridge), máy tính con (client),
card mạng (Network Interface Card – NIC)
và dây cáp (cable) để kết nối các máy tính
lại với nhau. Trong thời đại của hệ điều hành
MS-DOS, máy chủ mạng LAN thường sử
dụng phần mềm Novell NetWare, tuy nhiên
Hình 1: Sơ đồ Mạng LAN
điều này đã trở nên lỗi thời hơn sau khi
Windows NT và Windows for Workgroups
xuất hiện. Ngày nay hầu hết máy chủ sử dụng hệ điều hành Windows, và tốc độ mạng LAN
có thể lên đến 10 Mbps, 100 Mbps hay thậm chí là 1 Gbps.
Mặc dầu ngày nay mạng Ethernet chuyển đổi là giao thức thông dụng nhất dùng
trong tầng liên kết dữ liệu và IP là giao thức thông dụng nhất trong tầng Network, rất nhiều
sự lựa chọn khác nhau đã và đang được sử dụng, và một vài trong số đó trở nên phổ biến
trong những lĩnh vực thích hợp. Mạng LAN nhỏ hơn gồm có một hoặc vài liên kết chuyển
mạch tới những mạng khác – thường với một liên kết tới một bộ định tuyến, modem cáp,
hay DSL modem cho truy nhập Internet.
Những mạng LAN lớn hơn được mô tả bởi người dùng với những đường dẫn dư
thừa và chuyển đổi sử dụng giao thức giải thuật cây để ngăn chặn vòng lặp, khả năng của
chúng để điều khiển các loại giao thông khác nhau thông qua chất lượng dịch vụ (QoS), và
cô lập giao thông qua VLANs. Mạng LAN lớn hơn cũng bao gồm nhiều và đa dạng các
14
thiết bị như bộ chuyển đổi, tường lửa, bộ định tuyến, bộ cân bằng tải, cảm biến và hơn thế
nữa.
LAN có thể có liên kết với những mạng cục bộ khác thông qua đường thuê bao, dịch
vụ thuê bao, hoặc bằng "đường hầm" thông qua mạng Internet sử dụng công nghệ VPN.
Tùy thuộc vào cách tạo ra và bảo đảm các liên kết, và độ rộng địa lý của mạng, hệ các mạng
LAN này có thể trở thành Mạng liên kết chủ (MAN) hoặc Mạng liên kết diện rộng (WAN),
hoặc một phần của Mạng toàn cầu.
1.2. Mô hình Client – Server
Client/Server: là mô hình tổng quát nhất, trên thực tế thì một server có thể được nối tới
nhiều server khác nhằm làm việc hiệu quả và nhanh hơn. Khi nhận được 1 yêu cầu từ client,
server này có thể gửi tiếp yêu cầu vừa nhận được cho server khác ví dụ như database server
Hình 2: Mô hình Client - Server
vì bản thân nó không thể xử lý yêu cầu này được. Máy server có thể thi hành các nhiệm vụ
đơn giản hoặc phức tạp. Ví dụ như một máy chủ trả lời thời gian hiện tại trong ngày, khi
một máy client yêu cầu lấy thông tin về thời gian nó sẽ phải gửi một yêu cầu theo một tiêu 15
chuẩn do server định ra, nếu yêu cầu được chấp nhận thì máy server sẽ trả về thông tin mà
client yêu cầu. Có rất nhiều các dịch vụ server trên mạng nhưng nó đều hoạt động theo
nguyên lý là nhận các yêu cầu từ client sau đó xử lý và trả kết quả cho client yêu cầu. Thông
thường chương trình server và client được thi hành trên hai máy khác nhau. Cho dù lúc nào
server cũng ở trạng thái sẵn sàng chờ nhận yêu cầu từ client nhưng trên thực tế một tiến
trình liên tác qua lại (interaction) giữa client và server lại bắt đầu ở phía client, khi mà client
gửi tín hiệu yêu cầu tới server. Các chương trình server thường đều thi hành ở mức ứng
dụng (tầng ứng dụng của mạng). Sự thuận lợi của phương pháp này là nó có thể làm việc
trên bất cứ một mạng máy tính nào có hỗ trợ giao thức truyền thông chuẩn cụ thể ở đây là
giao thức TCP/IP. Với các giao thức chuẩn này cũng giúp cho các nhà sản xuất có thể tích
hợp nhiều sản phẩm khác nhau của họ lên mạng mà không gặp phải khó khăn gì. [3]
Với các chuẩn này thì các chương trình server cho một dịch vụ nào đấy có thể thi
hành trên một hệ thống chia sẻ thời gian (timesharing system) với nhiều chương trình và
dịch vụ khác hoặc nó có thể chạy trên chính một máy tính các nhân bình thường. Có thể có
nhiều chương server cùng làm một dịch vụ, chúng có thể nằm trên nhiều máy tính hoặc một
máy tính. Với mô hình trên chúng ta nhận thấy rằng mô hình client/server chỉ mang đặc
điểm của phần mềm không liên quan gì đến phần cứng mặc dù trên thực tế yêu cầu cho một
máy server là cao hơn nhiều so với máy client. Lý do là bởi vì máy server phải quản lý rất
nhiều các yêu cầu từ các clients khác nhau trên mạng. Ưu và nhược điểm chính Có thể nói
rằng với mô hình client/server thì mọi thứ dường như đều nằm trên bàn của người sử dụng,
nó có thể truy cập dữ liệu từ xa (bao gồm các công việc như gửi và nhận file, tìm kiếm
thông tin,...) với nhiều dịch vụ đa dạng mà mô hình cũ không thể làm được. Mô hình
client/server cung cấp một nền tảng lý tưởng cho phép tích hợp các kỹ thuật hiện đại như
mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ thông tin địa lý (GIS)... Một trong
những vấn đề nảy sinh trong mô hình này đó là tính an toàn và bảo mật thông tin trên mạng.
Do phải trao đổi dữ liệu giữa 2 máy ở 2 khu vực khác nhau cho nên dễ dàng xảy ra
hiện tượng thông tin truyền trên mạng bị lộ.
16
Hình 3: Hoạt động của mô hình Client - Server
Client: Trong mô hình client/server, người ta còn định nghĩa cụ thể cho một máy client là
một máy trạm mà chỉ được sử dụng bởi 1 người dùng với để muốn thể hiện tính độc lập
cho nó. Máy client có thể sử dụng các hệ điều hành bình thường như Win9x, DOS, OS/2...
Bản thân mỗi một client cũng đã được tích hợp nhiều chức năng trên hệ điều hành mà nó
chạy, nhưng khi được nối vào một mạng LAN, WAN theo mô hình client/server thì nó còn
có thể sử dụng thêm các chức năng do hệ điều hành mạng (NOS) cung cấp với nhiều dịch
vụ khác nhau (cụ thể là các dịch vụ do các server trên mạng này cung cấp), ví dụ như nó có
thể yêu cầu lấy dữ liệu từ một server hay gửi dữ liệu lên server đó... Thực tế trong các ứng
dụng của mô hình client/server, các chức năng hoạt động chính là sự kết hợp giữa client và
server với sự chia sẻ tài nguyên, dữ liệu trên cả hai máy Vai trò của client Trong mô hình
client/server, client được coi như là người sử dụng các dịch vụ trên mạng do một hoặc nhiều
máy chủ cung cấp và server được coi như là người cung cấp dịch vụ để trả lời các yêu cầu
của các clients. Điều quan trọng là phải hiểu được vai trò hoạt động của nó trong một mô
hình cụ thể, một máy client trong mô hình này lại có thể là server trong một mô hình khác.
Ví dụ cụ thể như một máy trạm làm việc như một client bình thường trong mạng LAN
nhưng đồng thời nó có thể đóng vai trò như một máy in chủ (printer server) cung cấp dịch 17
vụ in ấn từ xa cho nhiều người khác (clients) sử dụng. Client được hiểu như là bề nổi của
các dịch vụ trên mạng, nếu có thông tin vào hoặc ra thì chúng sẽ được hiển thị trên máy
client.
Server: Còn được định nghĩa như là một máy tính nhiều người sử dụng (multiuser
computer).
Vì một server phải quản lý nhiều yêu cầu từ các client trên mạng cho nên nó hoạt
động sẽ tốt hơn nếu hệ điều hành của nó là đa nhiệm với các tính năng hoạt động độc lập
song song với nhau như hệ điều hành UNIX, WINDOWS... Server cung cấp và điều khiển
các tiến trình truy cập vào tài nguyên của hệ thống. Các ứng dụng chạy trên server phải
được tách rời nhau để một lỗi của ứng dụng này khô ng làm hỏng ứng dụng khác. Tính đa
nhiệm đảm bảo một tiến trình không sử dụng toàn bộ tài nguyên hệ thống. Vai trò của
server. Như chúng ta đã bàn ở trên, server như là một nhà cung cấp dịch vụ cho các clients
yêu cầu tới khi cần, các dịch vụ như cơ sở dữ liệu, in ấn, truyền file, hệ thống... Các ứng
dụng server cung cấp các dịch vụ mang tính chức năng để hỗ trợ cho các hoạt động trên các
máy clients có hiệu quả hơn. Sự hỗ trợ của các dịch vụ này có thể là toàn bộ hoặc chỉ một
phần thông qua IPC. Để đảm bảo tính an toàn trên mạng cho nên server này còn có vai trò
như là một nhà quản lý toàn bộ quyền truy cập dữ liệu của các máy clients, nói cách khác
đó là vai trò quản trị mạng. Có rất nhiều cách thức hiện nay nhằm quản trị có hiệu quả, một
trong những cách đang được sử dụng đó là dùng tên Login và mật khẩu.
18
1.3. Socket
Socket: là điểm cuối end-point trong liên kết truyền thông hai chiều (two-way
communication) biểu diễn kết nối giữa Client – Server. Các lớp Socket được ràng buộc với
một cổng port (thể hiện là một con số cụ thể) để các tầng TCP (TCP Layer) có thể định
danh ứng dụng mà dữ liệu sẽ được gửi tới. [4]
Socket hoạt động thông qua các tầng TCP hoặc TCP Layer định danh ứng dụng, từ
đó truyền dữ liệu thông qua sự ràng buộc với một cổng port
Socket là giao diện lập trình ứng dụng mạng được dùng để truyền và nhận dữ liệu
trên internet. Giữa hai chương trình chạy trên mạng cần có một liên kết giao tiếp hai chiều,
hay còn gọi là two-way communication để kết nối 2 process trò chuyện với nhau. Điểm
cuối (endpoint) của liên kết này được gọi là socket.
Một chức năng khác của socket là giúp các tầng TCP hoặc TCP Layer định danh
ứng dụng mà dữ liệu sẽ được gửi tới thông qua sự ràng buộc với một cổng port (thể hiện là
một con số cụ thể), từ đó tiến hành kết nối giữa client và server.
Chức năng của socket: kết nối giữa client và server thông qua TCP/IP và UDP để truyền
và nhận giữ liệu qua Internet. Giao diện lập trình ứng dụng mạng này chỉ có thể hoạt động
khi đã có thông tin về thông số IP và số hiệu cổng của 2 ứng dụng cần trao đổi dữ liệu cho
nhau.
Hai ứng dụng cần truyền thông tin phải đáp ứng điều kiện sau thì socket mới có thể hoạt
động:
- 2 ứng dụng có thể nằm cùng trên một máy hoặc 2 máy khác nhau
- Trong trường hợp 2 ứng dụng cùng nằm trên một máy, số hiệu cổng không được
trùng nhau.
19
Stream Socket: Dựa trên giao thức TCP( Tranmission Control Protocol), việc truyền
dữ liệu chỉ thực hiện giữa 2 quá trình đã thiết lập kết nối. Do đó, hình thức này được
gọi là socket hướng kết nối.
- Ưu điểm: Có thể dùng để liên lạc theo mô hình client và sever. Nếu là mô hình
client /sever thì sever lắng nghe và chấp nhận từ client. Giao thức này đảm bảo
dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúng thứ tự nhờ vào cơ
chế quản lý luồng lưu thông trên mạng và cơ chế chống tắc nghẽn. Đồng thời,
mỗi thông điệp gửi phải có xác nhận trả về và các gói tin chuyển đi tuần tự.
- Hạn chế: Có một đường kết nối (địa chỉ IP) giữa 2 tiến trình nên 1 trong 2 tiến
trình kia phải đợi tiến trình kia yêu cầu kết nối.
Giao thức Stream Socket Hình 4: Giao thức Stream Socket
20
1.4. Database (Microsoft SQL Server)
Cơ sở dữ liệu (Database): là một tập hợp
các dữ liệu có tổ chức, thường được lưu trữ
và truy cập điện tử từ hệ thống máy tính.
Khi cơ sở dữ liệu phức tạp hơn, chúng
thường được phát triển bằng cách sử dụng
các kỹ thuật thiết kế và mô hình hóa chính
thức. [5]
Hệ quản lý cơ sở dữ liệu (Database
Management System - DBMS) là phần
mềm tương tác với người dùng cuối, ứng
dụng và chính cơ sở dữ liệu để thu thập và
phân tích dữ liệu. Phần mềm DBMS bao
gồm các tiện ích cốt lõi được cung cấp để
quản trị cơ sở dữ liệu. Tổng cộng của cơ sở
Hình 5: Database
dữ liệu, DBMS và các ứng dụng liên quan
có thể được gọi là "hệ thống cơ sở dữ liệu".
Thông thường thuật ngữ "cơ sở dữ liệu" cũng được sử dụng để nói đến bất kỳ DBMS, hệ
thống cơ sở dữ liệu hoặc ứng dụng nào được liên kết với cơ sở dữ liệu.
SQL (Structured Query
Language): Ngôn ngữ truy vấn
mang tính cấu trúc, là một loại
ngôn ngữ máy tính phổ biến để
tạo, sửa, và lấy dữ liệu từ một
hệ quản trị cơ sở dữ liệu quan
hệ. Ngôn ngữ này phát triển
Hình 6: SQL (Structured Query Language)
vượt xa so với mục đích ban
đầu là để phục vụ các hệ quản
trị cơ sở dữ liệu đối tượng-quan hệ. Nó là một tiêu chuẩn ANSI/ISO.
21
Microsoft SQL Server: là một hệ quản trị cơ sở dữ liệu quan hệ được phát triển bởi
Microsoft. Là một máy chủ cơ sở dữ liệu, nó là một sản phẩm phần mềm có chức năng
chính là lưu trữ và truy xuất dữ liệu theo yêu cầu của các ứng dụng phần mềm khác.
1.5. WPF (Windows Presentation Foundation)
Windows Presentation Foundation: do Microsoft phát triển, là công nghệ kế tiếp
Windows Form dùng để xây dựng các ứng dụng dành cho máy trạm chạy hệ điều hành
Windows. WPF được giới thiệu từ năm 2006 trong.NET Framework 3.0 (dưới tên gọi
Avalon), công nghệ này nhận được sự quan tâm của cộng đồng lập trình viên bởi nhiều
điểm đổi mới trong lập trình ứng dụng và khả năng xây dựng giao diện thân thiện, sinh
động. Tại Việt Nam, WPF thực sự chưa phát triển so với nhánh khác là Silverlight (WPF/E).
Hình 7: WPF
[6]
22
WPF sử dụng 2 thư viện lõi là PresentationCore và PresentationFramework để xử lý
các điều hướng, ràng buộc dữ liệu, sự kiện và quản lý giao diện. WPF dựa trên nền tảng đồ
họa là DirectX, xử lý vector, hỗ trợ gam màu rộng, cho phép tùy biến giá trị opacity hay
tạo gradient một cách dễ dàng, cho phép tạo ảnh không gian 2 chiều hoặc 3 chiều. Thư viện
thực thi của WPF tự động tính toán và tận dụng tài nguyên của hệ thống một cách tối ưu để
giảm tải cho CPU.
Ngoài ra, WPF hỗ trợ tốt hơn Winform trong việc xử lý hình ảnh, âm thanh, video,
quản lý phông chữ, quản lý hiển thị và chỉnh sửa văn bản. Các control trong WPF có thể
được lồng ghép linh động để tạo ra giao diện do được viết bằng XAML. Một ứng dụng
WPF có thể được xây dựng để chạy độc lập dưới dạng mở rộng EXE hoặc đóng gói với
phần mở rộng là XBAP để có thể tích hợp lên website.
Trước khi WPF ra đời, việc tạo giao diện người dùng theo những yêu cầu mô tả ở ví
dụ trên đòi hỏi sử dụng rất nhiều công nghệ khác nhau. Để tạo form, các control và các tính
năng kinh điển khác của một giao diện đồ họa Windows, thông thường lập trình viên sẽ
chọn Windows Forms, một phần của .NET Framework. Nếu cần hiển thị văn bản, Windows
Forms có một số tính năng hỗ trợ văn bản trực tiếp hoặc có thể sử dụng Adobe’s PDF để
hiển thị văn bản có khuôn dạng cố định.
WPF đưa ra ngôn ngữ đặc tả eXtensible Application Markup Language (XAML).
XAML định ra một tập các phần tử XML như Button, TextBox, Label…, nhằm định nghĩa
các đối tượng đồ họa tương ứng như nút bấm, hộp thoại, nhãn…, và nhờ đó cho phép mô
tả chính xác diện mạo của giao diện người dùng. Các phần tử XAML cũng chứa các thuộc
tính, cho phép thiết lập nhiều tính chất khác nhau của đối tượng đồ họa tương ứng.
Người thiết kế có thể mô tả giao diện người dùng và tương tác với nó thông qua một
công cụ, chẳng hạn như Microsoft Expression Interactive Designer. Chỉ tập trung vào việc
định ra diện mạo và cảm quan cho giao diện đồ họa WPF, công cụ này sinh các đoạn mô tả
giao diện thể hiện qua ngôn ngữ XAML. Lập trình viên sau đó sẽ nhập đoạn mô tả XAML
đó vào môi trường lập trình, chẳng hạn như Microsoft Visual Studio.
Thay vì lập trình viên phải tái tạo lại giao diện từ đầu dựa trên một ảnh tĩnh mà người
thiết kế cung cấp, bản thân các đoạn XAML này sẽ được Microsoft Visual Studio biên dịch
để tái tạo thành giao diện đồ họa đúng theo mô tả. Lập trình viên chỉ tập trung vào việc viết 23
mã trình cho giao diện được sinh ra, chẳng hạn như xử lý các sự kiện, theo những chức
năng đề ra của ứng dụng.
Việc cho phép người thiết kế và lập trình viên làm việc chung như vậy sẽ hạn chế
những lỗi phát sinh khi hiện thực hóa giao diện từ thiết kế. Thêm vào đó, nó còn cho phép
hai nhóm công tác này làm việc song song, khiến mỗi bước lặp trong quy trình phát triển
phần mềm ngắn đi và việc phản hồi được tốt hơn. Vì cả hai môi trường đều có khả năng
hiểu và sử dụng XAML, ứng dụng WPF có thể chuyển qua lại giữa hai môi trường phát
triển để sửa đổi hay bổ sung giao diện. Với tất cả những lợi điểm này, vai trò của người
thiết kế trong việc xây dựng giao diện được đặt lên hàng đầu.
1.6. .NET Framework
.NET Framework là một nền tảng lập trình và cũng là một nền tảng thực thi ứng dụng chủ
yếu trên hệ điều hành Microsoft Windows được phát triển bởi Microsoft. Các chương trình
được viết trên nền.NET Framework sẽ được triển khai trong môi trường phần mềm được
biết đến với tên Common Language Runtime. [7]
24
CHƯƠNG 2: XÂY DỰNG PHẦN MỀM
- Xây dựng chương trình Server cho phép kết nối và thi đấu giữa hai chương trình
1. Xác định yêu cầu
Client.
Nhận và quản lí các kết nối.
Tạo và cấu hình trận đấu giữa hai chương trình.
Bắt đầu và duy trì trận đấu trung thực, khách quan.
- Xây dựng chương trình Client cho phép kết nối đến Server giao tiếp với chương
Lưu và cho phép xem lại kết quả trận đấu.
trình của thí sinh.
Đăng nhập để xác định danh tính của thí sinh.
Chọn và khởi chạy chương trình của thí sinh khi thi đấu.
Giao tiếp với chương trình thi đấu và Server.
- Xây dựng tài liệu hướng dẫn thí sinh cài đặt chương trình có thể tham gia thi đấu.
Hiển thị các thông báo trạng thái.
Giới thiệu về tổng quan mô hình thi đấu và các quy tắc thi đấu.
Xây dựng các quy ước giao tiếp.
Xây dựng khung chương trình mẫu.
25
2. Xây dựng giao diện phần mềm
- Xây dựng giao diện màn hình chủ, màn hình điều hướng bao gồm:
2.1. Xây dựng giao diện của chương trình Server (Hình 8)
Thông tin cấu hình của chương trính Server (địa chỉ IP).
Thanh danh sách người chơi (Danh sách các người chơi sử dụng chương
Thông tin của người chơi.
Trạng thái kết nối của người chơi.
Nút refresh lại danh sách người chơi.
trình Client đã kết nối với chương trình Server) bao gồm:
Mỗi trận đấu bao gồm: thông tin của hai đối thủ, tỉ số của trận đấu,
Bảng danh sách các trận đấu đang diễn ra.
Nút bắt đầu trận đấu.
Nút xem lại lịch sử trận dấu.
các tùy chọn khởi chạy trận đấu,
Nút tạo trận đấu mới.
Nút tạo ra tài khoản mới cho người chơi dự thi.
Danh sách người chơi.
Các tùy chọn để khởi tạo trận đấu.
Nút thay đổi lượt chơi.
Nút khởi tạo trận đấu.
Cửa sổ tạo trận đấu mới, bao gồm:
Thông tin của hai đối thủ trong trận đấu.
Tỉ số của trận đấu.
Các tab lượt đấu của từng trận đấu.
Bàn cờ ứng với từng lượt đấu.
Nút điều chỉnh chế độ xem của trận đấu: Nút bắt đầu, tạm dừng, tua
Cửa sổ xem lại trận đấu, bao gồm:
nhanh, đi tới bước kế, quay lại bước vừa đi.
Cửa sổ tạo mới tài khoản cho người chơi, bao gồm:
26
Ô nhập tài khoản của người chơi.
Ô nhập mật khẩu của người chơi.
2.2. Xây dựng giao diện của chương trình Client (Hình 29)
- Màn hình đăng nhập của người chơi, bao gồm:
- Ô nhập địa chỉ IP của chương trình Server để kết nối.
- Ô nhập tài khoản của người chơi.
- Ô nhập mật khẩu của người chơi.
- Nút đăng nhập tài khoản.
2.3. Màn hình chính của chương trình Client
- Thanh hiển thị trạng thái kết nối của chương trình Client.
- Ô nhập đường dẫn của chương trình thi đấu của người chơi dùng để khởi chạy.
- Bảng hiển thị xác định hoạt động của người chơi: nước đi, trạng thái kết nối,
kết quả của trận đấu.
27
CHƯƠNG 3: CÁC KẾT QUẢ NGHIÊN CỨU
3.1. Chương trình Server
Hình 8: Màn hình trang chủ
3.1.1. Màn hình Trang chủ
Đây là màn hình Trang chủ khi người Quản lí bắt đầu chương trình Server. Sẽ bao gồm
các thông tin như:
28
Hình 9: Thanh hiển thị những người chơi đã kết nối với Server
Khi một người chơi kết nối đến Server thì sẽ hiển thị thông tin người chơi trên Thanh danh
sách người chơi. Thứ tự của danh sách dựa vào thời điểm kết nối của những người chơi kết
nối đến Server.
Khi người chơi đó ngắt kết nối đến Server, đồng nghĩa với việc sẽ biến mất khỏi Thanh
danh sách người chơi.
Bên cạnh đó Người quản lí có thể làm mới danh sách người chơi bằng cách nhấn nút Refresh
ở bên trên Thanh danh sách người chơi.
29
Hình 10: Thanh công cụ
Thanh công cụ sẽ gồm:
Ô hiển thị IP của Server:
Hiển thị IP của Server để Người quản lí có thể thông báo đến người chơi số IP
dùng để Client kết nối đến Server và bắt đầu các thiết lập khác.
Nút Tạo tài khoản:
Khi ấn vào nút, sẽ hiển thị cửa sổ Tạo tài khoản mới cho phép Người quản lí tạo
thêm tài khoản cho người chơi.
30
Nút Tạo trận đấu:
Khi ấn vào nút, sẽ hiển thị cửa sổ Tạo trận đấu mới cho phép Người quản lí tạo
Hình 11: Khu vực hiển thị các trận đấu
thêm 1 trận đấu mới.
Đây là khu hiển thị tất cả các trận đậu đang diễn ra. Một trận đấu sẽ hiển thị các thông tin
bao gồm:
Thông tin của hai người chơi trong trận đấu đó.
31
Hình 12: Thông tin của hai người chơi trong trận đấu
Tỉ số giữa hai người chơi.
Tuỳ chọn số lượng trận đấu sẽ bắt đầu (1 trận/ tất cả trận).
32
Hình 13: Tuỳ chọn số lượng trận đấu sẽ bắt đầu
Hình 14: Nút Play - Bắt đầu chơi dựa trên số lượng trận đấu đã lựa chọn
Nút Play: Bắt đầu chơi dựa trên số lượng trận đấu đã lựa chọn.
Nút Replay: Sẽ hiển thị Cửa sổ Tường thuật trận đấu.
33
Hình 15: Nút Replay - Sẽ hiển thị Cửa sổ Tường thuật trận đấu
Hình 16: Màn hình Tạo tài khoản mới
3.1.2. Màn hình Tạo tài khoản mới
Màn hình Tạo tài khoản cho phép người Quản lí tạo thêm một tài khoản mới cho người
chơi. Bao gồm:
Ô nhập thông tin tài khoản của người chơi.
34
Hình 17: Ô nhập thông tin tài khoản của người chơi
Hình 18: Ô nhập thông tin mật khẩu của người chơi
Ô nhập thông tin mật khẩu của người chơi.
Nút tạo tài khoản mới.
35
Hình 19: Nút tạo tài khoản mới
Hình 20: Màn hình Tạo trận đấu mới
Màn hình Tạo trận đấu cho phép người Quản lí tạo mới 1 trận dấu. Bao gồm:
Thanh hiển thị danh sách các người chơi.
36
Hình 21: Thanh hiển thị danh sách các người chơi
Người Quản lí có thể chọn được người sẽ chơi trong trận đấu bằng cách Click vào
thông tin người đó bên Thanh hiển thị danh sách người chơi.
Hình 22: Ô lựa chọn số lượng trận dấu
Ô lựa chọn số lượng trận dấu.
37
Người Quản lí có thể chọn số lượng trận đấu bằng các Click vào số tương ứng để thiết
lập trận đấu.
Hình 23: Ô chọn bật/ tắt Luật chặn hai đầu trong game Caro
Ô chọn bật/ tắt Luật chặn hai đầu trong game Caro.
Người Quản lí có thể bật/ tắt Luật chặn hai đầu bằng cách Click vào công tắc để thiết
lập trận đấu.
Ô thông tin của hai người chơi.
38
Hình 24: Ô thông tin của hai người chơi
Ô này sẽ hiển thị thông tin của từng người chơi trong trận dấu. Người Quản lí cũng có
thể chọn được thứ tự người chơi trước bằng các Click vào nút Chuyển ở góc trên bên
trái, hoặc có thể Click vào Ảnh đại diện của người muốn đi trước.
Hình 25: Nút tạo mới
Nút Tạo mới.
39
Người Quản lí Click vào nút Tạo mới khi hoàn thành xong tất cả các thiết lập của trận
đấu.
Hình 26: Màn hình Tường thuật trận đấu
3.1.3. Màn hình Tường thuật lại trận đấu
Màn hình Tường thuật lại trận đấu sẽ hiển thị lại tất cả các trận đậu mà hai người chơi đã
chơi. Có thể xem từng bước đánh, tua lại bước đánh, tua tới bước đánh, tạm dừng, và tua
tới cuối trận. Bao gồm:
40
Hình 27: Ô thông tin của hai người chơi
Ô thông tin của hai người chơi, bao gồm: Tên, tỉ sổ của trận đấu.
41
Hình 28: Ô hiển thị trận đấu
Ô hiển thị trận đấu, bao gồm nhiều tab trận đấu khác nhau. Mỗi tab sẽ có một bàn cờ, và
một thanh công cụ.
Bàn cờ có kích thước (20x20), với các nước đánh X (màu đỏ), O (màu xanh).
Thanh công cụ bao gồm:
o Nút Play/Pause để bắt đầu/tạm dừng tường thuật.
o Nút Tua nhanh để tua đến cuối trận đấu.
o Nút Next để xem bước đánh tiếp theo.
o Nút Bach để xem bước đánh trước đó.
o Nút Restart để quay lại trạng thái tường thuật ban đầu.
42
3.2. Chương trình Client
Hình 29: Màn hình Trang chủ
3.2.1. Màn hình Trang chủ
Màn hình Trang chủ bao gồm:
Hình 30: Trạng thái kết nối của người chơi đến Server
Trạng thái kết nối của người chơi đến Server. (Đã kết nối/Mất kết nối)
43
Hình 31: Nút đăng nhập lại
Nút đăng nhập lại nếu người chơi muốn đăng nhập bằng tài khoản khác.
Ô dùng để điền đường dẫn của Chương trình AI mà người chơi thiết kế. Người
chơi có thể truy cập vào thư mục của Chương trình AI bằng cách ấn nút bên
Hình 32: Ô dùng để điền đường dẫn của Chương trình AI mà người chơi thiết kế
phải.
44
Hình 33: Màn hình Đăng nhập
3.2.2. Màn hình Đăng nhập
Màn hình để người chơi đăng nhập bằng tài khoản do người Quản lí cấp để tiến hành khởi
động chương trình. Bao gồm:
Hình 34: Ô nhập địa chỉ IP của Server mà người chơi muốn kết nối
Ô nhập địa chỉ IP của Server mà người chơi muốn kết nối.
45
Hình 35: Ô nhập tài khoản và mật khẩu của người chơi và nút đăng nhập
Ô nhập tài khoản và mật khẩu của người chơi và nút đăng nhập.
Sau khi ấn nút đăng nhập sẽ hiện lên màn hình chờ.
Hình 36: Màn hình chờ sau khi ấn nút đăng nhập
46
3.3. Một số đoạn code quan trọng
Kết nối tới server:
IPAddress ip = GetIPAddress();
IPEndPoint ipe = new IPEndPoint(ip, PORT_NUMBER);
player = new TcpClient();
player.Connect(ipe);
if (!SendLoginInfomation())
break;
isConnected = true;
ignoreCounter = true;
Đọc dữ liệu từ server:
public string ReadFromStream()
{
byte[] dataTemp = new byte[SIZE_OF_BYTE];
NetworkStream stream = player.GetStream();
stream.ReadTimeout = 10000;
stream.Read(dataTemp, 0, dataTemp.Length);
string data = Encoding.ASCII.GetString(dataTemp);
return data.Substring(0, data.IndexOf("[end]"));
}
Gửi dữ liệu cho chương trình thi đấu:
public void WriteToConsole(string data)
{
if (data[0] == '-')
47
{
int signal = int.Parse(data.Substring(0, 2));
botProcess.StandardInput.WriteLine(signal);
if (signal == LOSE)
{
botProcess.StandardInput.WriteLine(data.Split(',')
[1]);
botProcess.StandardInput.WriteLine(data.Split(',')
[2]);
ShowLogClient("Bạn đã thua ván đấu");
}
}
else
{
botProcess.StandardInput.WriteLine(data.Split(',')
[0]);
botProcess.StandardInput.WriteLine(data.Split(',')
[1]);
}
}
Gửi dữ liệu cho server:
public void WriteToStream(string data)
{
byte[] dataTemp = new byte[SIZE_OF_BYTE];
48
dataTemp = Encoding.ASCII.GetBytes(data);
NetworkStream stream = player.GetStream();
stream.WriteTimeout = 10000;
stream.Write(dataTemp, 0, dataTemp.Length);
}
Kiểm tra trạng thái kết nối:
public static TcpState GetState(TcpClient tcpClient)
{
var foo = IPGlobalProperties.GetIPGlobalProperties()
.GetActiveTcpConnections()
.SingleOrDefault(x => x.LocalEndPoint.Equals
(tcpClient.Client.LocalEndPoint));
return foo != null ? foo.State : TcpState.Unknown;
}
Nhận kết nối từ client:
private void GetConnection()
{
server = new TcpListener(GetIPAddress(), 9999);
server.Start();
while (true)
{
TcpClient client = server.AcceptTcpClient();
client.Client.SetSocketOption
(SocketOptionLevel.Socket, SocketOptionName.KeepAlive,
0);
49
AddNewPlayer(client);
}
}
Gửi dữ liệu cho client:
public async Task SendDataAsync(Player player, string msg)
{
byte[] buffer = new byte[BYTES_SIZE];
buffer = Encoding.ASCII.GetBytes(msg);
NetworkStream stream = player.Client.GetStream();
stream.WriteTimeout = 10000;
await stream.WriteAsync(buffer, 0, buffer.Length);
}
Nhận dữ liệu từ client:
public async Task
{
byte[] buffer = new byte[BYTES_SIZE];
NetworkStream stream = player.GetStream();
stream.ReadTimeout = 10000;
await stream.ReadAsync(buffer, 0, buffer.Length);
string data = Encoding.ASCII.GetString(buffer);
return data.Substring(0,data.LastIndexOf("[end]"));
}
50
CHƯƠNG 4: ĐÁNH GIÁ
Sau khi hoàn thành đề tài nghiên cứu, nhóm rút ra một số đánh giá về đề tài như sau:
Ưu điểm:
- Đã xây dựng được module hỗ trợ 2 chương trình máy tính thi đấu cờ caro tự động
một cách thống nhất, công bằng với các chức năng như tạo một trận đấu tự động,
hiển thị thông tin các trận đấu,…
- Đề tài là một hướng nghiên cứu mới về việc áp dụng công nghệ thông tin vào đào
tạo tại trường, đặc biệt cho các sinh viên công nghệ thông tin hoặc các sinh viên có
hiểu biết về lập trình có sân chơi trong lĩnh vực lập trình, có thể tạo ra một cuộc thi
học thuật thi đấu Caro giữa nhiều đối tượng khác nhau.
- Mức độ hoàn thành sản phẩm so với kế hoạch đề ra: 100%
Nhược điểm:
- Tốc độ kết nối client đến server chưa được quá nhanh.
- Với tính chất, mức độ và thời gian nghiên cứu có hạn nên còn nhiều vấn đề mà nhóm
chưa thể đi sâu làm rõ.
51
KẾT LUẬN VÀ KIẾN NGHỊ
Kết luận:
- Đề tài đã hoàn thành sản phẩm đề ra và áp dụng nó trong nội bộ khoa Công nghệ
thông tin.
- Đề tài không trùng lặp với kết quả của đề tài khác và đảm bảo về chất lượng nội
dung của đề tài NCKH cấp trường.
- Đề tài đã tạo ra một module hoàn thiện để có thể áp dụng vào thực tiễn, đặc biệt là
tạo ra môi trường học tập và sân chơi rèn luyện cho sinh viên ngành công nghệ thông
tin.
- Dự án này mang lại lợi ích lớn trong môi trường giảng dạy, tổ chức các cuộc thi học
thuật liên quan đến lĩnh vực công nghệ thông tin: giảm chi phí tổ chức, rút ngắn thời
gian trong công tác chấm điểm và thực hành, có kết quả nhanh chóng và chính xác
- Đề tài sau khi hoàn thiện không thể tránh khỏi một số hạn chế và nhược điểm, nhưng
nhóm sẽ tìm cách khắc phục và hoàn thiện hơn nữa đề tài trong tương lai để có thể
đưa đề tài áp dụng rộng rãi hơn vào thực tiễn.
Kiến nghị:
- Cân nhắc áp dụng module của nhóm vào giảng dạy và tạo sân chơi cho sinh viên
ngành công nghệ thông tin.
- Tiếp tục phát triển thêm các sân chơi áp dụng công nghệ thông tin và trí tuệ nhân tạo
cho sinh viên các ngành khác để bắt kịp xu hướng của thời đại.
- Cần có thêm các nghiên cứu và hành động rõ ràng hơn từ phía nhà trường để tạo
thêm các sân chơi giúp sinh viên rèn luyện, học tập thêm mà không bị nhàm chán
với những môn học lý thuyết.
52
TÀI LIỆU THAM KHẢO
[1] Microsoft Document, https://docs.microsoft.com/vi-vn/
[2] Wikipedia,
https://vi.wikipedia.org/wiki/Local_area_network#:~:text=Local%20Area%20Network%
20(ti%E1%BA%BFng%20Anh,m%E1%BB%99t%20s%E1%BB%91%20thi%E1%BA%
BFt%20b%E1%BB%8B%20kh%C3%A1c.
[3] Wikipedia, https://vi.wikipedia.org/wiki/Client-server
[4] Matbao, https://wiki.matbao.net/socket-la-gi-khai-niem-can-biet-ve-giao-thuc-tcp-ip-
va-udp/
[5] Wikipedia,
https://vi.wikipedia.org/wiki/C%C6%A1_s%E1%BB%9F_d%E1%BB%AF_li%E1%BB
%87u
[6] Wikipedia, https://vi.wikipedia.org/wiki/Windows_Presentation_Foundation
[7] Medium, https://medium.com/@semtekcorp/net-framework-la-gi-vi-sao-no-lai-quan-
trong-trong-may-tinh-
4d101af34a81#:~:text=h%C6%A1n%20v%E1%BB%81%20n%C3%B3.-
,.,%E1%BB%A9ng%20d%E1%BB%A5ng%20web%2C%20web%20services%E2%80%
A6
53
PHỤ LỤC
HƯỚNG DẪN VIẾT CHƯƠNG TRÌNH ĐỂ CÓ THỂ THI ĐẤU CỜ CARO TỰ ĐỘNG:
Chương trình của chúng tôi là module hỗ trợ 2 chương trình máy tính thi đấu cờ caro tự
động: giúp 2 thí sinh thi đấu caro với nhau qua việc lập trình 2 chương trình máy tính (caro
máy). Sau đây là một số thông tin về chương trình thi đấu cờ caro và các quy định dùng
trong thi đấu:
- Bàn cờ dùng cho thi đấu cờ caro có kích thước 20x20 và được đánh số hàng và số
cột như sau: 20 cột được đánh số từ 0 đến 19, 20 hàng cũng được đánh số từ 0 đến
19, tọa độ 0,0 là nằm ở góc trên bên trái bàn cờ. Một nước đi được xác định bao gồm
một cặp số là tọa độ hàng và cột.
- Mỗi trận đấu bao gồm một hoặc nhiều ván đấu để phân định thắng thua tùy theo thể
lệ cuộc thi và vòng thi. Có 2 quân cờ là X và O: người đi trước trong mỗi ván đánh
quân O còn người còn lại đánh quân X.
- Người đi trước (quân O) đánh vào vị trí bất kỳ trên bàn cờ (trong chương trình
khuyến khích nước đi đầu nằm ở giữa bàn cờ nếu chiến thuật chơi không phụ thuộc
vào vị trí quân đầu). Sau đó đến lượt người tiếp theo, và cứ thế luân phiên đánh lên
bàn cờ, khi tới lượt người chơi đánh một nước đi mỗi lượt đi có giới hạn thời gian
là 5s tính từ khi nhận được nước đi tới khi tính ra được nước đi hợp lệ nếu quá 5s thì
sẽ bị xử thua. Khi một người chơi có 5 quân cờ liên tiếp trên bàn cờ theo chiều dọc,
chiều ngang hoặc đường chéo thỏa mãn luật chơi (áp dụng luật bị chặn 2 đầu hay
không) sẽ thắng. Sau mỗi ván đấu sẽ đổi lượt người đi trước (nếu có nhiều hơn một
ván đấu).
Để có thể tham gia thi đấu thì thí sinh phải lập trình một chương trình caro máy thỏa mãn
cấu trúc sau:
- Đọc nước đi của đối thủ hoặc thông tin liên quan đến trận đấu từ màn hình console:
o Một nước đi hợp lệ của đối thủ là một cặp gồm 2 số nguyên không âm, các
số nằm trong khoảng từ 0 đến 19.
o Chương trình đọc một số từ màn hình nếu số đọc được là một số không âm
thì đó chính là số thứ tự hàng mà đối thủ đánh, lúc này đọc tiếp số tiếp theo
chính là số thứ tự cột để tạo thành 1 nước đi của đối thủ.
o Nếu chương trình đọc được một số âm có nghĩa là các mã thông báo lên quan
đến trận đấu. Các mã thông báo được quy định như sau:
-1 là thông báo bắt đầu ván mới không áp dụng luật chặn 2 đầu, bạn đi
trước.
-2 là thông báo bắt đầu ván đấu mới không áp dụng luật chặn 2 đầu,
bạn là người đi sau. Khi nhận được thông báo này thì thực hiện lại việc
đọc nước đi.
-3 là thông báo bắt đầu ván mới áp dụng luật chặn 2 đầu, bạn đi trước.
-4 là thông báo bắt đầu ván mới áp dụng luật chặn 2 đầu, bạn đi sau.
-5: bạn đã giành chiến thắng ván đấu
-6: bạn đã thua ván đấu
-7: nước của bạn không hợp lệ: ngoài kích thước bàn cờ.
-8: là nước đi mới nhất của bạn trùng với các nước đi đã đi trước đó
(của bạn hoặc đối thủ).
-9: các trường hợp nước đi không hợp lệ khác
- Sau khi đọc được dữ liệu như trên thì chương trình tiến hành tính toán nước đi tiếp
theo hoặc tính toán lại nước đi mình đã đi lỗi trước đó:
o Nước đi tính toán được phải là 2 số nguyên không âm trong khoảng từ 0 đến
19. Khi tính toán phải lưu ý để tránh nước đi không hợp lệ. Trước hết phải
có các điều kiện để tạo nước đi hợp lệ(chú ý đến tọa độ, kích thước bàn cờ
và thông tin về các nước đi trước đó).
o Bạn có thể tham khảo các thuật toán tìm nước đi caro tự động thông qua
internet để chương trình có thể tính toán nước đi hợp lý nhất
o Việc tính toán nhằm mục đích đưa ra một nước đi hợp lệ và nhắm tới việc
chiến thắng (có đủ 5 quân cờ liên tiếp trên một hàng, cột hoặc chéo) hoặc
ngăn chặn nước đi chiến thắng của đối thủ.
- Sau khi tính toán được nước đi thì chương trình cho phép xuất nước đi của mình ra
màn hình console:
o Thông tin được xuất ra là 2 số nguyên không âm trong khoảng từ 0 đến 19
mỗi số nằm trên một hàng là số thứ tự hàng và cột sau khi chương trình tính
toán được. Số đầu tiên là số thứ hàng, số thứ 2 là số thứ tự cột.
- Sau khi xuất thông tin ra màn hình thì tiếp tục lại việc đọc thông tin và tính toán.
o Lặp lại các bước đọc thông tin, tính toán và xuất để chương trình có thể hoạt
động bình thường.
- Để thực hiện được việc này bạn cần biết một số kĩ thuật lập trình cơ bản (bằng ngôn
ngữ C/C++ hoặc các ngôn ngữ khác).
Lưu ý:
- Mọi thông tin thắc mắc thêm vui lòng liên hệ chủ nhiệm dự án Nguyễn Huỳnh Phúc
theo số điện thoại: 0346646603 hoặc email: phucnipy3@gmail.com để được tư vấn
và giải quyết.
Chương trình sẽ có cấu trúc tương tự sau:
Nhập tín hiệu bắt đầu:
cin >> a;
//Xử lý tín hiệu
(Nếu bạn đi trước thì xuất nước đi của bạn, nếu bạn đi sau thì đọc nước đi đối thủ)
While (true)
{
//Đọc nước đi hoặc thông báo
//Nếu đọc được thông báo đi sau thì bỏ qua các bước phía dưới
//Xử lý
//Xuất nước đi mới tính toán được
}