Tải bản đầy đủ (.docx) (32 trang)

Báo cáo đồ án đấu trường 100

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.74 MB, 32 trang )


ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
BÁO CÁO ĐỒ ÁN LẬP TRÌNH ỨNG DỤNG MẠNG
ĐỀ TÀI: XÂY DỰNG TRANG WEB ĐẤU TRƯỜNG 100
Lớp: NT109.E21
Nhóm: 9
GVGD: Nguyễn Quang Minh
DANH SÁCH THÀNH VIÊN
Phạm Xuân Y 11520497
Trần Thanh Nam 11520237
Bùi Nguyễn Mạnh Tuấn 11520451
Nguyễn Ngọc Quý 11520315
TP. HỒ CHÍ MINH – 7/2014
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN














MỤC LỤC
I. GIỚI THIỆU


1. Lý do chọn đề tài
Đấu trường 100 là game show truyền hình rất nổi tiếng cả trong lẫn ngoài nước. Tuy
nhiên, không phải ai cũng may mắn có cơ hội ngồi trên chiếc ghế nóng của chương
trình. Xuất phát từ thực tế đó, nhóm chúng tôi chọn đề tài “Xây dựng trang web đấu
trường 100” để tất cả những ai yêu thích và mong muốn thử sức với các câu hỏi đều có
thể tham gia.
2. Mục đích của đề tài
Giúp cho nhóm nghiên cứu và thử sức với công nghệ lập trình web đang phát triển rất
mạnh hiện nay. Không những vậy còn góp phần đưa trò chơi truyền hình Đấu trường
100 đến với mọi người, giúp nâng cao dân trí và đem lại những giây phút giải trí thú vị
khi tham gia.
3. Đối tượng và phạm vi nghiên cứu
Nhóm đã cố gắng đưa ra những tính năng website gần gũi và giống với game show
trên truyền hình nhất.
II. CÁC KIẾN THỨC ỨNG DỤNG
1. Mô hình MVC
a. Lịch sử
Được đưa ra bởi các nhà nghiên cứu tại phòng thí nghiệm Xerox PARC,
dựa trên ngôn ngữ lập trình Smalltalk- lập trình theo hướng đối tượng và
giao diện đồ hoại GUI, công bố cuối những năm 70 đầu những năm 80.
Kiến trúc này ngày càng phát triển và hoàn thiện nhằm giải quyết các vần
đề phát sinh cũng như các giải pháp cho quá trình phát triển phần mềm.
Vì vậy sau đó, lần lượt cái MVC framework ra đời dựa trên mô hình
MVC như : Zend, Spring, Hibernate….
b. Tổng quan
 Models
 Chứa data mà ứng dụng sử dụng
 Nhận yêu cầu từ Views
 Thực hiên các yêu cầu liên quan
đến DB

 Trả về các giá trị tính toán cho Views
 Kiểm tra tính hợp lệ của data
 Views
 Hiển thị giao diện người dùng
 Được tạo ra từ dữ liệu của Models
 Controllers
 Xử lý các yêu cầu của user
 Chọn Views thích hợp hiển thị cho người dùng
 Đồng bộ hóa giữa khung nhìn và mô hình
c. Cơ chế thực hiện
 Web Browser gửi request đến server thông qua các control trên form
HTML hay JSP, hay query string url hay qua cookies.
 Servlet – Controller đón nhận request và xác định Model tương ứng để
tạo ra instance của JavaBean để đón nhận các giá trị nhập từ request để
lưu trữ và xử lý
 Model thực hiện xử lý, kết nối dữ liệu vật lý dưới DBMS (nếu có) và trả
kết quả trả về cho Controller
 Kết quả xử lý được chuyển vào Servlet – Controller, Servlet Controller
thực hiện tạo hay lựa chọn View để từ đó đưa kết quả xử lý hay dữ liệu
lấy từ Model để cập nhật lại trang kết quả View.
 Controller gửi View qua response cho người dùng để browser có thể trình
bày dữ liệu trong Web Browser
a. Ưu điểm và nhược điểm
Ưu điểm:
 Phát triển phần mềm chuyên hóa, có thể chia công việc cho nhiều nhóm
chuyên môn khác nhau: nhóm thiết kê , nhóm lập trình, nhóm tổ chức
DB… Giúp phát triển ứng dụng nhanh, đơn giản, dễ nâng cấp.
 Bảo trì : với các lớp được phân chia, các thành phần của một hệ thống dễ
dàng thay đổi nhưng sự thay đổi có thể được cô lập trong từng lớp, hoặc
chỉ ảnh hưởng đến lớp kế nó chứ không ảnh hưởng đến cả hệ thống.

 Mở rộng : việc thêm chức năng cho từng lớp dễ dàng hơn là phân chia
theo cách khác
 Nhược điểm:
 Thích hợp với dự án vừa và lớn, đối với dự án nhỏ việc áp dụng mô hình
MVC sẽ gây cồng kềnh , tốn thời gian trong quá trình phát triển.
 Tốn thời gian trung chuyển dữ liệu giữa các lớp.
2. Java Servlet
 Servlet là các thành phần máy chủ nhúng trên trình chủ Web server
thực hiện xử lý yêu cầu và phát sinh ra các trang Web động trả về máy
khách. Để sử dụng được Servlet cần có các trình chủ Java và hỗ trợ triệu
gọi Servlet như Apache, JRun, Web Logic … Mặc dù vậy biên dịc và
tạo Sevlet chúng ta chỉ cần đến trình biên dịch JDK mà không cần đến
các trình chủ.
 Servlet là trung tâm của công nghệ Web trong Java. Servlet thay
thế cho các ứng dụng CGI truyền thống. Muốn hiểu rõ về lập trình Web
trong java trước hết nên tìm hiểu rõ cơ chế hoạt động của servlet
3. JSP & HTML
JSP (viết tắt của tiếng Anh JavaServer Pages) còn được biết đến với một
cái tên khác là Java Scripting Preprocessor - tạm dịch là "Bộ tiền xử lý
văn lệnh Java" - là một công nghệ Java cho phép các nhà phát triển tạo nội
dung HTML, XML hay một số định dạng khác của trang webmột cách năng
động, trong khi hồi âm yêu cầu của trình khách. Công nghệ này cho phép
người ta nhúng mã Java và một số hành động xử lý đã được định trước (pre-
defined actions) vào trong nội dung tĩnh của trang.
Cú pháp của JSP cho thêm các thẻ XML mới, gọi là JSP actions - hành động
JSP. Những "hành động JSP" này được dùng để khởi động chức năng sẵn
có, là những chức năng đã được xây dựng trước. Cộng thêm vào đó, công
nghệ còn cho phép chúng ta tạo ra các thư viện thẻ JSP (JSP tag libraries),
là những cái đóng vai trò vào việc mở rộng các thẻ HTML hay XML tiêu
chuẩn. Thư viện thẻ (Tag libraries) là phương pháp mở rộng khả năng của

một máy chủ web trong khi những mở rộng đó không phụ thuộc vào hệ
nền (về cả cấu trúc máy cũng như hệ điều hành được dùng).
Trước khi hiển thị ra trình duyệt, tập tin JSP phải được biên dịch
thành Servlet, dùng bộ biên dịch JSP (JSP compiler). Bộ biên dịch JSP có
thể tạo servlet thành mã nguồn Java trước, rồi biên dịch mã nguồn ra tập
tin .class dùng bộ biên dịch Java, hoặc có thể trực tiếp tạo mã byte
codecho servlet từ trang JSP.
a. HTML : là các tag của ngôn ngự HTML có thể viết trực tiếp vào trang
JSP. Khi web server dịch, các tag này được gửi về client.
b. Các chỉ thị: là các dòng dung để định nghĩa các trang .
Ví dụ : <% @page contentType=”text/html: charser=UTF-8” %> : d9iainh
nghịa cho ngôn ngự của trang là Unicode
c. Các tag chuẩn của ngôn ngữ JSP: là các tag mà JSP hỗ trợ.
Vi dụ : <jsp:include page=”checkroles.jsp”/>
d. Các script client: là các script mà trình duyệt có thể hiểu, ta có thể dung
javaScript hay jScript
e. Các script server: là các đoạn code của java được chèn trực tiếp vào trang
JSP, đây cũng chính là thành phần chính của trang JSP, nó chia làm 3 loại :
E1 : Các thẻ bọc mã <% %>: là thẻ chứa mã java.
E2 : Các thẻ xuất <%= %>: nội dung của thẻ này sẽ được in ra trong trang
JSP.
E3 : Khai báo phương thức và biến bằng thẻ <%! %>: nội dung trong thẻ
này là các biến hoặc phương thức được các phương thức này có thể sử dụng
trực tiếp trong trang JSP
4. Cơ sở dữ liệu MySQL trên PHP MyAdmin
MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế
giới và được các nhà phát triển rất ưa chuộng trong quá trình phát triển
ứng dụng. Vì MySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng,
có tính khả chuyển, hoạt động trên nhiều hệ điều hành cung cấp một hệ
thống lớn các hàm tiện ích rất mạnh. Với tốc độ và tính bảo mật cao,

MySQL rất thích hợp cho các ứng dụng có truy cập CSDL trên internet.
MySQL miễn phí hoàn toàn cho nên bạn có thể tải về MySQL từ trang
chủ. Nó có nhiều phiên bản cho các hệ điều hành khác nhau: phiên bản
Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS
X, Unix, FreeBSD,NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS,
phpMyAdmin là một công cụ nguồn mở miễn phí được viết
bằng PHP dự định để xử lý quản trị của MySQL thông qua một trình
duyệt web. Nó có thể thực hiện nhiều tác vụ như tạo, sửa đổi hoặc xóa
bỏ cơ sở dữ liệu, bảng, các trường hoặc bản ghi; thực hiện báo cáo SQL;
hoặc quản lý người dùng và cấp phép.
III. GIỚI THIỆU WEBSITE ĐẤU TRƯỜNG 100
Đấu trường 100 là một trò chơi truyền hình được sản theo bản quyền của C.Ty
Endemol N.V, Hà Lan.
Đây là trò chơi ghi kỷ lục “trò chơi truyền hình đầu tiên có số người tham dự
trực tiếp đông nhất tại Việt Nam” . Bước sang năm thứ 9 (năm 2005-2014),
Đấu trường 100 thay đổi diện mạo mới – phiên bản mới. Và dưới đây là luật
chơi mới của phiên bản năm thứ 9 này.
1. Nội dung:
Hình thức câu hỏi vẫn dựa trên phiên bản hiện nay, thể loại câu hỏi trắc
nghiệm với 3 phương án trả lời A, B & C.
Không áp dụng mức độ câu hỏi khó hay dễ, mức độ câu hỏi khó/dễ tùy thuộc
vào quá trình chơi của NCC, do đó tiết tấu chương trình được đẩy nhanh hơn.
Thang điểm thưởng với 10 cấp độ từ thấp đến cao, cấp độ cao nhất là 50 triệu
khi NCC loại 100 người cùng chơi.
NCC được quyền ra về giữa chừng với số tiền thưởng đang có, tại bất kỳ thời
điểm nào của game (sau khi có tiền thưởng của cấp độ 1).
Gay cấn và kịch tính hơn khi những người cùng chơi có cơ hội được chia tiền
thưởng từ NCC, sau khi NCC loại được 50 người cùng chơi.
03 quyền hỗ trợ hoàn toàn mới lạ, hấp dẫn. NCC dù dùng quyền hỗ trợ nhưng
vẫn phải khôn khéo vận dụng các quyền hỗ trợ này để có thể tiếp tục với câu

hỏi kế tiếp.

Thang điểm thưởng theo 10 cấp độ giá trị tiền thưởng từ thấp đến cao. Mỗi cấp
độ tiền thưởng tương đương 10 người cùng chơi (mỗi khi NCC loại lần lượt ít
nhất 10 người cùng chơi thì giá trị tiền thưởng tăng lên cấp độ kế tiếp, tương
ứng với giá trị tiền thưởng cao hơn).
Thang điểm thưởng dự kiến:
2. Luật chơi:
a) Cấp độ tiền thưởng 1:
Nếu NCC loại 9 người cùng chơi đầu tiên: tiền thưởng vẫn là 0.
Nếu NCC loại từ 10 - 19 người cùng chơi đầu tiên: đã vượt đến cấp độ 1 và
được 500.000 đồng tiền thưởng tương ứng của cấp độ 1.
b) Cấp độ tiền thưởng 2:
Nếu NCC loại tổng cộng từ 20 - 29 người cùng chơi (đến thời điểm này): đã
vượt đến cấp độ 2 với tiền thưởng tương ứng của cấp độ 2.
Tương tự với cấp độ tiền thưởng từ 3 – 9. NCC có thể phải trả lời đúng nhiều
câu hỏi để vượt qua một cấp độ tiền thưởng.
c) Cấp độ tiền thưởng 10:
Để chiến thắng và giành giải thưởng cao nhất 80.000.000 đồng, NCC phải loại
được người cùng chơi thứ 100. Nếu chỉ loại từ 91-99 người chơi, NCC vẫn ở
mức tiền thưởng cấp độ 9 (40.000.000 đồng).
Sau khi có tiền thưởng của cấp độ 1 (500.000 đồng), NCC được dừng cuộc
chơi tại bất cứ thời điểm nào của game, trước khi bắt đầu câu hỏi kế tiếp, và ra
về với số tiền thưởng đang có.
3. Tương tác cao giữa người chơi chính và người cùng chơi:
Hoàn toàn khác biệt so với phiên bản cũ, Đấu trường 100 phiên bản 2014 sẽ có
sự tương tác cao giữa người chơi chính (NCC) và những người cùng chơi, thể
hiện qua luật chơi mới: ‘chia tiền từ NCC’.
Khi NCC loại được 50 người cùng chơi, luật ‘chia tiền’ sẽ được áp dụng. Từ
thời điểm này, nếu NCC trả lời sai bất cứ câu hỏi nào, số tiền thưởng đang có

sẽ được chia đều cho những người cùng chơi có câu trả lời đúng.
NCC cũng sẽ phải chọn lựa 1 trong 2:
+ Dừng cuộc chơi và ra về với số tiền thưởng đang có.
+ Hoặc mạo hiểm chơi tiếp để có cơ hội nâng cao số tiền thưởng.
Đây chính là điểm hào hứng và kịch tính nhất của game: Những người cùng
chơi luôn phản đối NCC ra về giữa cuộc chơi (đồng nghĩa những người cùng
chơi sẽ không có cơ hội được chia tiền thưởng của NCC); vì vậy những người
cùng chơi luôn yêu cầu NCC phải chơi tiếp (đồng nghĩa họ sẽ có cơ hội được
chia tiền thưởng khi NCC trả lời sai).
4. 03 Quyền trợ giúp
NCC có 03 quyền trợ giúp:
a) Thăm dò: Phân vân với phương án A, vídụ, NCC yêu cầu máy tính thống kê
có bao nhiêu người cùng chơi cùng chọn A. Dựa vào số liệu này, NCC có thể
quyết định hoặc chọn phương án A theo số liệu thống kê hoặc được chọn 1
trong 2 phương án còn lại.
b) Hỏi dò: Máy tính chọn ngẫu nhiên 2 người cùng chơi (1 đúng, 1 sai).
NCC/MC giao lưu nhanh với 2 người chơi này, hỏi phương án và lý do họ
chọn. NCC quyết định lựa chọn phương án trả lời trong 2 phương án này.
- Nếu tất cả các người cùng chơi có phương án trả lời giống nhau, 4 tình
huống:
+ NCC chọn cùng đáp án và đúng, game tiếp diễn.
+ NCC chọn cùng đáp án và sai, game kết thúc, tất cả đều không có tiền
thưởng.
+ NCC chọn khác đáp án và đúng, NCC chiến thắng với số tiền thưởng tối đa.
+ NCC chọn khác đáp án và sai, NCC thua game, tiền thưởng đến thời điểm đó
sẽ được chia đều cho những người cùng chơi (nếu đáp án đó đúng).
c) Tin người cùng chơi: Máy tính thống kê phương án trả lời được các người
cùng chơi chọn theo số đông. Khi chọn quyền hỗ trợ này, được hiểu NCC buộc
phải tuân theo phương án trả lời được chọn của số đông, không được thay đổi
phương án khác. 2 tình huống phát sinh:

•Nếu 2 phương án trả lời được những người cùng chơi chọn ngang nhau và cao
hơn phương án còn lại, MC sẽ thông báo cho NCC biết điều này. NCC sẽ tự
quyết định chọn 1 trong 2 phương án được chọn ngang nhau theo số đông.

•Nếu 3 phương án trả lời được những người cùng chơi chọn ngang nhau, MC
sẽ thông báo cho NCC biết điều này. NCC sẽ tự quyết định chọn 1 trong 3
phương án được chọn ngang nhau theo số đông.

Cách thức sử dụng 3 quyền trợ giúp:
+ NCC được sử dụng 3 quyền trợ giúp tại bất kỳ thời điểm nào trong game.
+ NCC được sử dụng 2 hoặc 3 quyền trợ giúp liên tiếp cho 1 câu hỏi.
+ NCC được sử dụng 3 quyền trợ giúp theo thứ tự bất kỳ.
IV. MÔ HÌNH CHỨC NĂNG VÀ XỬ LÍ
1. Cấu trúc chương trình sử dụng mô hình MVC
a. Người chơi chính
Được hỗ trợ tất cả các quyền và chức năng:
- Có 60s để trả lời và trả lời câu hỏi sau 6s (thời gian dành cho người chơi phụ
chọn đáp án).
- Có tiền thưởng.
- Có 3 quyền trợ giúp được dành cho người chơi chính.
- Có nút submit “Câu kế tiếp”.
b. Người chơi phụ
- Có 6s để trả lời câu hỏi sau (trả lời trước người chơi chính).
- Tiền thưởng có khi luật chơi tiền thưởng được áp dụng (Người chơi chính đánh
bại được từ 50% số lượng người chơi trở lên).
- Không hỗ trợ 3 quyền trợ giúp.
- Không có nút submit “Câu kế tiếp”.
c. MC
Được xem tất cả các các thông tin thống kê người chơi và các lựa chọn của người chơi
chính.

d. Khán giản
Được xem tất cả các các thông tin thống kê người chơi và các lựa chọn của người chơi
chính.
(Đối với từng vai trò, người chơi được phép những gì/ ko được phép
những gì Cụ thể hóa).
2. Hoạt động chương trình
a. Xử lí Đăng ký

Trong xử lí đăng kí:
- Bước 1: Người dùng sẽ truy cập vào trang register.jsp  Nhập thông tin đăng kí
 Chấp nhận đăng kí.
Kiểm tra TK
và lưu
User
Success/Fail
T/F
Thông ;n ĐK
View
register.jsp
Thong;ndk
(table)
Model
Register.java
Controller
- Bước 2: Dữ liệu thông tin đăng kí từ trang register.jsp được gửi lên servlet
Register trong file Register.java.
- Bước 3: Servlet kiểm tra “Tên đăng nhập” đã tồn tại trong cơ sở dữ liệu (bảng
thongtindk) chưa?  Trả về kết quả cho servlet.
- Bước 4: Servlet Kiểm tra và trả về kết quả cho trang register.jsp.
Code xử lí Đăng kí trên controller:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
String TenDN = request.getParameter("TenDN");
String MatKhau = request.getParameter("MatKhau");
String MatKhauMD5 = JavaMD5Hash.md5(request.getParameter("MatKhau"));
String re_MatKhau = request.getParameter("re_MatKhau");
String HoTen = request.getParameter("HoTen");
String GioiTinh = request.getParameter("GioiTinh");
String NgaySinh = request.getParameter("NgaySinh");
String DiaChi = request.getParameter("DiaChi");
String Email = request.getParameter("Email");
String SDT = request.getParameter("SDT");
String agree = request.getParameter("agree");
String ThangSinh = request.getParameter("ThangSinh");
String NamSinh = request.getParameter("NamSinh");
if ("on".equals(agree) && MatKhau.equals(re_MatKhau))
{
String address;
DatabaseUtilities dbu = new DatabaseUtilities("127.0.0.1", "MYSQL",
"dautruong100", "root", "");
boolean insertPlayterResult = dbu.insertPlayer(TenDN, MatKhauMD5,
HoTen, GioiTinh, NgaySinh, ThangSinh, NamSinh, DiaChi, Email, SDT);
if (!insertPlayterResult)
{
address="/WEB-INF/messages/register-success.html";
}
else

{
address="/WEB-INF/messages/register-error.html";
}
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
b. Xử lí Đăng nhập
Trong xử lí đăng nhập:
- Bước 1: Người dùng sẽ truy cập vào trang index.jsp  Nhập thông tin đăng
nhập (Tên đăng nhập + Mật khẩu)  Đăng nhập.
- Bước 2: Dữ liệu thông tin đăng nhập từ trang index.jsp được gửi lên servlet
Login trong file Login.java.
- Bước 3: Servlet kiểm tra “Tên đăng nhập” và “Mật khẩu” có khớp với cơ sở dữ
liệu (trong bảng thongtindk).
- Bước 4: Servlet Kiểm tra và trả về kết quả chuyển sang trang welcome.jsp nếu
đăng nhập thành công (đồng thời lưu “Tên đăng nhập” vào trong bảng
thongtinnc) và chuyển sang trang index.jsp nếu đăng nhập thất bại.
Code xử lí Đăng nhập trên controller:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//PlayersLimit pll=new PlayersLimit();
//int playersL=PlayersLimit.PLAYER_LIMITS;
String TenDN=request.getParameter("TenDN");
String plainMatKhau=request.getParameter("MatKhau");
String MatKhau=JavaMD5Hash.md5(plainMatKhau);
//Tao cookie luu username va password neu check ghi nho dn
String Remember = request.getParameter("remember-me");
String info_account=TenDN+":"+plainMatKhau;

Cookie c_login = new Cookie("info_account",info_account);
if(Remember!=null && Remember.equals("checked"))
{
c_login.setMaxAge(weekCookie);
Lưu
Fail
Success
Success/Fail
T/F
Kiểm tra ĐN
Tên ĐN + MK
thong;nnc (table)
thong;ndk (table)
View
welcome.jsp
View
mainplay.jsp
Model
Login.java
Controller
Index.jsp
View
User
}
else
{
c_login.setMaxAge(0);
}
response.addCookie(c_login);
//Tao session neu chua co

HttpSession session = request.getSession();
if((String)session.getAttribute("tenDN") == null) {
session.setAttribute("tenDN", TenDN);
}
if(TenDN!=null && MatKhau!=null){
DatabaseUtilities dbu = new DatabaseUtilities();
String address;
if(dbu.CheckLogin(TenDN, MatKhau))
{
//int count=dbu.CountRow("thongtinnc","1");
if(dbu.CheckExistTenDN("thongtinnc", TenDN)==false){
AddPlayertoThongtinNC(dbu,TenDN, session);
}
Player pl = dbu.getPlayer(TenDN);
request.setAttribute("player", pl);
request.setAttribute("message", "successful");
address="/WEB-INF/results/player.jsp";
}
else
{
address="./index.jsp";
}
//them so luong nguoi choi hien tai
int slPlayer=dbu.CountRow("thongtinnc", "1");
request.setAttribute("Slplayer", slPlayer);
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}


c. Xử lí Câu hỏi
Người cùng chơi
Người chơi chính
Trong xử lí câu hỏi:
- Bước 1: Người dùng đang ở trang mainplay.jsp  Servlet truy xuất trong cơ sở
dữ liệu (bảng nguonch + phuonganlc)  Trả về nội dung câu hỏi với số thứ tự
câu hỏi và các phương án lựa chọn  Servlet bật Timeout (6s với người cùng
chơi và 60s đối với người chơi chính).
- Bước 2: Người chơi chọn đáp án và gửi đáp án từ mainplay.jsp lên servlet Play
trong file Play.java.
- Bước 3: Servlet nhận đáp án và lưu đáp án vào bảng traloi. Nếu là người chơi
phụ thì chờ người chơi chính trả lời rồi mới kiểm tra đáp án có trùng với đáp án
xuất ra từ cơ sở dữ liệu (bảng dapanch).
- Bước 4: Nếu đáp án trả lời đúng thì tiếp tục chuyển qua câu hỏi tiếp theo. Nếu
đáp án trả lời sai thì chuyển sang trang failure.jsp.
Nếu trong quá trình chọn đáp án, người chơi có quyền chọn có 3 sự trợ giúp. Servlet sẽ
xử lí thống kê rồi gửi kết quả về cho người chơi chính.
Code xử lí Đăng nhập trên controller:
+ Xử lí lấy thông tin Tên đăng nhập, Mã người chơi và Mã loại người chơi từ bảng
thongtinnc:
protected void processUser(HttpServletRequest request, HttpServletResponse
response, DatabaseUtilities dbu) throws ServletException, IOException {
HttpSession session = request.getSession();
User
3 Sự trợ giúp:
+ Thăm dò
+ Hỏi dò
+ Tin người cùng chơi
60s
6s

Đáp án
Câu hỏi
Trả lời sai
Trả lời đúng
Đúng/Sai
Lưu đáp án TL
+
Câu hỏi
+
Xuất câu hỏi
failure.jsp
View
mainplay.jsp
dapanch (table)
traloi (table)
phuonganlc (table)
nguonch (table)
Model
Controller
Play.java
View
TenDN = (String)session.getAttribute("tenDN");
Player pl = dbu.getPlayer(TenDN);
request.setAttribute("userinfo", pl);
MaNC = dbu.getMaNC(TenDN);
String condition="TenDN='"+TenDN+"'";
MaLoaiNC=dbu.GetIntFieldOfRowInTable("thongtinnc", condition, "MaLoaiNC");
}
+ Hàm tạo Cookie lưu số người chơi phụ còn lại:
public Cookie createCookie(int sttch, int maxage)

{
String info_game= Integer.toString(sttch)+":"+Integer.toString(sNCPConlai);
Cookie c_gameInfo =new Cookie("gameInfo",info_game);
c_gameInfo.setMaxAge(maxage);
return c_gameInfo;
}
+ Hàm xử lí Cookie:
protected void processCookie(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException
{
//Lay cookies so thu tu cau hoi cua nguoi choi
String c_info=CookieUtilities.getCookieValue(request, "gameInfo",
cookieGameInfo);
if(c_info.equals(cookieGameInfo))
{
response.addCookie(createCookie(sttCH, weekCookie));
/*String[] game_info = c_info.split(":");
sttCH = Integer.parseInt(game_info[0])+1;
sNCPConlai = Integer.parseInt(game_info[1]);*/
}
else
{
//Gia tri sau khi thay doi thi tao lai cookie
/*String info_game= Integer.toString(sttCH)
+":"+Integer.toString(sNCPConlai);
Cookie c_gameInfo =new Cookie("gameInfo",info_game);
c_gameInfo.setMaxAge(weekCookie);
response.addCookie(c_gameInfo);*/
String[] game_info = c_info.split(":");
sttCH = Integer.parseInt(game_info[0]);

sNCPConlai = Integer.parseInt(game_info[1]);
}
}
+ Hàm doGet xử lí chơi khi đủ trang người chơi và xuất ra câu hỏi, xử lí đáp án…:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//Boolean flag=true;

DatabaseUtilities dbu = new DatabaseUtilities();
String Command=request.getParameter("command");
if(Command.equals("Play"))
{
//sttCH=1;
processUser(request, response, dbu);
processCookie(request, response);
/*MaNC = dbu.getMaNC(TenDN);
String condition="TenDN='"+TenDN+"'";
MaLoaiNC=dbu.GetIntFieldOfRowInTable("thongtinnc", condition,
"MaLoaiNC");*/

Question qt=dbu.getQuestion(Integer.toString(sttCH));
request.setAttribute("question", qt);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-
INF/results/mainplayer.jsp");
dispatcher.forward(request, response);
}
else if(Command.equals("ContinueQuestion"))
{
String address;

String DapAn=null;
String setContent=null;
String condition=null;
processCookie(request, response);
processUser(request, response, dbu);
DapAn=request.getParameter("chooseAnswer");
//Neu la NCC thi them dap an vao bang tra loi
if(MaLoaiNC==1)
{
//DapAn=request.getParameter("chooseAnswer");
setContent="STTCH="+sttCH+",DapAn='"+DapAn+"'";
condition="MaNC="+MaNC;
dbu.UpdateValueInTable("traloi", setContent, condition);
}
Question qt=dbu.getQuestion(Integer.toString(sttCH));
if(qt.getDapAn().equals(DapAn))
{
int snbiloai=sNCPConlai;
int tienthuong=0;
int capdo=0;
sttCH++;
//processUser(request, response, dbu);
// processCookie(request, response);
//thong ke so nguoi con lai sau khi tra loi cau hoi nay=so nguoi tl
dung/
sNCPConlai=dbu.sNCPTLDung(sttCH-1, qt.getDapAn())-1;
//so nguoi tl sai cau hoi nay = so nguoi con lai truoc do - so nguoi
con lai hien tai
snbiloai-=sNCPConlai;
//Lay so tien thuong, cap do tien thuong

tienthuong = dbu.Tienthuong(sNCPConlai);
capdo = dbu.Capdo(sNCPConlai);
//Lay cau hoi tiep theo
qt=dbu.getQuestion(Integer.toString(sttCH));

request.setAttribute("snBiloai", snbiloai);
request.setAttribute("capDo", capdo);
request.setAttribute("tienThuong", tienthuong);
request.setAttribute("question", qt);
//luu lai so thu cau hoi va so nguoi choi
response.addCookie(createCookie(sttCH, weekCookie));
address="/WEB-INF/results/mainplayer.jsp";
}
else
{
if(MaLoaiNC==2)
{
if(dbu.GetIntFieldOfRowInTable("dulieuncp", condition,
"BiLoai")==0)
{
setContent="BiLoai=1,Den='D'";
dbu.UpdateValueInTable("dulieuncp", setContent,
condition);
}
}
//Ket thuc game, reset lai
if(MaLoaiNC==1)
{
dbu.DeleteTable("traloi", "1");
dbu.DeleteTable("dulieuncc", "1");

dbu.DeleteTable("dulieuncp", "1");
dbu.DeleteTable("thongtinnc", "1");
//Xoa cookie
response.addCookie(createCookie(sttCH,0));
}
address="/WEB-INF/messages/failure.html";
}

RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}
+ Hàm in số thứ tự người chơi chính trả lời về cho trang mainplay.jsp:
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
//Dua vao so cau hoi cua NCC trong bang tra loi de biet NCC tra loi hay
chua
PrintWriter out = response.getWriter();
//int sttChNCP = Integer.parseInt(request.getParameter("SttCauhoi"));
DatabaseUtilities dbu= new DatabaseUtilities();
int sttChNCC = dbu.SttCauNCCDatraloi();
out.write(Integer.toString (sttChNCC));
}
d. Xử lí Đồng bộ thời gian
e. Xử lí Trợ giúp
3. Hướng dẫn sử dụng
a. Người dùng đăng nhập, đăng ký
Tại trang login, nếu đã có tài khoản, người dùng có thể nhập tên đăng nhập
và mật khẩu. Sau khi nhập xong, click vào nút “Chơi” để vào trang chào

mừng.
Trong trường hợp không có tài khoản, người dùng có thể click vào “ĐĂNG
KÍ” để đăng kí tài khoản.
Khi nhập tên đăng nhập đã tồn tại trước đó, thì hệ thống sẽ thông báo bạn
chọn tên khác.
Trường hợp mật khẩu không khớp hệ thống cũng check lỗi

×