1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài tập lớn lập trình hướng đối tượng thầy cao tuấn dũng phát triển hệ thống phần mềm soạn thảo các câu đố chữ và trò chơi đố chữ

30 85 0
Tài liệu đã được kiểm tra trùng lặp

Đ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 30
Dung lượng 127,35 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Đề tài : “Phát triển hệ thống phần mềm soạn thảo các

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

MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Đề tài : “Phát triển hệ thống phần mềm soạn thảo

các câu đố chữ và trò chơi đố chữ”

Sinh viên thực hiện: Nguyễn Huy Đức (Nhóm trưởng)

Phạm Duy HoànGiang Tuấn AnhDương Tự Côn

Nhóm sinh viên : N

Giáo viên hướng dẫn : TS Cao Tuấn Dũng

Hà Nội, tháng 04 năm 2012

Trang 2

Mục lục

Lời nói đầu 2

PH N : T NG QUAN 3

Kiến thức nền tảng phục vụ cho bài toán: 3

PH N :PH NTCHTHI TK M CKI NTR C C A BÀI TOÁN 3

Mô tả yêu cầu bài toán 3

Biểu đồ lớp 4

Biểu đồ tr nh tự Error! Bookmark not defined. PH N : THI T K CHI TI T VÀ GIẢI PHÁP K THUẬTY D NG CÁC LỚP VÀ CH C N NG CH NH C A N : 5

.Mô tả lớp thuộc phần chơi 5

Mô tả lớp thuộc phần câu đố 6

Mô tả các giải thuật 7

Phần : Kết luận và đánh giá 8

Phân công công việc nhóm: 8

TÀI LIỆU THAM KHẢO 10

2

Trang 3

L u

Có l ai h c công nghệ thông tin đều biết các ngôn ngữ lập tr nh hướng đối tư ng ưu việt hơn nhiều so với các ngôn ngữ hướng th tục điều này đ đư c kiểm nghiệm và chứng minh.Nhưng nhờ đâu các nhà thiết kế lại có thể ngh ra ngôn ngữ lập tr nh hướng đối tư ng có l tên mà ta hay g i cho nó c ng đ bao hàm câu trả lời cho câu h i trên rồi đối tư ng là một khái niệm không hề có trong lập tr nh hướng th tục mà đối tư

ng ch nh là các thực thể trong thế giới thực.Khi mới b t đầu làm quen với lập tr nh hướng đối tư ng ch ng th cách tiếp cận khá tốt là đi vào các v dụ mà ở đó ranh

giới giữa các đối tư ng r ràng Giải đoán ô chữ đang là một trò chơi rất phổ biến trên các tờ báo hay các gameshow truyền h nh đư c đông đảo m i người theo d i như

Olympia, Chiếc nón kỳ diệu …Ch ng em thấy đây là một trò chơi rất hay và bổ ch đồng thời c ng không khó kh n để xác đ nh các thực thể trong hệ thống trò chơi này v

l do đó nhóm sinh viên b n em lựa ch n đề tài Phát triển hệ thống soạn thảo các câu đố chữ và trò chơi đố chữ” đề tài thực hiện chương tr nh mô ph ng trò chơi đố chữ cho phép người dùng giải các ô chữ hang ngang theo g i và từ đó đoán ô chữ

khoá chính Chương tr nh đư c viết bởi ngôn ngữ thuần đối tư ng java.

Do mới làm quen với ngôn ngữ Java và việc x l các k thuật trong lập tr nh hướng đối tư ng nên trong chương tr nh còn có nhiều hạn chế Nhóm chúng em mong nhận

đư c các nhận xét c a thầy về đề tài này c a nhóm để nhóm em có thể kh c phục các hạn chế trong đề tài này để có thể làm tốt hơn trong đề tài khác.

3

Trang 4

PH N 1: ẦN 1:

Ki n th c n n t ng ph c v cho bài toán: ến thức nền tảng phục vụ cho bài toán: ức nền tảng phục vụ cho bài toán: ền tảng phục vụ cho bài toán: ảng phục vụ cho bài toán: ục vụ cho bài toán: ục vụ cho bài toán:

+ Phân tích và thiết kế hướng đối tư ng bao gồm :

- Tư duy lập tr nh hướng đối tư ng.

- Các nguyên l cơ bản trong lập tr nh hướng đối tư ng (đóng gói, kế

thừa s dụng các giao diện đa h nh chồng phương thức )

- Biết s dụng ngôn ngữ lập trình java.

- T m hiểu cách thức lập tr nh game bằng phương pháp hướng đối tư ng

- Kiến thức cơ bản về cơ sở dữ liệu và thiết kế cơ sở dữ liệu cho game

2.1 Mô t yêu c u bài toán ảng phục vụ cho bài toán: ầu bài toán

Mô tả trò chơi ô chữ: Trò chơi ô chữ gồm có các phần

 Phần : Tạo ô chữ

 Phần cho phép người dùng soạn thảo câu đố Giao diện soạn thảo là giao diện đồ h a tương tác người dùng có thể kéo thả d ch các ô chữ sang trái phải lên hay xuống Khi d ch chuyển ô mà ko th a m n tạo khóa th thao tác thả xuống ko có tác dụng

Trang 5

Matrix (Lớp matrix) Create Nhập câu đố) (Lớp

// Mảng chứa câu hỏi, câu trả lời

String, String, - butt[10][10], key[10]: JButton

String, int, int) // Các button trong phần chơi

- butt1, butt2, butt3, butt4, butt5,

butt6: Jbutton

Clock (Lớp đồng hô)

// Tọa độ của các hàng

- timeup: boolean - x_pos[10],

y_pos[10], count_db:

int

- labelTime: JLabel

// Tọa độ của từ khóa

- i, j: int - Cell[10], row, x_key,

y_key, x, y: int

+ Clock(JLabel)

+ Clock(int)

+ Create() + Run(), Reset(),

timePlay() +

actionPerformed(Acti onEvent)

+ Display(Jbutton, int)

Cau_Do (Lớp câu

mousePressed(Mouse Event)

+ mouseDragged(Mous eEvent)

- butt_Ok : Jbutton

m-

textfield[4] : TextField + setRow(int, char[], int)

- Cell[10] : int + partSpace(String)

- label[] : Jlabel[10]

- num_row : int

- ch[10] : char

- count: int

Trang 7

+ getQuestion()

+ getAnswer()

+ getHint 1()

+ getHint2()

+ partSpace(String) +checkKey(String, int, String, int)

H nh :Biểu đồ lớp mô tả hệ thống

Trang 8

HN3:H H H H

6

Trang 9

CHƯƠNG 1 II Sơ đồ UML

Trang 11

JPanel JPanel

JFram

e Matrix

Thread MouseMotionListener

MouseListener

MouseListener ~ matrix: String ([][]) = new String[12][16]

MouseMotionListener

MouseDrag + Matrix()

~ ch_temp: char ([]) = new char[1] ~ cur_X: int ~ lblTime: JLabel

~ ch_temp1: char ([]) = new char[10] ~ cur_Y: int

+ answer: String ([]) = new String[10]

-cross + timeup: boolean

~ cur_X: int = 0 ~ puzzle: CreatePuzzle

~ butt: JButton ([][]) = new JButton[10][10]

~ butt1: JButton = new JButton("Tá

~ butt2: JButton = new JButton("Tá

~ butt3: JButton = new JButton("OK")

~ start_Y: int = 0 - addMouseMotionListener(drawKey) : void + TimePlay() : Strin

~ butt4: JButton = new JButton("KEY")

~ str_tmp: String + drawKey(CreatePuzzle)

~ butt5: JButton = new JButton("RESET") -clock

~ x: int ([]) + mouseClicked(MouseEvent) : void

~ butt6: JButton = new JButton("Guide")

~ y: int ([]) + mouseDragged(MouseEvent) : void

~ canDrag: boolean = false javax.swing.JPanel

+ mouseEntered(MouseEvent) : void

+ drawMatrix(CreatePuzzle, int) + mouseExited(MouseEvent) : void

~ Cell: Integer ([]) = new Integer[10]

+ paint(Graphics) : void + mouseMoved(MouseEvent) : void

- conn: Connection = nul l - aColumn: JButton = new JButton("Key")

t + hint1: String

([]) = new String[10]

- count: int

M

o + hint2: String ([]) = new String[10]

- cross: Matrix = new Matrix()

M

o ~ key: JButton

([]) = new JButton[10]

- hint: javax.swin g.JButton

~ butt:

JButton ([] + question:

String ([]) = new String[10]

- jLabel1: javax.swin g.JLabel

~ butt1:

JButton = ~ row: int = 0 - jLabel2:

javax.swin g.JLabel

~ butt2:

JButton = ~ row_temp: int

= 0 - jScrollPane1:

javax.swin g.JScrollP ane

~ butt3:

JButton ~ start_X: int - mainPane

l: javax.swin g.JPanel

~ butt4:

JButton ~ start_Y: int - ok:

javax.swin g.JButton

~ butt5:

JButton ~ string: String =

new String()

- pLabel: javax.swin g.JLabel

~ butt6:

JButton ~ tmp: int = 0 - point: int

= 0

~ canDra ~ x: int = 0 - qColumn:

new JButton(" Key")

~ cau_do:

Cau_Do ~ x_key: int = 17 - qPanel:

javax.swin + Cell:

Integer ([])

= new ~ x_pos: int ([]) - question:

Trang 12

~ cell: int = 0

~ x_pos1: int = 100 - questionText: javax.swing.JTextArea -conn: Connection = nul l

~puzzle ~ y: int = 0 - ran: Random = new Random()

~ Continue_butt2: boolean = false

~ y_key: int = 30 - ranID: int

~ Continue_butt3: boolean = false

~ y_pos: int ([]) = new int[10] - reset: javax.swing.JButton

~ Continue_key: boolean = false

~ y_pos1: int = 70 - rowButtonA: JButton ([]) = new JButton[12]

~ count: int = -1

- rowButtonQ: JButton ([]) = new JButton[12]

~ count_db: int = -1

+ actionPerformed(ActionEvent) : void - rowSelected: int

+ connect_db() : void - showMatrix: JLabel ([][]) = new JLabel[12][16]

~ cur_Y: int

+ Display(JButton, int) : void - table: Row ([]) = new Row[13]

+ hint1: String ([]) = new String[10]

+ i nsert_answer(String, String, String, String, int, int) : void - time: javax.swing.JLabel + hint2: String ([]) = new String[10]

+ insert_key(String, String, String, String, int, int) : voi d - topPanel: javax.swing.JPanel

~ key: JButton ([]) = new JButton[10]

+ mouseClicked(MouseEvent) : void - totalPoint: int = 0 + keyAnswer: String

+ mouseMoved(MouseEvent) : void - a1ActionPerformed(java.awt.event.ActionEvent) : void

~ lock: boolean = false

+ mousePressed(MouseEvent) : void - a2ActionPerformed(java.awt.event.ActionEvent) : void

~ mark: int = -1

+ mouseReleased(MouseEvent) : void - a3ActionPerformed(java.awt.event.ActionEvent) : void

+ matrix: drawMatri x

+ partSpace(String) : char[] - a4ActionPerformed(java.awt.event.ActionEvent) : void

+ OK: boolean = false

+ setAnswer() : void - a5ActionPerformed(java.awt.event.ActionEvent) : void

+ question: String ([]) = new String[10]

~row: int = 0

p z zl e

-a7ActionPerform ed(java.awt.event ActionEvent) : void

~row_temp:int = 0

-a8ActionPerform ed(java.awt.event ActionEvent) : void

~ start_X : int

~ a _ o

-a9ActionPerform ed(java.awt.event ActionEvent) : void

~ start_Y : int

-aColumnActionP erformed(java.aw t.event.ActionEve nt) : void

~

string:

String = new String() JFrame

-answerTextKeyP ressed(java.awt.e vent.KeyEvent) : void

~tmp: int = 0 ActionListener

-compleCo lumn() : void

~ x: int = 0

Cau_ Do

-compleRo w(int) : void

+ x_key: int

- connect_db() : void

+ x_pos: int int[10] ~

butt_Ok:

JButton = new JButton("OK

-deselectC olunm() : void

+ y_key: int ~ count: int

- deselectRow() : void

+ y_pos: int int[10] ~

label:

JLabel ([]) = new JLabel[10]

-hintActionPerfor med(java.awt.eve nt.ActionEvent) : void

~y_pos1: int = 70 ~ num_row: int

-initCompo nents() : void

~

panel:

JPanel = new JPanel()

-okActionPerform ed(java.awt.event ActionEvent) : void +

actionPerf ionEvent) : void -

puzzle:

CreatePuzzl e

-okKeyTyp ed(java.a wt.event.K eyEvent) : void +connect_db() : void ~cau_do ~

textfield:

TextField ([])

= new TextField[4]

+ print_table+CreatePuzzle()

+

print_table _user(int) : voi d +

i nsert_answer(String, String, String, String, int, int) : void +

actionPerfor med(ActionE vent) : void -

q10ActionPerfor med(java.awt.eve nt.ActionEvent) : void + insert_key(String,

int, int) : voi d +

Cau_Do(int, CreatePuzzl e)

- q11ActionPerfor med(java.awt.eve nt.ActionEvent) : void + main(Strin

g[]) : voi d + checkKey(String, int,

Trang 13

- q12ActionPerformed(java.awt.event.ActionEvent) : void + mouseClicked(MouseEvent) : void + getAnswer() : String

- q1ActionPerformed(java.awt.event.ActionEvent) : void + mouseDragged(MouseEvent) : void + getHint1() : String

- q2ActionPerformed(java.awt.event.ActionEvent) : void + mouseEntered(MouseEvent) : void + getHint2() : String

- q3ActionPerformed(java.awt.event.ActionEvent) : void + mouseExited(MouseEvent) : void + getQuestion() : String

- q4ActionPerformed(java.awt.event.ActionEvent) : void + mouseMoved(MouseEvent) : void + partSpace(String) : char[]

- q5ActionPerformed(java.awt.event.ActionEvent) : void + mousePressed(MouseEvent) : void

- q6ActionPerformed(java.awt.event.ActionEvent) : void + mouseReleased(MouseEvent) : void

- newGame() : void

8

Trang 14

III Problems and solutions

A Mô tả bài toán

1 Phần chơi

- Khi bắt đầu chơi người chơi chọn chủ đề, dựa vào chủ đề người chơi

chọn thì 1 database tương ứng được kết nối, bắt đầu khởi tạo new

Crossword với tham số truyền vào là topicID(int) và ranID (int)

- Dữ liệu database được load vào table của Crossword bao gồm: +câu hỏi (String question)

+câu trả lời (String answer) +gợi ý (String hint1, hint2) +tọa độ (int x,y)

- Khởi tạo ma trận ô chữ từ table: Sử dụng tọa độ để xác định vị trí các chữ cái trên ma trận tách chuỗi (từng chữ cái) phần câu trả lời trong bảng

dữ liệu để lưu vào ma trận

- Khởi tạo dao diện ô chữ showMatrix: Sử dụng 1 ma trận (mảng 2 chiều) là các JPanel, là 1 ánh xạ từ ma trận crossmatrix

- Khởi tạo các button chọn câu hỏi va hiển thị câu trả lời tương ứng với ô chữ:

Các button được lưu vào 1 mảng có độ dài tương ứng với số dòng của ôchữ

- Khi click vào button câu hỏi hàng (cột) tương úng sẽ đổi màu ( dựa vào dữ liệu của cross), hiển thị câu hỏi trên textarea, thời gian (clock) bắt đầu chạy (click vào câu hỏi khác clock sẽ reset) Textarea sẽ lấy thông tin câu hỏi từ question (lưu trữ câu hỏi hiện tại)

- Click vào button hiện câu trả lời thời gian sẽ dừng lại., câu trả lời được hiển thị lên ô chữ

- Khi chọn câu hỏi ngươi chơi sẽ nhập câu trả lời vào textfield, người chơi được trả lời liên tục cho đến khi đúng hoặc hết giờ Khi người chơi nhập câu trả lời sau đó nhấn OK (hoặc phím ENTER) Câu trả lời được so sánh với dữ liệu trong table, nếu đúng người chơi được cộng điểm (200 đối với hàng

ngang, 400 đối với cột dọc), người chơi sẽ bị trừ 25% số điểm của câu hỏi đó với mỗi lần gợi ý (mỗi câu hỏi có tối đa 2 gợi ý)

- Khi chọn câu hỏi câu trả lời của câu hỏi đó được lưu vào 1 Stringanswer, khi người chơi nhập câu trả lời sẽ so sánh để đưa ra kết quả đúng hoặcsai Ngoài ra khi người chơi chọn gợi ý sẽ có 1 biến đếm để đếm số lần gợi ý vàtrừ điểm tương úng với số lần gợi ý

- người chơi muốn chơi lại ô chữ thì ấn vào nút reset, trạng thái ô chữtrở về ban đầu

- Đổi màu ô chữ, điểm, thời gian trở về như ban đầu

Trang 15

-Khi thoát chương trình người chơi sẽ đc hỏi có lưu lại ô chữ haykhông nếu lưu lại thì các trạng thái của ô chữ sẽ được lưu trong filesave.txt Các thong số lưu lại bao gồm:

+topicID (chủ đề của ô chữ)+ranID (id của ô chữ trong database)+totalPoint (điểm của người chơi)+iscompletete*+ (là 1 mảng lưu trạng thái từng hàng cột có kiểu dữ liệu boolean, nếu hàng hay cột đã được giải thì có giá trị true, còn không sẽ có giá trị false

- Khi load ô chữ, chương trình sẽ khởi tạo ô chữ theo topicID và ranID

đã lưu trong file save, sau đó sẽ kiểm tra điểm và các trạng thái của hàng và cột

để nạp vào giao diện

+ Đầu tiên nhập từ khóa Số lượng từ khóa bằng số hàng

+ Nhập từng thông tin cho từng câu đố và check

Chẳng hạn: Nếu từ khóa là “ANH” Câu đố đang nhập là câu 1thì vị trí chứa từ khóa của answer*1+ trùng với chữ ‘A’ Nếu ko

Trang 16

S Thuộc tính Typ Mục đích

3 cur_X int tọa độ x hiện tại (Lúc kéo chuột)

4 cur_Y int tọa độ y hiện tại (Lúc kéo chuột)

11

Trang 17

Cụ thể như sau:

for (int i = 0; i < 10; i++) {

// Chuyen string answer thanh mang ki tu if(i >= puzzle.mark && i < puzzle.mark + puzzle.row)

ch = puzzle.answer[i - puzzle.mark].toCharArray();

for (int j = 0; j < 10; j++) { / Ve ma tran o g2d.setColor(Color.GREEN);

g2d.drawString(str_tmp, j * 46 + 20, puzzle.y_pos[i] + 28);

else g2d.drawString(str_tmp, j * 46 + 15, puzzle.y_pos[i] + 28);

// Boi Do tu khoa

if (puzzle.lock == true) { ch_temp1 = puzzle.keyAnswer.toCharArray();

if (j == puzzle.x_key / 46) {

g2d.fill3DRect(j * 46 + 1, puzzle.y_pos[i] + 1, 42, 42, true);

} // Print chu ra tu khoa for (int k = puzzle.mark; k < puzzle.row + puzzle.mark; k++) {

ch_temp[0] = ch_temp1[k - puzzle.mark];

str_tmp = new String(ch_temp);

g2d.setColor(Color.WHITE);

12

Trang 18

g2d.drawString(str_tmp, puzzle.x_key - 2, k * 46 + 28);

} }

2 Lớp Cau_Do

a Thuộc tính

1 Cell int[] Cell[i] chứa số ô của hàng i

2 butt_Ok JButto button dùng để kết thúc việc

4 label JLabel[ nhãn trên mỗi textField

]

ma trận

6 textfield TextFie Ô để nhập dữ liệu cho câu hỏi,

ld[] câu trả lời, hint1 và hint2

b Mục đích:

Lớp này dùng để cho người dùng tạo câu đố: câu hỏi, câu trả lời,

hint1 và hint2

c Phương thức chính:

* actionPerformed(ActionEvent e): tạo sự kiện khi nhấn button OK

* getAnswer(): Lấy câu trả lời từ textField answer

* getQuestion(): Lấy câu hỏi từ textField question

* getHint1(): Lấy gợi ý 1 từ textField Hint1

* getHint2(): Lấy gợi ý 2 từ textField Hint2

* checkKey(String, int, String, int): Phương thức này sẽ kiểm tra xemchuỗi answer nhập vào có phù hợp với từ khóa hay không Điều kiện để phươngthức trả về true là kí tự tại vị trí thứ i trong từ khóa phải bằng trùng với kí tự thứx_key trong hàng i

} return false;

13

Ngày đăng: 28/05/2021, 09:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w