1. Trang chủ
  2. » Luận Văn - Báo Cáo

thiết kế chương trình chiếc nón kì diệu

32 919 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 873,38 KB

Nội dung

Với đề tài này, chúng em có thể pháttriể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ế

Trang 1

TRƯờNG ĐạI HọC BáCH KHOA Hà NộI VIệN CÔNG NGHệ THÔNG TIN Và TRUYềN THÔNG

BàI TậP LớN LậP TRìNH hớng đối tợng

Đề TàI: Chiếc nón kỳ diệu

Hà Nội, 11 - 2012

Mục lục

Giáo viên hớng dẫn : Cao tuấn dũng

Sinh viên thực hiện

Trang 2

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ấttrong 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ìnhhướng đối tượng thì chúng ta nên dùng các ví dụ mà ranh giới giữa các đốitượ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ệncá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áttriể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 emmong thầy giáo sẽ đánh giá và rút ra những bài học kinh nghiệm, để chúng emhoà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ơnthầy!

Trang 3

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.

Trang 4

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

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

1. 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:

Trang 5

• 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ảnlý" 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:

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

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

Cá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ớpRescaleOp

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ượngsource 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ụngBufferedImageOp như là một tham số truyền vào phương thứcdrawImage() 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.

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 3ngườ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

Trang 6

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ữ

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ừngchủ đề

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

1. Biểu đồ use case.

Trang 8

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ềntê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ứcnă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óasau đó chọn chức năng xóa chủ đề,hệ thống hỏi lại có muốnxó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ọnchức năng sửa chủ đề

• Đối tác:người chơi

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

Trang 9

• 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ủ đề,saukhi nhập tên chủ đề muốn sửa nhấn OK để hoàn thành việcsửa tên ,nhấn CANCEL để hủy bỏ thao tác.

d. Thêm Câu Hỏi

Mô 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ọnchức năng thêm câu hỏi

• Đối tác:người chơi

e. Xóa Câu Hỏi

Mô 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ứcnăng xóa chủ đề

• 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ọnchức năng sửa đổi câu hỏi

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ứcnăng sửa câu hỏi ,hệ thống sẽ hỏi lại bạn có muốn chắc thay

Trang 10

đổ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ên

Mô 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ơivới nhau

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

• 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 ứngvới vòng thi mà mình chơi đầu tiên

• Tên use case:Quay Nón

• Mục đích:quay nón để xác đinh phần thưởng nhận được tạimỗi lượt chơi

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

Mô 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ườichơ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êngiao diện chiếc nón đến khi chiếc nón dừng lại thì phầnthưởng trên thanh chỉ điểm là của người chơi Nếu là ô mấtlượt thì người chơi sẽ bị mất lượt cho người chơi kế tiếp nếukhô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

Trang 11

• 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ượtchơ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êmlượt…)và được tiếp tục chơi.Nếu đoán sai người chơi sẽ mấtlượt cho người chơi kế tiếp

k. Trả Lời

Mô 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ỗilượ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ỏitại mỗi lượt chơi sử dụng bàn phím

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

Trang 12

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ủ đề

Trang 13

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.

Trang 14

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

Trang 15

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

Trang 16

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

Trang 17

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ữ.

Trang 18

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 :

Trang 19

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

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

II. Gói GameEngine.

Trang 21

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ựchiện các thao tác của mình

• Graphics2D dbg2D và Image dbImage dùng để đưa dữ kiệulê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áicủa game :khởi tạo các trạng thái,cập nhật trạng thái hiệntại,chuyển trạng thái mới,thoát game

• 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êmvà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ínhcủa đối tượng GamePanel, và cũng chính là các thao tác màluồng animator thực hiện

Trang 22

• StateName NextGame : là tên của trạng thái game kế tiếp Đikè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

• 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áigame 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 đó đặtCurrentState tham chiếu tới StartMenu

• updateCurrentState(): kiểm tra và cập nhật trạng thái mớicho 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

Trang 23

1. Lớp CreatGameState.

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.

Trang 24

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.

Trang 25

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ứcabstract được ghi đè để phù hợp cho trạng thái StartMenu

VI. Gói GameObject.

Trang 26

• 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ảngtrắng

• countChar: đây là mảng kiểu int dùng để lưu trữ số lần xuấthiệ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

public:

Trang 27

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

• 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 Player

a. 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ữakhông hay đã bị loại

b. Phương thức:

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

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

VII. Gói GamePlay

Trang 29

• 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ủamộ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ểmngườ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ừngtrạ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óntrong trạng thái active hay chưa Nếu pressed = true thì chonó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à baonhiê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

• private double maxOmega: Mặc định là 2, đây là trị tuyệt đốicủ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

Ngày đăng: 30/12/2015, 20:27

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w