44
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Java: Chiếc Nón Kỳ Diệu Vui lòng tải mã nguồn + run + hướng dẫn : http://www.mediafire.com/?dphl7ycupz6c548 0

Chiêc nón kì diệu

Embed Size (px)

DESCRIPTION

Lập trình hướng đối tượng OOP

Citation preview

Page 1: Chiêc nón kì diệu

LẬP TRÌNH HƯỚNG

ĐỐI TƯỢNGJava: Chiếc Nón Kỳ Diệu

Vui lòng tải mã nguồn + run + hướng dẫn :

http://www.mediafire.com/?

dphl7ycupz6c548

0

Page 2: Chiêc nón kì diệu

Hà Nội, 11 - 2012

Mục lục

Mục lục..........................................................................................................................0

Lời nói đầu....................................................................................................................3

Mục Lục Các Biểu Đồ..................................................................................................4

A. Tổng quan về vấn đề liên quan.............................................................................4

I. Cơ sở dữ liệu.......................................................................................................5

II. Lập trình đồ họa 2D trong java.....................................................................5

1. Nạp một đối tượng ảnh từ file........................................................................5

2. Các hiệu ứng đồ họa bới ảnh..........................................................................5

B. Tổng quan về bài toán...........................................................................................6

1. Yêu cầu chương trình.........................................................................................6

2. Chức năng chương trình....................................................................................6

3. Thiết kế chương trình........................................................................................6

C. Phân tích thiết kế mức kiến trúc..........................................................................7

I. Các biểu đồ use case và đặc tả...........................................................................7

1. Biểu đồ use case..................................................................................................7

2. Đặc tả................................................................................................................9

II. Các biểu đồ trình tự...................................................................................12

III. Biểu đồ Class..................................................................................................19

D. Thiết kế chi tiết và giải pháp kỹ thuật...............................................................20

I. Gói DB...............................................................................................................20

1. Lớp Dbconnect..............................................................................................20

1

Page 3: Chiêc nón kì diệu

2. Lớp TopicDB.................................................................................................20

3. Lớp QuestionDB............................................................................................20

II. Gói GameEngine...........................................................................................20

1. Lớp GamePanel.............................................................................................21

2. Lớp GameState..............................................................................................22

3. Lớp GameManager.......................................................................................23

1. Lớp CreatGameState....................................................................................24

2. Lớp TopicManagerState...............................................................................25

IV. Gói GameFinish.............................................................................................25

1. Lớp FinishState.............................................................................................25

V. Gói GameStart..................................................................................................25

VI. Gói GameObject............................................................................................26

1. Lớp Topic.......................................................................................................27

2. Lớp Question.................................................................................................27

3. Lớp Player.....................................................................................................28

VII. Gói GamePlay................................................................................................28

1. Hat..................................................................................................................30

E. Kết luận và đánh giá............................................................................................32

I. Kết quả đạt được..............................................................................................32

II. Hạn chế...........................................................................................................32

III. Phân chia công việc.......................................................................................32

IV. Kế hoạch và lịch họp nhóm..........................................................................33

Tài liệu tham khảo......................................................................................................34

2

Page 4: Chiêc nón kì diệu

Lời nói đầu

Lập trình hướng đối tượng là một trong những kĩ năng quan trọng nhất trong lĩnh vực công nghệ thông tin hiện nay. Trong việc học tập môn này thì việc rèn luyện tư duy hướng đối tượng là quan trọng nhất. Khi mới học lập trình hướng đối tượng thì chúng ta nên dùng các ví dụ mà ranh giới giữa các đối tượng là rõ ràng. Có rất nhiều bài tập sẽ giúp chúng ta làm quen và rèn luyện các kĩ năng, tư duy trong lập trình hướng đối tượng. Điển hình trong đó phải kể tới bài tập tạo game Chiếc nón kì diệu. Với đề tài này, chúng em có thể phát triển rất nhiều cách tư duy hướng đối tượng, hiểu được sâu sắc các nguyên lý của lập trình hướng đối tượng, thêm nữa là rèn luyện và phát triển các kiến thức về cơ sở dữ liệu và lập trình đồ họa trong game 2D. Chương trình của chúng em được viết trên ngôn ngữ thuần hướng đối tượng là Java.

Do mới làm quen với cách tư duy hướng đối tượng cũng như kiến thức về lập trình game nên chắc hẳn trong bài tập sẽ còn nhiều hạn chế. Chúng em mong thầy giáo sẽ đánh giá và rút ra những bài học kinh nghiệm, để chúng em hoàn thiện hơn cả về kiến thức và kĩ năng. Chúng em xin trân thành cảm hơn thầy!.

3

Page 5: Chiêc nón kì diệu

Mục Lục Các Biểu ĐồHình 1:Biểu đồ use case

Hình 2:Biểu đồ trình tự của ca sử dụng thêm chủ đề.

Hình 3:Biểu đồ trình tự của ca sử dụng xóa chủ đề.

Hình 4:biểu đồ trình tự cho ca sử dụng sửa chủ đề.

Hình 5:Biểu đồ trình tự của ca sử dụng thêm câu hỏi.

Hình 6:Biểu đồ trình tự của ca sử dụng xóa câu hỏi.

Bảng 7:Biểu đồ trình tự ca sử dụng sửa câu hỏi.

Hình 8:Biểu đồ trình tự ca sử dụng nhập tên

Hình 9:Biểu đồ trình tự ca sử dụng chọn chủ đề.

Hình 10:Biểu đồ trình tự ca sử dụng quay nón.

Hình 11:Biểu đồ trình tự ca sử dụng đoán ô chữ.

Hình 12:Biểu đồ trình tự ca sử dụng trả lời.

4

Page 6: Chiêc nón kì diệu

A. Tổng quan về vấn đề liên quan.Chương trình được xây dựng dựa trên ngôn ngữ java và sử dụng cơ sở dữ liệu MySQL.

I. Cơ sở dữ liệu.Cơ sở dữ liệu bao gồm 2 bảng là tblquestion và tbltopic.

Thuộc tính Diễn giải Kiểu dữ liệu Ghi chúIdQuestion Mã câu hỏi Int Khóa chínhQuestion câu hỏi VARCHAR(100)

Answer Đáp án VARCHAR(50)

Note Ghi chú TextIdTopic Mã chủ đề int Khóa ngoại

Thuộc tính Diễn giải Kiểu dữ liệu ghi chúIdTopic Mã chủ đề int Khóa chínhTopic Chủ đề VARCHAR(45)

II. Lập trình đồ họa 2D trong java1. Nạp một đối tượng ảnh từ file

Ta có thể sử dụng các đối tượng của lớp BufferedImage. Tại sao lại là lớp BufferedImage chứ không phải Image? BufferedImage là lớp mở rộng của Image nên nó kế thừa các khả năng của lớp Image, hơn nữa nó có 2 lợi thế quan trọng:

Các dữ liệu cần thiết cho việc thao tác với ảnh được truy cập dễ dàng hơn thông qua các phương thức của nó.

BufferedImage được tự động chuyển đổi thành "ảnh được quản lý" bởi Java Virtual Machine (JVM) ngay khi có thể, nhờ đó cho phép hỗ trợ bởi phần cứng khi được đưa ra màn hình.

Để nạp một ảnh từ file vào đối tượng BufferedImage, ta có thể dùng phương thức tĩnh read() của lớp ImageIO:

5

Page 7: Chiêc nón kì diệu

BufferedImage bimg = ImageIO.read(getClass().getResource(file));

2. Các hiệu ứng đồ họa bới ảnhCác thao tác xử lý ảnh trong Java 2D hầu hết nằm trong những lớp

con của dao diện BufferedImageOp

Đoạn mã dưới đây cho thấy cách tạo ra một đối tượng BufferedImage, sau đó thực hiện thao tác co dãn ảnh nhờ vào một đối tượng của lớp RescaleOp.

BufferedImage source = ImageIO.read(getClass().getResource(file_name));

RescaleOp = new RescaleOp(-1.0f, 255f, null);BufferdImage destination = RescaleOp.fillter(source, null);

Hàm fillter() thực hiện thao tác co dãn ảnh, lấy input là đối tượng source và trả về một thể hiện của lớp BufferedImage.

Có một số phương thức thao tác với ảnh có thể thực hiện "tại chỗ", tức là không cần phải tạo ra một đối tượng mới để lưu kết quả.

Một cách khác để thực hiện các hiệu ứng với ảnh là sử dụng BufferedImageOp như là một tham số truyền vào phương thức drawImage() của đối tượng đồ họa Graphics2D. Đối tượng ảnh sẽ được xử lý, và kết quả được đưa trực tiếp ra thiết bị đồ họa.

g2d.drawImage(source, negOp, x, y); // g2D là đối tượng Graphics.

B. Tổng quan về bài toán.1. Yêu cầu chương trình.

Xây dựng trò chơi chiếc nón kỳ diệu.Là một trò chơi đơn giản với 3 người chơi với nhiệm vụ đoán chữ qua 3 vòng chơi.

Ai là người có số điểm cao nhất qua 3 vòng chơi sẽ là người chiến thắng.

2. Chức năng chương trình.1. Quản lý câu hỏi

Cho phép người chơi thêm ,sửa ,xóa chủ đề.Cho phép người chơi thêm,sửa ,xóa các câu hỏi thuộc 1 chủ đề.

2. Chơi 3 người chơi lần lượt được chọn chủ đề của từng vòng chơi và tại mỗi vòng chơi 3 người lần lượt được quay nón để đoán ô chữ.

6

Page 8: Chiêc nón kì diệu

3. Thiết kế chương trình.

Sử dụng ngôn ngữ lập trình java để xây dựng chương trình chính và sử dụng cơ sở dữ liệu My SQL để quản lý câu hỏi và chủ đề.

Tổ chức chương trình theo mô hình MVC.

Tổ chức chương trình chính thành các package với các chức năng riêng rẽ của chương trình.

Tổ chức cơ sở dữ liệu quản lý các câu hỏi và đáp án tương ứng theo từng chủ đề.

C. Phân tích thiết kế mức kiến trúc.I. Các biểu đồ use case và đặc tả

1. Biểu đồ use case.

7

Page 9: Chiêc nón kì diệu

8

Page 10: Chiêc nón kì diệu

Hình 1:Biểu đồ use case

2. Đặc tảa. Thêm Chủ Đề

Mô tả tóm tắt: Tên use case :Thêm Chủ Đề Mục Đích:Giúp người chơi thêm 1 chủ đề. Tóm lược:Người chơi chọn chức năng thêm chủ đề,rồi điền

tên chủ đề muốn thêm. Đối tác:người chơi.

Mô tả kịch bản chính:

Ca sử dụng bắt đầu khi người chơi chạy chương trình và chọn quản lý câu hỏi,sau đó chọn chức năng thêm chủ đề hệ thống sẽ đưa ra 1 cửa sổ cho phép người chơi điền tên chủ đề mình muốn thêm sau đó nhấn OK hệ thống sẽ thêm 1 chủ đề vào cơ sở dữ liệu.

b. Xóa Chủ ĐềMô tả tóm tắt:

Tên use case:Xóa Chủ Đề. Mục đích:giúp người chơi xoá 1 chủ đề. Tóm lược:Người chơi chọn chủ đề muốn xóa rồi chọn chức

năng xóa chủ đề. Đối tác :người chơi

Mô tả kịch bản chính: Ca sử dụng bắt đầu khi người chơi chọn chủ đề muốn xóa

sau đó chọn chức năng xóa chủ đề,hệ thống hỏi lại có muốn xóa chủ đề ,nếu xóa chủ đề toàn bộ câu hỏi trong chủ đề bị xóa toàn bộ.Nhấn YES để hoàn thành việc xóa chủ đề đó trong cơ sở dữ liệu,nhấn NO để hủy bỏ thao tác.

c. Sửa Chủ ĐềMô tả tóm tắt:

Tên use case:Sửa Chủ Đề. Mục đích:giúp người chơi sửa 1 chủ đề. Tóm lược:người chơi chọn chủ đề muốn sửa sau đó chọn

chức năng sửa chủ đề. Đối tác:người chơi.

9

Page 11: Chiêc nón kì diệu

Mô tả kịch bản chính: Ca sử dụng bắt đầu khi người chơi chọn chủ đề muốn thay

đổi ,hệ thống sẽ hiện ra 1 cửa sổ cho phép sửa tên chủ đề,sau khi nhập tên chủ đề muốn sửa nhấn OK để hoàn thành việc sửa tên ,nhấn CANCEL để hủy bỏ thao tác.

d. Thêm Câu HỏiMô tả tóm tắt:

Tên use case:Thêm Câu Hỏi. Mục đích:giúp người chơi thêm 1 câu hỏi trong 1 chủ đề. Tóm lược:người chơi nhập thông tin cho câu hỏi sau đó chọn

chức năng thêm câu hỏi Đối tác:người chơi.

Mô tả kịch bản chính: Ca sử dụng bắt đầu khi người chơi chọn 1 chủ đề sau đó điền

các thông tin về câu hỏi mà muốn thêm vào chủ đề đó :gợi ý ,đáp án,ghi chú.Sau đó người chơi chọn chức năng thêm câu hỏi,hệ thống sẽ hỏi lại xem bạn có muốn chắc thêm câu hỏi này không.Nhấn OK để hoàn thành việc thêm câu hỏi,nhấn NO để hủy bỏ thao tác.

e. Xóa Câu HỏiMô tả tóm tắt:

Tên use case:Xóa Câu Hỏi Mục đích:giúp người chơi xóa 1 câu hỏi trong chủ đề. Tóm lược:người chơi chọn chủ đề muốn xóa rồi chọn chức

năng xóa chủ đề.Mô tả kịch bản chính:

Ca sử dụng bắt đầu khi người chơi chọn câu hỏi muốn xóa sau đó chọn chức năng xóa câu hỏi ,hệ thống sẽ hỏi lại bạn có chắc muốn xóa câu hỏi này .Nhấn YES để hoàn thành việc xóa câu hỏi,nhấn No để hủy bỏ thao tác.

f. Sửa Câu HỏiMô tả tóm tắt:

Tên use case:Sửa Câu Hỏi Mục đích:giúp người chơi sửa câu hỏi trong 1 chủ đề. Tóm lược: người chơi thay đổi thông tin của câu hỏi rồi chọn

chức năng sửa đổi câu hỏi

10

Page 12: Chiêc nón kì diệu

Mô tả kịch bản chính: Ca sử dụng bắt đầu khi người chơi chọn câu hỏi trong 1 chủ

đề nào đó ,rồi thay đổi các thông tin của nó sau đó chọn chức năng sửa câu hỏi ,hệ thống sẽ hỏi lại bạn có muốn chắc thay đổi câu hỏi .Nhấn OK để hoàn thành việc sửa câu hỏi,nhấn NO để hủy bỏ thao tác.

g. Nhập TênMô tả tóm tắt:

Tên use case:Nhập Tên Mục đích:đặt tên cho người chơi để phân biệt các người chơi

với nhau Tóm lược:người chơi điền tên vào ô người chơi.

Mô tả kịch bản chính: Người chơi điền tên mình muốn hiển thị vào ô tên người

chơi tương ứng với mình.h. Chọn Chủ Đề

Mô tả tóm tắt: Tên use case:Chọn Chủ Đề Mục đích:chọn chủ đề của vòng thi mà mình là người chơi

đầu tiên. Tóm lược:người chơi chọn chủ đề trong ô chủ đề tương ứng

với vòng thi mà mình chơi đầu tiên. Mô tả kịch bản chính:

Người chơi chọn chủ đề trong ô chủ đề tương ứng với vòng thi mà mình chơi đầu tiên.

i. Quay NónMô tả tóm tắt:

Tên use case:Quay Nón Mục đích:quay nón để xác đinh phần thưởng nhận được tại

mỗi lượt chơi. Tóm lược :Người chơi dùng chuột kéo thả trên giao diện

chiếc nónMô tả kich bản chính:

Tại mỗi lượt chơi trước khi người chơi đoán ô chữ,người chơi phải quay nón để xác định phần thưởng tại lượt chơi đó nếu mình đoán đúng.Người chơi dùng chuột kéo thả trên giao diện chiếc nón đến khi chiếc nón dừng lại thì phần

11

Page 13: Chiêc nón kì diệu

thưởng trên thanh chỉ điểm là của người chơi. Nếu là ô mất lượt thì người chơi sẽ bị mất lượt cho người chơi kế tiếp nếu không thì người chơi được quyền đoán ô chữ.

j. Đoán ChữMô tả tóm tắt:

Tên use case:Đoán Chữ Mục đích:Đoán chữ trong mỗi lượt chơi Tóm lược:Người chơi sử dụng chuột chọn ô chữ mình muốn

đoán trong mỗi lượt chơi.Mô tả kịch bản chính:

Tại mỗi lượt chơi người chơi được quyền đoán 1 chữ cái,người chơi dùng chuột chọn ô chữ trong bảng chữ mà mình muốn đoán,sau khi quay nón người chơi có 5s để đoán ô chữ. Nếu sau 5s mà không đoán người chơi sẽ mất lượt chơi vào người kế tiếp.Nếu đoán đúng chữ cái thì ô chữ đáp án sẽ hiện các chữ cái tương ứng lên và ngươi chơi sẽ nhận được phần thưởng tương ứng của mình(cộng điểm,thêm lượt…)và được tiếp tục chơi.Nếu đoán sai người chơi sẽ mất lượt cho người chơi kế tiếp.

k. Trả LờiMô tả tóm tắt:

Tên use case:Trả Lời Mục đích:ngươì chơi sẽ đoán đáp án của câu hỏi sau mỗi

lượt chơi nếu đã biết kết quả. Tóm Lược:Người chơi được quyền đoán đáp án của câu hỏi

tại mỗi lượt chơi sử dụng bàn phím.Mô tả kịch bản chính:

Tại mỗi lượt chơi sau khi đã đoán đúng ô chữ nếu người chơi đã biết đáp án của vòng thi đó khi mà chưa đoán hết các ô chữ người đó có quyền đoán toàn bộ ô chữ.Nhấn chọn chức năng Trả Lời,hệ thống sẽ hiện ra 1 cửa sổ cho phép nhập tên của đáp án vòng chơi đó.Sau khi điền đáp nhấn Trả lời để xác nhận.Nếu đoán đúng người chơi sẽ được cộng điểm và vòng chơi đó kết thúc,nếu đoán sai vòng chơi đó tiếp tục và người chơi bị loại.

II. Các biểu đồ trình tự

12

Page 14: Chiêc nón kì diệu

Hình 2:Biểu đồ trình tự của ca sử dụng thêm chủ đề.

Hình 3:Biểu đồ trình tự của ca sử dụng xóa chủ đề.

13

Page 15: Chiêc nón kì diệu

Hình 4:biểu đồ trình tự cho ca sử dụng sửa chủ đề.

Hình 5:Biểu đồ trình tự của ca sử dụng thêm câu hỏi.

14

Page 16: Chiêc nón kì diệu

Hình 6:Biểu đồ trình tự của ca sử dụng xóa câu hỏi.

15

Page 17: Chiêc nón kì diệu

Bảng 7:Biểu đồ trình tự ca sử dụng sửa câu hỏi.

Hình 8:Biểu đồ trình tự ca sử dụng nhập tên

16

Page 18: Chiêc nón kì diệu

Hình 9:Biểu đồ trình tự ca sử dụng chọn chủ đề.

17

Page 19: Chiêc nón kì diệu

Hình 10:Biểu đồ trình tự ca sử dụng quay nón.

Hình 11:Biểu đồ trình tự ca sử dụng đoán ô chữ.

18

Page 20: Chiêc nón kì diệu

Hình 12:Biểu đồ trình tự ca sử dụng trả lời.

III. Biểu đồ Class.Từ biểu đồ trình tự như trên chúng ta có thể xây dựng biểu đồ class ở dạng cơ bản như sau :

19

Page 21: Chiêc nón kì diệu

D. Thiết kế chi tiết và giải pháp kỹ thuật.I. Gói DB.

Gói này dùng để kết nối với cơ sở dữ liệu.

Gói DB gồm 3 lớp là :DBconnect,TopicDB,QuestionDB.

1. Lớp Dbconnectquản lý quá trình đóng,mở kết nối đến cơ sở dữ liệu.

2. Lớp TopicDB

truy xuất đến bảng tbltopic trong cơ sở dữ liệu

3. Lớp QuestionDBtruy xuất đến bảng tblquestion trong cơ sở dữ kiệu.

II. Gói GameEngine.

20

Page 22: Chiêc nón kì diệu

1. Lớp GamePanel

Lớp này kế thừa lớp Jpanel.

a. Thuộc tính:Private:

Thread animator :dùng để tạo luồng xử lý thời gian thực cho game.

Boolean running,gameOver,isPaused:cho biết trạng thái của game và điều khiển luồng animator.Khi game đang chạy thì

21

Page 23: Chiêc nón kì diệu

running mang giá trị là true,khi kết thúc game thì gameOver mang giá trị là true,còn trong khi game tạm dừng thì cả running và isPaused đều mang giá trị là true.

Int period =10(ms) khoảng thời gian giữa 2 lần game thực hiện các thao tác của mình.

Graphics2D dbg2D và Image dbImage dùng để đưa dữ kiệu lên màn hình,áp dụng kỹ thuật anti-conflict bằng cách dùng 1 bộ đệm cho màn hình.

GameManger gamemanager :dùng để quản lý các trạng thái của game :khởi tạo các trạng thái,cập nhật trạng thái hiện tại,chuyển trạng thái mới,thoát game.

Public:

Int PWIDTH,PHEIGHT:kích thước của panelb. Phương thức

gameUpdate():cập nhật các trạng thái trong game và xử lý các đối tượng trong game.

gameRender():vex các đối tượng đồ họa trong game đã được cập nhật ra bộ đệm.

paintScreen():dùng để đưa bộ đệm đồ họa ra màn hình. startGame():khởi tạo và chạy luồng đồ họa aminator để cử lý

các hoạt đọng trong game. getWidth(),getHeight():trả về kích thước của 1 panel cụ thể. GamePanel():hàm khởi tạo constructor. addNotify():mở rộng phương thức addNotify() gốc và thêm

vào thao tác startGame() để chay đối tượng GamePanel. stopGame():dừng game và thoát. pauseGame() :tạm thời dừng game. run() : là phương thức ghi đè, dùng để đặt vòng lặp chính

của đối tượng GamePanel, và cũng chính là các thao tác mà luồng animator thực hiện.

2. Lớp GameState.Đây là một lớp trừu tượng, dùng để dại diện cho các trạng thái của game, chứa một số dữ liệu thiết yếu và thao tác cơ bản.

a. Thuộc tính:Protected:

22

Page 24: Chiêc nón kì diệu

StateName stateName: là tên của trạng thái game. Đi kèm là thao tác getName().

StatusValue Status: chế độ hiện thời của trạng thái game. Đi kèm là thao tác getStatus().

StateName NextGame : là tên của trạng thái game kế tiếp. Đi kèm là thao tác getNextState().

GamePanel gamePanel: đây là thuộc tính sử dụng để thêm, xóa các đối tượng trong trạng thái game hiện thời, nhờ đó có thể nghe và phản ứng được với các sự kiện.

b. Phương thức. initComponents(): Khởi tạo các thành phần của trạng thái

game. addComponents(): Thêm các thành phần cần thiết vào đối

tượng gamePanel. Update(): cập nhật và xử lý hoạt động trong game Render(): vẽ các đối tượng đồ họa ra bộ đệm Clear(): xóa bỏ các đối tượng đã thêm trong thao tác addComponents() và cài đặt lại các thông số nếu cần thiết.

3. Lớp GameManager.a. Thuộc tính.

Private: StartMenuState StartMenu: trạng thái menu chính của game CreatGameState CreateGame: trạng thái tạo game mới TopicManageState TopicManage: trạng thái quản lý dữ liệu. PlayingState Playing: trạng thái chơi game. FinishState FinishGame: trạng thái kết thúc chương trình Player players[]: mảng các đối tượng người chơi trong game Question questions[]: mảng các câu hỏi cho các vòng chơi. GameState CurrentState: là một tham chiếu tới trạng thái

game hiện tại. boolean exitGame: cho biết game đã kết thúc hay chưa.

b. Phương thức GameManager() – constructor: Khởi tạo các thuộc tính

(players, questions) và các trạng thái game. Sau đó đặt CurrentState tham chiếu tới StartMenu.

23

Page 25: Chiêc nón kì diệu

updateCurrentState(): kiểm tra và cập nhật trạng thái mới cho game. Nếu cần thì sẽ chuyển sang trạng thái game mới, hoặc thoát game nếu CurrentState là rỗng.

III. Gói GameData

1. Lớp CreatGameState.

24

Page 26: Chiêc nón kì diệu

Kế thừa từ lớp GameState Tạo 1 cửa sổ mới để lấy dữ liệu và tạo mới một game.Kết nối với cơ sở dữ liệu để lấy các câu hỏi cho các vòng chơi.

2. Lớp TopicManagerState.Là trạng thái game quản lý dữ liệu về các chủ đề và câu hỏi.Kết nối với cơ sở dữ liệu và cho phép người dùng thêm, sửa, xóa câu hỏi cũng như các chủ đề.

IV. Gói GameFinish.

1. Lớp FinishStateKế thừa từ lớp GameState.Trạng thái game kết thúc: đưa ra bảng tổng kết điểm và chờ 1 khoảng thời gian trước khi thoát chương trình.

V. Gói GameStart

25

Page 27: Chiêc nón kì diệu

Kế thừa từ lớp GameState.Chứa dữ liệu và thao tác cho phần menu chính. Gần như không có thêm thuộc tính và phương thức so với lớp cha. Các phương thức abstract được ghi đè để phù hợp cho trạng thái StartMenu.

VI. Gói GameObject.

26

Page 28: Chiêc nón kì diệu

1. Lớp TopicÁnh xạ trực tiếp với cơ sở dữ liệu gồm 2 thuộc tính là 2 trường trong bảng tbltopic trong co sở dữ liệu với các phương thức get,set.

2. Lớp Questiona. Thuộc tính

Private : noChar: đây là thuộc tính tĩnh, là số kí tự trong bảng chữ cái. questionID: ID của câu hỏi, dùng để thao tác với CSDL hint: gợi ý answer: câu trả lời (tiếng Việt, có dấu) phrase: cụm từ phân tích từ answer, bỏ đi các dấu và khoảng

trắng. countChar: đây là mảng kiểu int dùng để lưu trữ số lần xuất

hiện của mỗi kí tự trong phrase. Truy cập thông qua chỉ số từ 1 đến 26, tương ứng với 26 chữ cái.

b.Phương thức

27

Page 29: Chiêc nón kì diệu

public:

Question() - constructor: tạo đối tượng mới, khởi tạo mảng countChar.

Question(String ans, String hint): khởi tạo đối tượng mới và khởi gán cho 2 thuộc tính answer, hint.

int[] getCount(int index): tính toán và trả về 1 mảng số nguyên, với số đầu tiên là n - số lần xuất hiện của kí tự được đại diện bởi chỉ số index, n số sau là vị trí trong xâu phrase.

Các hàm lấy dữ liệu: getHint(), getQuestionID(), getAnswer(), getPhrase()

Các hàm đặt dữ liệu: setHint(), setQuestionID(), setAnswer(), setPhrase().

3. Lớp Playera. Thuộc tính:

remainTurn: số lượt đoán sai liên tiếp có thể trước khi bị loại, Mặc định là 3, tức là người chơi chỉ được đoán sai tối đa 3 lượt liên tiếp, nếu không sẽ bị loại.

Name: tên người chơi roundScore: điểm của người chơi riêng tại vòng thi hiện tại Score: Tổng điểm của người chơi tính tới vòng thi hiện tại. Enable: cho biết liệu người chơi có tiếp tục được chơi nữa

không hay đã bị loại.b. Phương thức:

Player(Player p) – Constructor: nhận đầu vào là 1 đối tượng Player, khởi tạo 1 đối tượng Player mới có dữ liệu được sao chép từ p.

Disable(): để đặt thuộc tính enable về false, và remainTurn là 0.

VII. Gói GamePlay

28

Page 30: Chiêc nón kì diệu

gói này gồm các lớp:

-ButtonPanel

-CharPanel-

-Hat

-PhrasePanel

-PlayingState

-TextPanel

-answerForm

29

Page 31: Chiêc nón kì diệu

1. Hata. Thuộc tính:

Private: ImageManager imgManager: bộ quản lý hình ảnh và các

hiệu ứng cho đối tượng nón. BufferedImage imgHat, imgCursor: ảnh chiếc nón và con trỏ

của nón. Dimension Size: Kích thước của nón int R = 150, D = 300: bán kích và đường kính của nón Point Position: vị trí của nón trong không gian tọa độ của

một đối tượng Graphics2D cụ thể, sử dụng để vẽ nón. Point vctCursor: đây là vector có gốc là tâm nón, ngọn là

điểm click chuột của người dùng trên nón. double radian: mặc định là 0. Biểu diễn góc mà nón đã quay

được so với vị trí mặc định ban đầu. double omega: biểu diễn tốc độ góc của nón vào thời điểm

người chơi nhả chuột hoặc kéo chuột ra ngoài phạm vi nón. double gama: biểu diễn gia tốc của nón, được điều chỉnh để

luôn ngược dấu với omega. Mặc định là -0.05. double ratio = 5: đây là tỷ lệ dùng để tính toán ra omega. long startRotateTime: thời điểm nón bắt đầu quay tự do. double timeRotate: Khoảng thời gian quay tự do của nón boolean stopRotate: mặc định là false, cho biết nón đã dừng

trạng thái quay tự do hay chưa. boolean active: Mặc định là true. Cho biết người dùng có thể

điều khiển nón được hay không. Khi nón quay tự do thì active là false, người chơi không thể điều khiển nón nữa.

bolean pressed: Cho biết người chơi đã click chuột vào nón trong trạng thái active hay chưa. Nếu pressed = true thì cho nón quay dựa theo chuyển động của chuột.

Point cursor: Cho biết vị trí con trỏ khi vẽ nón. double rotated: cho biết nón đã quay được một góc là bao

nhiêu kể từ khi nón bắt đầu quay tự do (tính theo rad). double er: đây là góc ở đỉnh của mỗi một ô điểm trên nón. int noElement: Số ô điểm được chia ra trên nón

30

Page 32: Chiêc nón kì diệu

private double maxOmega: Mặc định là 2, đây là trị tuyệt đối của tốc độ góc lớn nhất khi nón quay tự do mà người chơi có thể đạt được.

double minOmega: Mặc định là 0.2, là trị tuyệt đối của tốc độ góc ban đầu nhỏ nhất.

MouseAdapter mouseMotion, mouseOp: Đây là 2 đối tượng dùng để thêm và bỏ bộ xử lý sự kiện cho nón.

b. Phương thức:Private:

startRotate(): thiết lập các thông số cho nón để bắt đầu quá trình quay tự do, bao gồm cả kết quả quay và thời gian quay tự do.

checkMouse(MouseEvent e): kiểm tra vị trí của chuột có ở trong nón hay không.

processMousePressed(MouseEvent e): xử lý và cập nhật thông số khi chuột được nhấn.

processMouseDragged(MouseEvent e): xử lý và cập nhật thông số của chuột khi nón được kéo bằng chuột.

getValueAt(double r): trả về chỉ số của ô điểm tương ứng r là với góc mà nón đã quay được.

Public:

Hat(): khởi tạo và cài đặt các thông số cho nón. resetStatus(): cài đặt lại trạng thái trở về mặc định cho nón. Enable() và Disable(): thêm và bỏ các bộ xử lý sự kiện của

nón. setImageSource(String src): chọn thư mục chứa các ảnh cần

thiết để vẽ nón. setSize(Dimenion d): cài đặt các kích thước của nón, bao

gồm cả R và D. setPivotLocation(Point p): đặt vị trí của nón dựa theo vị trí

trục quay. Show(Graphics2D g): vẽ nón ra đối tượng g. Rotate(): Quay nón dựa theo tốc độ góc ban đầu, gia tốc, và

thời gian kể từ thời điểm startRotateTime đã được cập nhật trong hàm startRotate().

31

Page 33: Chiêc nón kì diệu

isRotateMode(): cho biết nón có đang ở trạng thái quay tự do không

getResult(): trả về một số nguyên là chỉ số của ô điểm kết quả sau khi nón dừng quay tự do.

setNoElement(int num): cài đặt số ô điểm trên nón là num. setGama(double d): cài đặt tốc độ góc setRatio(double d): cài đặt tỷ lệ ratio getForce(): trả lại lực quay nón, dựa theo tốc độ góc ban đầu

omega. getForcePercent(): trả lại tỷ lệ % của lực quay dựa theo lực

cao nhất và yếu nhất có thể. Stopped(): trả về kiểu boolean, cho biết nón đã dừng lại sau

khi quay tự do hay chưa. setMaxOmega(double d) và setMinOmega(double d): dùng

để đặt lại giá trị tốc độ góc lớn nhất và nhỏ nhất có thể của nón.

E. Kết luận và đánh giá.I. Kết quả đạt được.

a. Kỹ năng làm việc nhóm và lập kế hoặc mục tiêu được phát triển.

b. Kỹ năng, kỹ thuật lập trình được tăng cường, đặc biệt là trên ngôn ngữ Java

c. Kiến thức và tư duy lập trình hướng đối tượng được hoàn thiện hơn.

d. Kiến thức và kỹ năng làm việc với cơ sở dữ liệu được trau dồi

e. Ngoài ra, chúng em cũng biết thêm những kiến thức về lập trình game, đồ họa 2D trên Java.

II. Hạn chế

a. Tuy đã rất cố gắng nhưng chúng em vẫn không đủ thời gian để tạo ra đủ 4 vòng chơi, thiếu đi phần chơi cuối cùng cho người chiến thắng trong 3 vòng đầu.

c. Chưa thể đưa âm thanh vào game để sinh động hơn.

d. Đồ họa còn sơ sài, chưa chuyên nghiệp

e. Kho câu hỏi còn ít, chưa phong phú.III. Phân chia công việc.

32

Page 34: Chiêc nón kì diệu

Lê Đức Thịnh (35%)

Nguyễn Lương Hiền (25%)

Nguyễn Văn Hạ (25%)

Mai Minh Long (15%)

Ngôn ngữ Java Biểu đồ lớp Cơ sở dữ liệu Thu thập ảnh, dữ liệu câu hỏi

Biểu Đồ Use Case

Biểu đồ trình tự Lớp Question Phân tích và thiết kế giao

diệnLập trình game

frameworkLập báo cáo Lập trình CSDL Làm slide và in

báo cáo

IV. Kế hoạch và lịch họp nhóm

Tuần Ngàyhọp nhóm Mục tiêu cần đạt5 22/09 Hoàn thành đề cương

6 29/09 Hoàn tất báo cáo phần 1 và 2

7 05/10 Hoàn tất việc thiết kế và các giải pháp kĩ thuật

8 12/10 Lập trình chi tiết và hoàn tất kiểm thử

9 19/10 Tối ưu hóa, nâng cấp và hoàn thiện hóa các tính năng

10 26/10 In báo cáo, nộp báo cáo

33

Page 35: Chiêc nón kì diệu

Tài liệu tham khảo

[1] Slide bài giảng môn lập trình hướng đối tượng – TS.Cao Tuấn Dũng-Viện Công Nghệ Thông Tin Và Truyền Thông-Đh Bách Khoa Hà Nội.[2] Java How to program 9th edition, Paul Deitel & Harvey Deitel[3] Killer Game Programming In Java, Andrew Davison[4] Thinking In Java 4th edition, Bruce Eckel[5] Nguồn tài liệu từ internet

34