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ữ

29 80 0
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ữ

Đ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

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âu đố chữ trò chơi đố chữ” M đề tài: De05A Sinh viên thực hiện: Nguyễn Huy Đức (Nhóm trưởng) Phạm Duy Hồn Giang Tuấn Anh Dương Tự Cơn Nhóm sinh viên :N Lớp : ICT-K54 Giáo viên hướng dẫn : TS Cao Tuấn Dũng Hà Nội, tháng 04 năm 2012 Mục lục Lời nói đầu PH N : T NG QUAN Kiến thức tảng phục vụ cho toán: PH N :PH NTCHTHI TK M CKI NTR Mơ tả u cầu tốn .Biểu đồ lớp Biểu đồ tr nh tự PH N : THI T K CHI TI T VÀ GIẢI PHÁP K LỚP VÀ CH C N NG CH NH C A N : Mô tả lớp thuộc phần chơi Mô tả lớp thuộc phần câu đố .Mô tả giải thuật Phần : Kết luận đánh giá Phân công công việc nhóm: TÀI LIỆU THAM KHẢO L u Có l h c cơng nghệ thông tin biết ngôn ngữ lập tr nh hướng đối tư ng ưu việt nhiều so với ngôn ngữ hướng th tục điều đ đư c kiểm nghiệm chứng minh.Nhưng nhờ đâu nhà thiết kế lại ngh ngơn ngữ lập tr nh hướng đối tư ng có l tên mà ta hay g i cho c ng đ bao hàm câu trả lời cho câu h i đối tư ng khái niệm khơng có lập tr nh hướng th tục mà đối tư ng ch nh thực thể giới thực.Khi 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 tốt vào v dụ mà ranh giới đối tư ng r ràng Giải đốn chữ trị chơi phổ biến tờ báo hay gameshow truyền h nh đư c đông đảo m i người theo d i Olympia, Chiếc nón kỳ diệu …Ch ng em thấy trò chơi hay bổ ch đồng thời c ng khơng khó kh n để xác đ nh thực thể hệ thống trị chơi v l 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âu đố chữ trò chơi đố chữ” đề tài thực chương tr nh mơ ph ng trị chơi đố chữ cho phép người dùng giải ô chữ hang ngang theo g i từ đốn chữ khố Chương tr nh đư c viết ngôn ngữ đối tư ng java Do làm quen với ngôn ngữ Java việc x l k thuật lập tr nh hướng đối tư ng nên chương tr nh cịn có nhiều hạn chế Nhóm chúng em mong nhận đư c nhận xét c a thầy đề tài c a nhóm để nhóm em kh c phục hạn chế đề tài để làm tốt đề tài khác PHẦN 1: Kiến thức tảng phục vụ cho tốn: + Phân tích thiết kế hướng đối tư ng bao gồm : Tư lập tr nh hướng đối tư ng - Các nguyên l lập tr nh hướng đối tư ng (đóng gói, kế thừa s dụng 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 phương pháp hướng đối tư ng - Kiến thức sở liệu thiết kế sở liệu cho game - PH 2:H HH 2.1 Mô tả yêu cầu tốn Mơ tả trị chơi chữ: Trị chơi chữ gồm 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 giao diện đồ h a tương tác người dùng kéo thả d ch ô 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  Phần : Chơi  Cho phép người dùng ch n câu đố thực giải đố Phần chơi đư c giới hạn thời gian 2.2 Biểu đồ lớp CrossWord (Lớp Play) // Dữ liệu hàng - question, answer, hint1, hint2: String - x, y: int // Đồng hồ điểm - Clock, point, totalPoint, ran: int - qColumn, aColumn: Jbutton - rowButtonQ, rowButtonA: JButton - cross: Matrix - table[13]: Row + Crossword() + actionPerformed(ActionEvent) + aColumnActionPerformed(ActionEvent) + qColumnActionPerformed(ActionEvent) + q1ActionPerformed(ActionEvent) + a1ActionPerformed(ActionEvent) ……………………………………………………………… + q12ActionPerformed(ActionEvent) + a12ActionPerformed(ActionEvent) + selectColumn(Event), compleColumn(Event), deselectColunm(Event), + selectRow(Event), deselectRow(Event), completeRow(Event) + hintActionPerformed(Event), resetActionPerformed(Event) + OkActionPerformed(Event) + okKeyTyped(Event) Matrix (Lớp matrix) - Matrix[12][16] : String + Matrix() 1 Row (Lớp hàng) - question, answer, hint1, hint2 : String - x, y : int + setRow(String, String, String, String, int, int) 1 Clock (Lớp đồng hô) - timeup: boolean - labelTime: JLabel - i, j: int + Clock(JLabel) + Clock(int) + Run(), Reset(), timePlay() Cau_Do(Lớp câu đố) - butt_Ok : Jbutton textfield[4] : TextField Cell[10] : int - label[] : Jlabel[10] - num_row : int - ch[10] : char - - count: int +Cau_Do(int, MouseDrag) +actionPerformed(ActionEvent) + getQuestion() + getAnswer() + getHint1() + getHint2() + p a r t S p a c e ( S t r i n g ) + c h e c k K e y ( S t r i n g , i n t , S t r i n g , i n t ) H nh :Biểu đồ lớp mô tả hệ thống HN3:H CHƯƠNG II Sơ đồ UML class new crossw JPanel draw Matrix ~ Cell: int ([]) ~ ch: char ([]) = new char[10] ~ ch_temp: char ([]) = new char[1] ~ ch_temp1: char ([]) = new char[10] ~ cur_X: int = ~ + ~ ~ ~ ~ ~ + an ~ bu ~ bu ~ bu ~ butt3: JBu ~ butt4: JBu ~ butt5: JBu ~ butt6: JBu cur_Y: int = puzzle: CreatePuzzle start_X: int = start_Y: int = str_tmp: String x: int ([]) y: int ([]) ~ canDrag: boolean = false + drawMatrix(CreatePuzzle, int) + paint(Graphics) : void +matrix ~ ca + Ce ~ ce -conn: Connection = nul l ~ ~ Co Co ~ Continue_key: boolean = false ~ count: int = -1 ~ count_db: int = -1 ~ cur_X: int ~ cur_Y: int ~ str ~ tm ~ x: + x_ + hint1: String ([]) = new String[10] + x_ + hint2: String ([]) = new String[10] ~ x_ ~ key: JButton ([]) = new JButton[10] ~ y: + keyAnswer: String + y_ + keyHint1: String + y_ + keyHint2: String ~ y_ + keyPanel: drawKey + keyQuestion: String + ac + co ~ lock: boolean = false ~ mark: int = -1 + Cr + matrix: drawMatri x + in + OK: boolean = false + insert_key(String, String, String, String, int, int) : voi d + question: String ([]) = new String[10] + ma ~ row: int = + mo ~ row_temp: int = + mo + + mo mo ~ start_X: int ~ start_Y: int S Thuộc tính TT start_X start_Y cur_X cur_Y x[] y[] Cell[] str_tmp ch_temp[] c Cácphương thức + Phương thức paint(Graphics g) * Mục đích: Vẽ ma trận chữ đồng thời vẽ text lên ô chữ Ma trận cấu tạo gồm có màu xám (ơ chữ ko chứa text), ô màu vàng (ô chữ có chứa text), ô màu đỏ (ơ chữ thuộc từ khóa) * Giải pháp: Để vẽ ma trận trên, nhóm dùng phương thức chủ yếu : fillRect() drawRect() Để print kí tự chữ, nhóm chuyển string câu trả lời thành mảng kí tự, sau chuyển kí tự thành chuỗi in ô chữ sử dụng phương thức: g2D.drawString() 11 Cụ thể sau: for (int i = 0; i < 10; i++) { // Chuyen string answer 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.draw3DRect(i * 46, j * 46, 43, 43, true); Ve o mau vang if (j >= puzzle.x_pos[i] / 46 && j < puzzle.x_pos[i] / 46 + puzzle.Cell[i]) { ch_temp[0] = ch[j - puzzle.x_pos[i] / 46]; str_tmp = new String(ch_temp); g2d.setColor(Color.ORANGE); g2d.fill3DRect(j * 46 + 1, puzzle.y_pos[i] + 1, 42, 42, true); / Ve chu cho tung hang g2d.setColor(Color.red); if(str_tmp.equals("I")) 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) { / Ve O cua tu khoa g2d.setColor(Color.RED); g2d.fill3DRect(j * 46 + 1, puzzle.y_pos[i] + 1, 42, 42, true); } // Print chu 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 g2d.drawString(str_tmp, puzzle.x_key - 2, k * 46 + 28); } } Lớp Cau_Do a Thuộc tính S TT Tên thuộc tính Cell butt_Ok count label num_row textfield b Mục đích: Lớp dùng người dùng tạo câu đố: câu hỏi, câu trả lời, hint1 hint2 c Phương thức chính: * actionPerformed(ActionEvent e): tạo kiện 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 ý từ textField Hint1 * getHint2(): Lấy gợi ý từ textField Hint2 * checkKey(String, int, String, int): Phương thức kiểm tra xem chuỗi answer nhập vào có phù hợp với từ khóa hay khơng Điều kiện để phương thức trả true kí tự vị trí thứ i từ khóa phải trùng với kí tự thứ x_key hàng i Cụ thể sau: public boolean checkKey(String string1, int pos_1, String answer, int pos_2) { char[] ch1 = partSpace(string1); char[] ch2 = partSpace(answer); if (ch1[pos_1] == ch2[pos_2]) { return true; } return false; 13 } Lớp drawKey a Mục đích: Lớp drawKey tạo panel có chứa khóa Người dùng kéo chọn vị trí khóa theo mong muốn b Thuộc tính: S Tên thuộc TT tính cur_X cur_Y start_X start_Y puzzle c Các phương thức * mousePressed(): lấy tọa độ chuột nhấp chuột * paint(): Vẽ hình thìa khóa dựa theo tọa độ thời khóa * mouseDrag(): kéo thả chuột + Bắt tọa độ chuột lúc nhấp (start_X) lúc kéo (cur_X) + |cur_X – start_X| >= 35 vẽ lại khóa với phương thức repaint() Solution: public void mouseDragged(MouseEvent e) { cur_X = e.getX(); cur_Y = e.getY(); if (start_Y > 30 && start_Y < 60) { if (start_X >= puzzle.x_key - 20 && start_X = 35) { puzzle.x_key += 46; repaint(); Swap cur and start x, y start_X = cur_X; / } 14 } if (puzzle.x_key >= 23) { if (cur_X - start_X = 35 dịch sang phải cách vẽ lại ma trận ô (repaint) if (cur_X - start_X >= 35) { x_pos[i] += 46; / Ve lai ma tran O matrix.repaint(); / Swap currrent and starting Co-ordinates start_X = cur_X; start_Y = cur_Y; } + Nếu (start_X – cur_X) < -35 chữ dịch sang trái 16 if ((cur_X - start_X 0)) { x_pos[i] -= 46; / Ve lai ma tran O matrix.repaint(); / Swap Cur and Start start_X = cur_X; start_Y = cur_Y; } + Để kéo ô lên xuống, ta dựa vào tọa độ start_Y cur_Y + Nếu (cur_Y - start_Y) >= 43, dịch chữ xuống ô repaint() if (y_pos[i] = 43) { int c; / swap X c = x_pos[i]; x_pos[i] = x_pos[i + 1]; x_pos[i + 1] = c; / Swap Cell c = Cell[i]; Cell[i] = Cell[i + 1]; Cell[i + 1] = c; / Ve lai ma tran O matrix.repaint(); / Swap Cur and Start start_Y = cur_Y; } } + Nếu (cur_Y – start_Y)

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