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ữ

25 7 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 25
Dung lượng 0,96 MB

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â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 .2 PH N : T NG QUAN Kiến thức tảng phục vụ cho toán: PH N : PH N T CH THI T K M C KI N TR C C A BÀI TOÁN Mơ tả u cầu tốn Biểu đồ lớp Biểu đồ tr nh tự Error! Bookmark not defined PH N : THI T K CHI TI T VÀ GIẢI PHÁP K THUẬT Y D NG CÁC LỚP VÀ CH C N NG CH NH C A N : Mô tả lớp thuộc phần chơi .5 Mô tả lớp thuộc phần câu đố Mô tả giải thuật Phần : Kết luận đánh giá .8 Phân công cơng việc nhóm: TÀI LIỆU THAM KHẢO .10 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 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 H H 2.1 Mô tả 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() Row (Lớp hàng) 1 1 1 - question, answer, hint1, hint2 : String - x, y : int + setRow(String, String, String, String, int, int) 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() + partSpace(String) +checkKey(String, int, String, int) H nh :Biểu đồ lớp mô tả hệ thống m Create (Lớp Nhập câu đố) // Mảng chứa câu hỏi, câu trả lời - string, answer[10], question[10], hint1[10], hint2[10]: String // Biến check điều kiện tiếp - OK, Continue_butt2, Continue_butt3, Continue_Key, lock : Boolean //Ma trận button - butt[10][10], key[10]: JButton // Các button phần chơi - butt1, butt2, butt3, butt4, butt5, butt6: Jbutton // Tọa độ hàng - x_pos[10], y_pos[10], count_db: int // Tọa độ từ khóa - Cell[10], row, x_key, y_key, x, y: int + Create() + actionPerformed(ActionEvent) + Display(Jbutton, int) + mousePressed(MouseEvent) + mouseDragged(MouseEvent) + setRow(int, char[], int) + partSpace(String) H N 3: H H H H H H H CHƯƠNG II Sơ đồ UML class new crossw JPanel MouseMotionListener MouseListener 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 = cur_Y: int = puzzle: CreatePuzzle start_X: int = start_Y: int = str_tmp: String x: int ([]) y: int ([]) + + drawMatrix(CreatePuzzle, int) paint(Graphics) : void +matrix JFrame ActionListener MouseListener MouseMotionListener draw Key MouseDrag ~ ~ ~ ~ ~ cur_X: int cur_Y: int puzzle: CreatePuzzle start_X: int start_Y: int + + + + + + + + + addMouseMotionListener(drawKey) : void drawKey(CreatePuzzle) mouseClicked(MouseEvent) : void mouseDragged(MouseEvent) : void mouseEntered(MouseEvent) : void mouseExited(MouseEvent) : void mouseMoved(MouseEvent) : void mousePressed(MouseEvent) : void mouseReleased(MouseEvent) : void paint(Graphics) : void +keyPanel +puzzle JFrame ActionListener MouseListener MouseMotionListener CreatePuzzle + ~ ~ ~ ~ ~ ~ ~ ~ ~ + ~ ~ ~ ~ ~ ~ ~ ~ + + ~ + + + + + ~ ~ + + + ~ ~ ~ ~ ~ ~ ~ + + ~ ~ + + ~ answer: String ([]) = new String[10] butt: JButton ([][]) = new JButton[10][10] butt1: JButton = new JButton("T butt2: JButton = new JButton("T butt3: JButton = new JButton("OK") butt4: JButton = new JButton("KEY") butt5: JButton = new JButton("RESET ") butt6: JButton = new JButton("Guide") canDrag: boolean = false cau_do: Cau_Do Cell: Integer ([]) = new Integer[10] cell: int = conn: Connection = null Continue_butt2: boolean = false Continue_butt3: boolean = false Continue_key: boolean = false count: int = -1 count_db: int = -1 cur_X: int cur_Y: int hint1: String ([]) = new String[10] hint2: String ([]) = new String[10] key: JButton ([]) = new JButton[10] keyAnswer: String keyHint1: String keyHint2: String keyPanel: drawKey keyQuestion: String lock: boolean = false mark: int = -1 matrix: drawMatrix OK: boolean = false question: String ([]) = new String[10] row: int = row_temp: int = start_X: int start_Y: int string: String = new String() tmp: int = x: int = x_key: int x_pos: int ([]) = new int[10] x_pos1: int = 100 y: int = y_key: int y_pos: int ([]) = new int[10] y_pos1: int = 70 + + + + + + + + + + + + + actionPerformed(ActionEvent) : void connect_db() : void CreatePuzzle() insert_answer(String, String, String, String, int, int) : void insert_key(String, String, String, String, int, int) : void main(String[]) : void mouseClicked(MouseEvent) : void mouseDragged(MouseEvent) : void mouseEntered(MouseEvent) : void mouseExited(MouseEvent) : void mouseMoved(MouseEvent) : void mousePressed(MouseEvent) : void mouseReleased(MouseEvent) : void ~puzzle -puzzle + ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ + + ~ ~ ~ + + ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ answer: String ([]) = new String[10] butt: JButton ([][]) = new JButton[10][10] butt1: JButton = new JButton("T butt2: JButton = new JButton("T butt3: JButton = new JButton("OK") butt4: JButton = new JButton("KEY") butt5: JButton = new JButton("RESET ") butt6: JButton = new JButton("Guide") canDrag: boolean = false cau_do: Cau_Do Cell: Integer ([]) = new Integer[10] conn: Connection = null Continue_butt2: boolean = false Continue_butt3: boolean = false Continue_key: boolean = false count: int = -1 count_db: int = cur_X: int cur_Y: int hint1: String ([]) = new String[10] hint2: String ([]) = new String[10] key: JButton ([]) = new JButton[10] lock: boolean = false mark: int = -1 OK: boolean = false question: String ([]) = new String[10] row: int = row_temp: int = start_X: int start_Y: int string: String = new String() tmp: int = x: int = x_key: int = 17 x_pos: int ([]) = new int[10] x_pos1: int = 100 y: int = y_key: int = 30 y_pos: int ([]) = new int[10] y_pos1: int = 70 + + + + + + + + + + + + + + + + actionPerformed(ActionEvent) : void connect_db() : void Display(JButton, int) : void insert_answer(String, String, String, String, int, int) : void insert_key(String, String, String, String, int, int) : void mouseClicked(MouseEvent) : void MouseDrag() mouseDragged(MouseEvent) : void mouseEntered(MouseEvent) : void mouseExited(MouseEvent) : void mouseMoved(MouseEvent) : void mousePressed(MouseEvent) : void mouseReleased(MouseEvent) : void partSpace(String) : char[] setAnswer() : void setRow(int, char[], int) : void ~cau_do JFrame ActionListener Cau_Do ~cau_do ~ ~ ~ ~ ~ ~ ~ ~ butt_Ok: JButton = new JButton("OK") Cell: int ([]) = new int[10] ch: char ([]) = new char[10] count: int label: JLabel ([]) = new JLabel[10] num_row: int panel: JPanel = new JPanel() puzzle: CreatePuzzle textfield: T extField ([]) = new T extField[4] + + + + + + + + actionPerformed(ActionEvent) : void Cau_Do(int, CreatePuzzle) checkKey(String, int, String, int) : boolean getAnswer() : String getHint1() : String getHint2() : String getQuestion() : String partSpace(String) : char[] Thread Matrix Row Clock ~ matrix: String ([][]) = new String[12][16] + Matrix() -cross + + ~ + i: int = j: int = lblT ime: JLabel timeup: boolean + + + + Clock(JLabel) reset() : void run() : void T imePlay() : String ~ ~ ~ ~ ~ ~ answer: String hint1: String hint2: String question: String x: int y: int + setRow(String, String, String, String, int, int) : void -table -clock javax.swing.JPanel Crossw ord - aColumn: JButton = new JButton("Key") answer: String answerT ext: javax.swing.JT extField aPanel: javax.swing.JPanel botPanel: javax.swing.JPanel clock: Clock = null completed: boolean ([]) = new boolean[13] conn: Connection = null count: int cross: Matrix = new Matrix() hint: javax.swing.JButton hint1: String hint2: String hintNumber: int jLabel1: javax.swing.JLabel jLabel2: javax.swing.JLabel jScrollPane1: javax.swing.JScrollPane mainPanel: javax.swing.JPanel ok: javax.swing.JButton pLabel: javax.swing.JLabel point: int = qColumn: JButton = new JButton("Key") qPanel: javax.swing.JPanel question: String questionT ext: javax.swing.JT extArea ran: Random = new Random() ranID: int reset: javax.swing.JButton rowButtonA: JButton ([]) = new JButton[12] rowButtonQ: JButton ([]) = new JButton[12] rowSelected: int showMatrix: JLabel ([][]) = new JLabel[12][16] table: Row ([]) = new Row[13] time: javax.swing.JLabel topPanel: javax.swing.JPanel totalPoint: int = + + + + - a10ActionPerformed(java.awt.event.ActionEvent) : void a11ActionPerformed(java.awt.event.ActionEvent) : void a12ActionPerformed(java.awt.event.ActionEvent) : void a1ActionPerformed(java.awt.event.ActionEvent) : void a2ActionPerformed(java.awt.event.ActionEvent) : void a3ActionPerformed(java.awt.event.ActionEvent) : void a4ActionPerformed(java.awt.event.ActionEvent) : void a5ActionPerformed(java.awt.event.ActionEvent) : void a6ActionPerformed(java.awt.event.ActionEvent) : void a7ActionPerformed(java.awt.event.ActionEvent) : void a8ActionPerformed(java.awt.event.ActionEvent) : void a9ActionPerformed(java.awt.event.ActionEvent) : void aColumnActionPerformed(java.awt.event.ActionEvent) : void answerT extKeyPressed(java.awt.event.KeyEvent) : void compleColumn() : void compleRow(int) : void connect_db() : void Crossword(int) Crossword() deselectColunm() : void deselectRow() : void hintActionPerformed(java.awt.event.ActionEvent) : void initComponents() : void okActionPerformed(java.awt.event.ActionEvent) : void okKeyT yped(java.awt.event.KeyEvent) : void print_table(int) : void print_table_user(int) : void q10ActionPerformed(java.awt.event.ActionEvent) : void q11ActionPerformed(java.awt.event.ActionEvent) : void q12ActionPerformed(java.awt.event.ActionEvent) : void q1ActionPerformed(java.awt.event.ActionEvent) : void q2ActionPerformed(java.awt.event.ActionEvent) : void q3ActionPerformed(java.awt.event.ActionEvent) : void q4ActionPerformed(java.awt.event.ActionEvent) : void q5ActionPerformed(java.awt.event.ActionEvent) : void q6ActionPerformed(java.awt.event.ActionEvent) : void q7ActionPerformed(java.awt.event.ActionEvent) : void q8ActionPerformed(java.awt.event.ActionEvent) : void q9ActionPerformed(java.awt.event.ActionEvent) : void qColumnActionPerformed(java.awt.event.ActionEvent) : void resetActionPerformed(java.awt.event.ActionEvent) : void selectColumn() : void selectRow(int) : void GamePlay -crossword - crossword: Crossword = new Crossword(1) jButtonCreate: javax.swing.JButton jButtonExit: javax.swing.JButton jButtonHelp: javax.swing.JButton jButtonNewgame: javax.swing.JButton jButtonResume: javax.swing.JButton jframe: JFrame jInternalFrame1: javax.swing.JInternalFrame jLabel1: javax.swing.JLabel jMenuBar1: javax.swing.JMenuBar jMenuCreate: javax.swing.JMenuItem jMenuExit: javax.swing.JMenuItem jMenuHelp: javax.swing.JMenuItem jMenuItem1: javax.swing.JMenuItem jMenuNewGame: javax.swing.JMenu jMenuResume: javax.swing.JMenuItem + + + + - cretate() : void GamePlay() GamePlay(String, GraphicsConfiguration) GamePlay(GraphicsConfiguration) help() : void HelpsActionPerformed(java.awt.event.ActionEv initComponents() : void jButtonCreateActionPerformed(java.awt.event.A jButtonExitActionPerformed(java.awt.event.Acti jButtonNewgameActionPerformed(java.awt.even jButtonResumeActionPerformed(java.awt.event jButtonResumeActionPerformed1(java.awt.even jMenuExitActionPerformed(java.awt.event.Actio jMenuHelpActionPerformed(java.awt.event.Acti jMenuItem1ActionPerformed(java.awt.event.Ac jMenuNewGameActionPerformed(java.awt.even jMenuResumeActionPerformed(java.awt.event main(String[]) : void newGame() : void III Problems and solutions A Mô tả toán 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 database tương ứng kết nối, bắt đầu khởi tạo new Crossword với tham số truyền vào topicID(int) ranID (int) - Dữ liệu database load vào table 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í chữ ma trận tách chuỗi (từng chữ cái) phần câu trả lời bảng liệu để lưu vào ma trận - Khởi tạo dao diện ô chữ showMatrix: Sử dụng ma trận (mảng chiều) JPanel, ánh xạ từ ma trận crossmatrix - Khởi tạo 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 lưu vào mảng có độ dài tương ứng với số dịng ô chữ - Khi click vào button câu hỏi hàng (cột) tương úng đổi màu ( dựa vào liệu cross), hiển thị câu hỏi textarea, thời gian (clock) bắt đầu chạy (click vào câu hỏi khác clock reset) Textarea lấy thông tin câu hỏi từ question (lưu trữ câu hỏi tại) - Click vào button câu trả lời thời gian dừng lại., câu trả lời hiển thị lên ô chữ - Khi chọn câu hỏi chơi nhập câu trả lời vào textfield, người chơi trả lời liên tục hết 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 so sánh với liệu table, người chơi cộng điểm (200 hàng ngang, 400 cột dọc), người chơi bị trừ 25% số điểm câu hỏi với lần gợi ý (mỗi câu hỏi có tối đa gợi ý) - Khi chọn câu hỏi câu trả lời câu hỏi lưu vào String answer, người chơi nhập câu trả lời so sánh để đưa kết sai Ngoài người chơi chọn gợi ý có biến đếm để đếm số lần gợi ý trừ điểm tương úng với số lần gợi ý - người chơi muốn chơi lại chữ ấn vào nút reset, trạng thái ô chữ trở ban đầu - Đổi màu ô chữ, điểm, thời gian trở ban đầu -Khi chương trình người chơi đc hỏi có lưu lại chữ hay khơng lưu lại trạng thái chữ lưu file save.txt Các thong số lưu lại bao gồm: +topicID (chủ đề ô chữ) +ranID (id ô chữ database) +totalPoint (điểm người chơi) +iscompletete*+ (là mảng lưu trạng thái hàng cột có kiểu liệu boolean, hàng hay cột giải có giá trị true, cịn khơng có giá trị false - Khi load chữ, chương trình khởi tạo chữ theo topicID ranID lưu file save, sau kiểm tra điểm trạng thái hàng cột để nạp vào giao diện Phần Tạo ô chữ - Người chơi nhập số lượng hàng đố (số lượng câu đố) Số ô nằm khoảng từ đến 10 Nếu khơng nhập báo lỗi - Nhập số lượng ô cho hàng Số lượng ô từ 1-10 Nếu không nhập báo lỗi - Sau kết thúc việc nhâp hàng ơ, người dùng kéo thả chữ (lên xuống, trái phải) tới vị trí mong muốn - Bắt đầu việc tạo câu đố Để tạo câu đố, người chơi phải nhập đầy đủ thông tin: + Câu hỏi + Câu trả lời + Hint1 Hint2 - Để chắn người chơi tạo phần câu đố có nghĩa chương trình kiểm tra tính hợp lệ câu đố vừa tạo: + Đầu tiên nhập từ khóa Số lượng từ khóa số hàng + Nhập thông tin cho câu đố check Chẳng hạn: Nếu từ khóa “ANH” Câu đố nhập câu vị trí chứa từ khóa answer*1+ trùng với chữ ‘A’ Nếu ko bị báo lỗi - Sau nhập xong, nhấn OK để kết thúc B Chi tiết lớp Lớp matrix a Mục đích: Ma trận Cells hình vng gồm ơ, để hàng chữ chạy b Thuộc tính: 10 S Thuộc tính start_X Typ es int start_Y int tọa độ y lúc nhấp chuột cur_X int tọa độ x (Lúc kéo chuột) cur_Y int tọa độ y (Lúc kéo chuột) x[] int y[] int Cell[] int str_tmp Stri TT Mục đích tọa độ x lúc nhấp chuột phần tử x[i] chứa tọa độ x hàng thứ i phần tử y[i] chứa tọa độ y hàng thứ i phần tử Cell[i] chứa số lượng ô chữ hàng i xâu kí tự (tạm thời) ng ch_temp[] char mảng kí tự str_tmp 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 Tên thuộc TT tính Cell Type int[] butt_Ok JButto n count int label JLabel[ Ý nghĩa Cell[i] chứa số ô hàng i button dùng để kết thúc việc nhập liệu Đếm số kí tự có chuỗi nhãn textField ] num_row textfield int số lượng hàng câu đố ma trận TextFie Ô để nhập liệu cho câu hỏi, ld[] câu trả lời, hint1 hint2 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 Type Mơ tả TT tính cur_X int Vị trí tọa độ x chuột cur_Y int Vị trí tọa độ y chuột int Vị trí tọa độ x chuột lúc start_X xuât phát start_Y int Vị trí tọa độ y chuột lúc xuất phát puzzle CreatePu Đối tượng puzzle zzle 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:06

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w