GIỚI THIỆU VỀ LẬP TRÌNH SOCKET

Một phần của tài liệu Xây dựng trò chơi Caro online trên Android (Trang 27)

2.3.1. KHÁI NIỆM VỀ SOCKET

Socket là một phương pháp để thiết lập kết nối truyền thông giữa một chương trình yêu cầu dịch vụ (client) và một chương trình cung cấp dịch vụ (server) trên mạng LAN, WAN hay Internet và đôi lúc là giữa những quá trình ngay bên trong máy tính. Mỗi socket có thể được xem như một điểm cuối trong một kết nối. Một socket trên máy yêu cầu dịch vụ có địa chỉ mạng được cấp sẵn để "gọi" một socket trên máy cung cấp dịch vụ. Một khi socket đã được thiết lập phù hợp, hai máy tính có thể trao đổi dịch vụ và dữ liệu.

Tiến trình Host IP 192.168.1.100 Tiến trình Host IP 192.168.1.200 Network

Xét ở góc độ lập trình, Socket là giao diện lập trình ứng dụng (API) hay bộ thư viện hàm hỗ trợ, dùng để nối kết chương trình ứng dụng với lớp mạng trong hệ thống mạng TCP/IP.

Socket được giới thiệu lần đầu dưới hệ điều hành UNIX version 4.3 BSD.

2.3.2. CƠ CHẾ GIAO TIẾP

Trong Java, lớp Socket và ServerSocket hỗ trợ việc lập trình mạng giao tiếp giữa Client và Server.

Các bước cần để tạo nối kết ở phía Client:

-Tạo một Socket để kết nối với Server.

Hình 2.8 . Mô hình kết nối socket

-Địng nghĩa các dòng nhập/xuất với Socket. -Sử dụng các dòng nhập/xuất để nhận/gởi dữ liệu.

-Đóng các dòng nhập/xuất và Socket khi không còn trao đổi.

Các bước cần để tạo kết nổi ở phía Server:

- Tạo ServerSocket lắng nghe ở một yêu cầu từ Client. -Tạo một Socket accept nối kết với Client.

-Kết nối các dòng nhập/xuất với Socket.

-Sử dụng các dòng nhập/xuất để nhận/gởi dữ liệu. -Đóng các dòng nhập/xuất,Socket,ServerSocket.

2.3.3. CÁC CHẾ ĐỘ GIAO TIẾP

Trong lập trình Socket, có 2 chế độ giao tiếp là TCP(Transmission Control Protocol) và UDP (User Datagram Protocol).

2.3.4. SO SÁNH GIỮA TCP VÀ UDP

Bảng 2.11 So sánh 2 chế độ giao tiếp TCP và UDP

TCP UDP Application Application TCP UDP IP h/w interface OSI 5-7 OSI 4 OSI 3 OSI 1-2 Hình 2.10 . Chế độ giao tiếp của TCP và UDP

TCP là chế độ giao tiếp có nối kết UDP là chế độ giao tiếp không nối kết Giữa 2 quá trình Client và Server luôn tồn

tại kênh giao tiếp ảo.

UDP không tồn tại kênh giao tiếp ảo giữa 2 quá trình Client và Server.

Đối với TCP, dữ liệu được gửi đi theo chế độ đảm bảo: có kiểm tra lỗi, truyền lại gói tin bị lỗi hay mất, bảo đảm thứ tự đến của các gói tin,…

Đối với UDP, dữ liệu được gửi đi theo chế độ không đảm bảo: không kiểm tra lỗi, không phát hiện và không truyền lại gói tin bị lỗi hay bị mất, không đảm bảo thứ tự đến của các gói tin,…

Tốc độ truyền chậm hơn UDP do phải truyền đi theo chế độ đảm bảo.

Tốc độ truyền nhanh hơn TCP, nhưng dữ liệu truyền đi không chính xác bằng TCP. Chế độ giao tiếp TCP thích hợp cho các

ứng dụng cần độ chính xác cao: truyền file, thông tin điều khiển…

Chế độ giao tiếp UDP thích hợp cho các ứng dụng cần tốc độ, không cần chính xác cao: truyền âm thanh, hình ảnh,..

(Nguồn: Lập trình truyền thông – Khoa CNTT&TT – Đại học Cần Thơ)

CHƯƠNG 3. NỘI DUNG VÀ KẾT QUẢ NGHIÊN CỨU

Bằng cách vận dụng và kết hợp những kiến thức đã được trình bày ở chương 2, trong chương 3 này, tác giả sẽ vận dụng để xây dựng trò chơi cờ Caro online. Chi tiết việc xây dựng sẽ được đề cập đến bao gồm mô hình hệ thống, kiến trúc chương trình, cách thức xây dựng. Thêm vào đó, trong chương này sẽ trình bày chi tiết cấu trúc thong điệp giao tiếp giữa Client

và Server. Việc thiết kế cơ sở dữ liệu cũng là một phần quan trọng trong đề tài. Cuối chương sẽ là phần giới thiệu chi tiết về các chức năng mà chương trình đã xây dựng được.

3.1. XÂY DỰNG TRÒ CHƠI CỜ CARO ONLINE3.1.1. ĐẶC TẢ CHI TIẾT ĐỀ TÀI 3.1.1. ĐẶC TẢ CHI TIẾT ĐỀ TÀI

Trò chơi được xây dựng danh cho thiết bị có hệ điều hành Android phiên bản từ 2.2 Froyo trở lên (Demo trên Samsung Galaxy Y 5360 Android 2.3.6). Sau đó, người chơi phải cài chương trình ở phía Client vào thiết bị của mình.

Để có thể chơi cờ online thì máy của người chơi phải được kết nối Internet (wifi,3G). Khi khởi động trò chơi, người dùng phải đăng kí tài khoản thông qua giao diện đăng kí. Khi đã có tài khoản người dung sẽ đăng nhập vào Server. Nếu đăng nhập thành công, Server sẽ tạo ra một token tương ứng với người đăng nhập để quản lý cùng với đó là thông tin những ai đang đăng nhập.

Dựa vào thông tin đó, người chơi có thể yêu cầu bất cứ người chơi nào khác đang đăng nhập để chơi cờ. Neeusng]ời được yêu cầu đồng ý thì ván cờ được bắt đầu. Kể từ khi đăng nhập thành công, những thông tin được gửi từ Client đến Server sẽ gửi kèm theo token do Server tạo ra để đảm bảo thông tin được gửi chính là do Client đó gửi. Khi ván cờ bắt đầu, người yêu cầu là người được đi trước. Hai người chơi lần lượt đi nước cờ của mình cho đến khi nào xác định được trạng thái thắng, thua, hoặc hòa.

Khi người chơi đi quân cờ, Server sẽ nhận và xử lý truyền thông tin nước cờ của hai người chơi cho nhau, xét thắng thua và cập nhật điểm cho người chơi. Trong khi chơi, người chơi có thể xin hòa, hoặc xin thua và ván cờ sẽ kết thúc. Nếu đang chơi cờ mà người chơi thoát ra khỏi ván cờ thì sẽ thua ván cờ đó. Mỗi ván cờ thắng sẽ được cộng 1 điểm và thua sẽ bị trừ 1 điểm. Chương trình sẽ cập nhật là điểm người chơi ngay khi kết thúc ván cờ

3.1.2. KIẾN TRÚC CHƯƠNG TRÌNH

Database

Hình 3.1 Kiến trúc chương trình

Từ việc phân tích và làm rõ nội dung đề tài, kiến trúc chương trình gồm có 2 phần chủ yếu là Client và Server.

3.1.3. SERVER

Server chịu trách nhiệm xử lý thông điệp gửi từ Client, tính toán và lưu trữ cơ sở dữ liệu. Một cách cụ thể:

• Database Server: Lưu trữ cơ sở dữ liệu người dùng bao gồm thông tin đăng ký, đăng nhập, thông tin người chơi như điểm, cấp bậc, bàn cờ.

• Game Server: đóng vai trò là nơi trung gian để giao tiếp giữa Client với nhau, quản lý kết nối, đồng bộ thời gian, nhận thông tin từ Client, tính toán nước đi hợp lệ, thông tin thắng thua và gửi thông tin đến Client.

3.1.4. CLIENT

Client đóng vai trò là người chơi, cụ thể ở đây là điện thoại Galaxy Y. Client muốn chơi cờ buộc phải kết nối internet, wifi hoặc 3G.

• Client có thể đăng ký, đăng nhập và tiến hành chơi cờ.

• Nhận thông tin cập nhật người chơi đang online gửi từ server

• Gửi thông tin nước đi cho Game Server

• Chờ thông tin gửi từ Game Server và cập nhật lại đường đi cũng như giao diện đồ họa.

3.1.5. XÂY DỰNG BÀN CỜ

Bàn cờ sẽ được xây dựng bởi ma trận 50x50 ô. Ban đầu, các ô sẽ có giá trị là 0. Mỗi người chơi sẽ cầm một bên cờ, ngẫu nhiên sẽ là X hoặc 0. Sau khi có một quân cờ được đặt vào mỗi ô. Giá trị của ô đó sẽ thay đổi thành 1 hoặc 2 tùy theo lượt của người đi nước cờ đó.

Ví dụ về một bàn cờ: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Hình 3.2 Bàn cờ ở trạng thái mặc định ban đầu.

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 1 1 2 2 0 0 0 0 0 0 0 2 0 2 1 0 0 0 0 0 0 1 0 2 1 0 0 0 0 0 0 0 0 2 0 2 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0

Hình 3.3 Bàn cờ có người chơi thắng

3.1.6. GIẢI THUẬT

Giải thuật tính toán cho ván cờ được thiết kế ở cả Client và Server. Phía Client được tính toán để thực hiện các tác vụ một cách nhanh chóng, phía Server được tính toán để xác định thắng thua và cập nhật điểm.

Khởi tạo bàn cờ:

Bàn cờ được khởi tạo bởi một mảng số nguyên 2 chiều 50x50. Các giá trị trong mảng mang giá trị khởi tạo là 0. Quân cờ người chơi 1 mang giá trị 1, quân cờ người chơi 2 mang giá trị 2. Những ô không có bên nào đánh sẽ mang giá trị 0.

Void KhoiTaoBanCo(){

Khai báo ma trận bàn cờ 50x50; Khởi tạo giá trị 0 cho tất cả các ô. }

Xây dựng hàm có thể đánh nước cờ của người chơi

Kiểm tra nước đi: Người chơi chỉ được đánh cờ tại một vị trí mà chưa bên nào đã đánh vào vị trí đó trước đó. Tức là, người chơi chỉ được đánh vào một vị trí mà tại đó mang giá trị là 0.

boolean isFree(int x,int y){

if (vị trị (x,y) trên bàn cờ mang giá trị 0) return true;

return false; }

-Kiểm tra thắng thua tại vị trí vừa đánh:

boolean isWin(int x, int y){ int dem=1;

//Kiểm tra trên hàng

for (các vị trí bên trái cùng hàng với vị trí x,y ){

if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

for (các vị trí bên phải cùng hàng với vị trí x,y ){ if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

if (có từ 5 giá trị giống nhau trên cùng một hàng tại vị trí đánh x,y) return true;

//Kiểm tra trên cột

dem=1;

for (các vị trí bên trên cùng cột với x,y ){

if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

for (các vị trí bên dưới cùng cột với x,y ){

if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

//Kiểm tra đường chéo trên trái – dưới phải

dem=1;

for (các vị trí bên trên-trái cùng đường chéo vị trí x,y ){ if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

for (các vị trí bên dưới-phải cùng đường chéo với vị trí x,y ){ if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

if (có từ 5 giá trị giống nhau trên cùng một đường chéo tại vị trí đánh x,y) return true;

//Kiểm tra đường chéo bên trên phải-dưới trái

dem=1;

for (các vị trí bên trên phải cùng đường chéo với vị trí x,y ){ if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

for (các vị trí bên dưới trái cùng đường chéo với vị trí x,y ){ if (giá trị tại vị trí x,y bằng với các vị trí đang chạy) dem=dem+1;

else break; }

if (có từ 5 giá trị giống nhau trên cùng một hang tại vị trí đánh) return true; return false;

}

3.1. XÂY DỰNG SERVER

3.2.1. CHỨC NĂNG

Server được thiết kế để quản lý và là nơi trung gian cho việc giao tiếp giữa các Client. Chức năng Server được xây dựng bao gồm:

−Tiếp nhận nối kết đến từ Client.

−Xử lý đăng ký, đăng nhập.

−Quản lý danh sách người chơi.

−Quản lý ván cờ.

−Xử lý song song và tính toán giải thuật cho các ván cờ.

−Lưu trữ cơ sở dữ liệu người chơi và ván cờ.

−Đồng bộ hóa thời gian.

−Cung cấp chức năng Chat.

3.2.2. CÁC THÀNH PHẦN CỦA SERVER

Server bao gồm các thành phần Database Server, Game Server được nối kết thông qua mạng máy tính để có thể giao tiếp với nhau:

− Database Server: lưu trữ cơ sở dữ liệu (CSDL) của người dùng và ván cờ. Database Server sử dụng hệ quản trị cơ sở dữ liệu (HQTCSDL) MySql.

− Game Server: đóng vai trò là nơi trung gian để các Client giao tiếp. Có thể nói, Game Server đóng vai trò quan trọng quan trọng nhất trong hệ thống. Ngoài việc giao tiếp với Client, nó còn là nơi giao tiếp với các Server khác như Database Server để truy xuất dữ liệu. Game Server sử dụng cơ chế lập trình Socket TCP kết hợp với lập trình đa luồng để xử lý yêu cầu của Client.

3.2.3. HƯỚNG GIẢI QUYẾTa. Game Server a. Game Server

Trong quá trình nghiên cứu và thực hiện, để xây dựng Game Server phục vụ Client nối kết, ngoài việc sử dụng Socket, vẫn còn một số kĩ thuật khác như RMI, WebServices vẫn đáp ứng được việc xây dựng Game Server. Tuy nhiên, so về tốc độ truyền dữ liệu, Socket là nhanh hơn các kĩ thuật còn lại. Thêm vào đó, Server cần phải quản lý người chơi một cách trực tiếp thông qua việc kiểm tra nối kết đó. Một phần nữa là trò chơi cần phải đáp ứng nhanh về tốc độ chương trình và hạn chế tối đa độ trễ. Từ việc đánh giá, so sánh các yếu tố, tác giả đã lựa chọn kĩ thuật lập trình Socket áp dụng vào xây dựng Game Server. Ngay cả khi xác định được kĩ thuật Socket thì vẫn còn tồn tại vấn đề, nếu xét về tốc độ, thì UDP sẽ là phương án lựa chọn đầu tiên. Tuy nhiên, cần phải xét thêm yếu tố về độ chính xác, thì Socket TCP đáp ứng tốt hơn so với UDP nên kĩ thuật Socket được áp dụng ở đây là Socket TCP.

−Server mở 1 ServerSocket duy nhất là ở cổng 9999.

−Server sẽ có 1 luồng chính luôn luôn lắng nghe nối kết từ Client vào.

−Mỗi khi có nối kết đến, Server sẽ Settimeout Socket là 10 phút, sau đó Server sẽ tạo 1 luồng khác để phục vụ cho Client.

−Mỗi Client chỉ có 1 luồng lắng nghe nó, luồng này dùng để đăng ký, đăng nhập, đánh cờ, xin đi lại, chat, yêu cầu.

−Server sẽ sử dụng Vector để lưu người chơi đang online, lưu bàn cờ đang chơi.

−Khi Client đăng nhập thành công, Server sẽ tạo đối tượng người chơi và cập nhật vào danh sách người chơi.

−Khi có yêu cầu chời từ 1 Client nào đó, và người chơi được yêu cầu chấp nhận thì ván cờ mới bắt đầu. Server sẽ tạo ra 1 luồng mới cho phép 2 Client chơi cờ với nhau. Nếu hết thời gian đi của mỗi lượt mà không đi hoặc hết tổng thời gian bên nào thì bên đó thua, và ván cờ kết thúc.

−Trong khi đánh cờ có thể cầu hòa, xin thua hoặc đánh tới khi kết thúc ván cờ. Nếu phân định trạng thái thắng thua, thì Server làm công việc sau: Lưa trạng thái bàn cờ vào cơ sở dữ liệu, hủy luồng đếm thời gian, xóa bàn cờ trong danh sách bàn cờ. Ngoài ra, Server còn cập nhật lại thông tin người chơi. Ví dụ, khi chơi xong thì trạng thái của

người chơi sẽ trở về trạng thái rảnh, điểm số tăng lên hoặc hạ xuống. Sau đó, Server sẽ gửi thông tin useronline lại để thông báo cập nhật điểm mới của Client.

b. Database Server

Cơ sở dữ liệu là một phần rất quan trọng trong đề tài. Với mục đích quản lý người chơi, giúp người chơi có thể xem lại thành tích cá nhân, quản lý ván cờ, lưu lại lịch sử ván cờ giúp người chơi có thể xin đi lại, tất cả thông tin người chơi, bàn cờ sẽ được lưu ở cơ sở dữ liệu. Trong đề tài này, tác giả sử dụng hệ quản trị cơ sở dữ liệu Mysql lưu trữ thông tin. Mysql là phần mềm mã nguồn mở, dùng cho việc lưu trữ cơ sở dữ liệu vừa và nhỏ nên rất thích hợp với đề tài.

Để đáp ứng được yêu cầu của đề tài, cơ sở dữ liệu được thiết kế thành 4 bảng: −NGUOICHOI: lưu thông tin cá nhân của người chơi.

THANHTICH: các cấp độ của người chơi, mỗi cấp bập được phân chia theo các khoảng điểm khác nhau.

LICHSU_THIDAU: lưu trữ những ván cờ đã diễn ra trước đó. −BANBE: lưu trữ danh sách bạn bè của từng người chơi.

Mô hình mức luận lý LDM

NGUOICHOI ( USERNAME, PASSWORD, EMAIL, GIOITINH)

THANHTICH ( USERNAME, LEVEL, WIN, LOSE)

LICHSU_THIDAU (STT, PLAYER1, PLAYER2, DATE_OF_FIGHTING, RESULT)

BANBE ( NAME1, NAME2 , DATE_MAKE_FRIEND)

Các ràng buột tham chiếu:

THANHTICH ( USERNAME ) → NGUOICHOI (USERNAME)

BANBE (NAME1) → NGUOICHOI (USERNAME)

BANBE (NAME2) → NGUOICHOI (USERNAME)

LICHSU_THIDAU (PLAYER1) → NGUOICHOI (USERNAME)

LICHSU_THIDAU (PLAYER2) → NGUOICHOI (USERNAME)

Mô hình dữ liệu mức vật lý Bảng 3.1. NGUOICHOI

STT Tên Kiểu Kích

Thướt KhóaChính DuyNhất NotNull RBTVKhóa Ngoại

Diễn Giải

1 Username Varchar 100 x X x Tên người dùng

2 Fullname Varchar 100 x Tên của người chơi

3 Password Varchar 100 x Mật khẩu

4 Email Varchar 100 x Địa chỉ email

5 Sex Varchar 3 x Giới tính

Bảng 3.2. THANHTICH

STT Tên Kiểu Kích

Thướt KhóaChính DuyNhất NotNull RBTVKhóa Ngoại

Diễn Giải

1 Username Varchar 100 x x x X Tên người dùng

2 Level Integer 11 x Cấp độ

3 Win Integer 11 x Số trận thắng

4 Close Integer 11 x Số trận thua

Bảng 3.4. BANBE STT Tên Kiểu Kích Thướt Khóa Chính Duy Nhất Not Null RBTV Khóa Ngoại Diễn Giải

1 NAME1 Varchar 50 x x x X Tên người dùng

2 NAME2 Text x Danh sách bạn bè

3 DATE_M AKE_FRI END STT Tên Kiểu Kích Thướt Khóa Chính Duy Nhất Not Null RBTV Khóa Ngoại Diễn Giải 1 STT Number x x x

2 PLAYER1 Varchar 100 x x x X Người dùng 1

3 PLAYER2 Varchar 100 x x x X Người dùng 2

4 DATE_OF_

FIGHTING

Date x Thời gian

3.3. XÂY DỰNG CLIENT 3.3.1. CHỨC NĂNG

Client đóng vai trò là người chơi, cụ thể là thiết bị chạy hệ điều hành Android. Ở phía

Một phần của tài liệu Xây dựng trò chơi Caro online trên Android (Trang 27)

Tải bản đầy đủ (DOC)

(61 trang)
w