Caro là một loại game đối kháng hai người chơi trên một tờ giấy hay màn hình có kẻ các ô vuông đều nhau và người chơi đánh các kí tự OX vào đó. Luật chơi: trò chơi gồm hai người chơi mỗi bên lần lượt đánh dấu O—X, nếu bên nào đạt được năm dấu chung hàng (có thể là hàng dọc, hàng ngang, hàng chéo) thì thắng ngược lại người còn lại sẽ thua.
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÁO CÁO BÀI TẬP LỚN PHÁT TRIỂN PHẦM MỀM THEO CẤU PHẦN Đề tài: Xây dựng game cờ caro ngôn ngữ java theo hướng cấu phần Giáo viên hướng dẫn : Nguyễn Thái Cường Nhóm thực : Nhóm 19 Lớp : ĐH-KTPM4 – K10 Thành viên thực : Đào Hồng Nhung Đỗ Thị Thêu Đặng Thị Thơ Hà Nội, 2018 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN - - BÁO CÁO BÀI TẬP LỚN PHÁT TRIỂN PHẦM MỀM THEO CẤU PHẦN Đề tài: Xây dựng game cờ caro ngôn ngữ java theo hướng cấu phần Giáo viên hướng dẫn : Nguyễn Thái Cường Nhóm thực : Nhóm 19 Lớp : ĐH-KTPM4 – K10 Thành viên thực : Đào Hồng Nhung Đỗ Thị Thêu Đặng Thị Thơ Hà Nội, 2018 LỜI NĨI ĐẦU Nói đến cơng nghệ thơng tin hình dung đến mơi trường phát triển động vào bậc giới Nó áp dụng vào mặt đời sống, xã hội người, từ công việc giải trí Cùng với phát triển vượt bậc CNTT, người làm nên sản phẩm hữu ích để phục vụ cho đời sống tiêu biểu phải nói đến ngành giải trí Hiện có nhiều chương trình game đời mang tính giải trí mạnh mẽ thú vị, nhiên chương trình nhỏ mang tính trí tuệ chiếm phần lĩnh vực Một chương trình phải nói đến chương trình chơi cờ, đại diện “Trò chơi cờ caro” Một loại cờ nhiều người u thích tính đơn giản, thú vị trò chơi Chương trình viết ngơn ngữ Java, loại ngơn ngữ có tính tương tác mạnh với cơng cụ có sẵn giúp cho người lập trình dễ dàng phát triển ứng dụng nhanh thuận lợi Nhóm chúng em nhóm sinh viên với kinh nghiệm lập trình chưa có nhiều, kiến thức hạn hẹp, kĩ nhiều hạn chế nhận giúp đỡ tận tình thầy Nguyễn Thái Cường bạn lớp, nhóm em cố gắng hồn thành xong tập lớn Tuy nhiên tập lớn nhiều thiếu xót lỗi mong nhận đóng góp tích cực người để nhóm em hồn thiện tốt Nhóm em xin chân thành cảm ơn! Hà Nội, ngày … tháng 11 năm 2018 Nhóm sinh viên thực hiện! Tóm tắt tập lớn Đề tài: Xây dựng game cờ caro ngôn ngữ java theo hướng cấu phần Nội dung tập lớn gồm có chương: Chương Tổng quan ngôn ngữ Java lập trình hướng cấu phần - Nêu loại ứng dụng BTL, ngôn ngữ sử dụng, đặc điểm kiểu ứng dụng ngơn ngữ lập trình Kiến thức tổng quát cấu phần, cách xây dựng kiểu ứng dụng theo cấu phần Chương Phân tích thiết kế hệ thống game cờ caro - Chức chương trình, phân bố chức theo modul (cấu phần), phân rã chức dựa theo cấu phần Phân tích thiết kế dựa vào UML Chương 3: Thực nghiệm kết qua Nêu ngắn gọn cách xây dựng chương trình từ mã nguồn (sử dụng command line công cụ) Cần rõ cấu phần xây dựng MỤC LỤC Trang DANH MỤC HÌNH Trang PHẦN I MỞ ĐẦU Tên đề tài Xây dựng game cờ caro ngôn ngữ java theo hướng cấu phần Lý chọn đề tài Game cờ caro nói quen thuộc với người lứa tuổi đặc biệt sinh viên, học sinh Cách chơi game dễ, đơn giản: bạn cần tích vào ô vuông “X” “O” cho chữ “X” “O” đứng liền tạo thành hàng thẳng , dọc, chéo, ngang bạn thắng Chính lối chơi đơn giản khơng phức tạp không bị nhàm chán nên cờ caro trở nên phổ biến sống Mục đích Làm quen với ngôn ngữ, câu lệnh số cơng nghệ Nhằm giải trí nhẹ nhàng cho căng thẳng, nâng cao trí tuệ Mục tiêu Hiểu kiến thức hướng cấu phần Cách xây dựng chương trình theo hướng cấu phần Phân tích thiết kế hệ thống UML Phân tích thành phần cho game Phương pháp thực Thu thập nghiên cứu tài liệu Phương pháp mô tả Phương pháp lập kế hoạch Phương pháp phân tích Phương pháp thiết kế Ngơn ngữ lập trình: Java Cơng cụ: IntelliJ IDEA PHẦN II PHẦN NỘI DUNG Chương Tổng qt ngơn ngữ Java lập trình hướng cấu phần 1.1 Ngơn ngữ lập trình Java 1.1.1 Khái niệm chung Java công nghệ xây dựng ứng dụng phần mềm có vị trí lớn năm cuối kỉ 20, đầu kỉ 21 Nó coi cơng nghệ mang tính cách mạng khả thi việc tạo ứng dụng có khả chạy thống nhiều tảng mà cần biên dịch lần Đặc điểm bật: - Máy ảo Java (JVM - Java Virtual Machine) - Thông dịch - Độc lập - Hướng đối tượng - Đa nhiệm - đa luồng (MultiTasking - Multithreading) - Khả chuyển (portable) - Hỗ trợ mạnh cho việc phát triển ứng dụng 1.1.2 Java Swing Java Swing phần Java Foundation Classes (JFC) sử dụng để tạo ứng dụng Window-Based Nó xây dựng AWT (Abstract Windowing Toolkit) API viết hồn tồn Java Khơng giống AWT, Java Swing cung cấp thành phần (Component) gọn nhẹ độc lập tảng Javax.swing Package cung cấp lớp cho Java Swing chẳng hạn JButton, JTextField, JTextArea, JRadioButton, JCheckbox, JMenu, JcolorChooser Cấu trúc thứ bậc lớp Java Swing Sơ đồ cung cấp cho bạn nhìn tổng quan cấu trúc theo thứ bậc lớp Java Swing Hình 1.1 Cấu trúc thứ bậc Java Swing Các phương thức sử dụng phổ biến lớp Component Trong bảng sau, liệt kê số phương thức thường sử dụng Java Swing Phương thức Miêu ta public void add(Component c) Thêm thành phần thành phần khác public void setSize(int width,int height) Thiết lập kích cỡ thành phần Public void setLayout(LayoutManager m) Thiết lập Layout Manager cho thành phần public void setVisible(boolean b) Thiết lập tính nhìn thấy (visible) thành phần Theo mặc định false Có hai cách để tạo Frame: - Bởi tạo đối tượng lớp Frame (quan hệ kết hợp - Association) Bởi kế thừa lớp Frame (quan hệ kế thừa - inheritance) Phương thức setBounds(int xaxis, int yaxis, int width, int height) sử dụng để thiết lập vị trí button Giới thiệu Swing Control Mỗi UI (User Interface) bao gồm ba mặt chính: - Các phần tử UI: Đó phần tử nhìn thấy chủ yếu mà người dùng cuối nhìn thấy tương tác với GWT cung cấp nhiều phần tử đa dạng từ tới nâng cao Chúng ta giới thiệu chúng chương - Layout: Chúng định nghĩa cách phần tử UI nên tổ chức hình cung cấp đối tượng L&F (là viết tắt Look and Feel) cuối tới GUI (Graphical User Interface) Phần trình bày chương Layout - Hành vi: Đó kiện xảy người dùng tương tác với phần tử UI Phần trình bày chương Xử lý kiện Mỗi SWING control kế thừa thuộc tính từ cấu trúc thứ bậc lớp Component Lớp Component Java Swing Lớp Component lớp abstract cho điều khiển UI mà khơng có menu SWING Component biểu diễn đối tượng với biểu diễn đồ họa Sau cú pháp để khai báo lớp: public abstract class Component extends Object implements ImageObserver, MenuContainer, Serializable Lớp Component có Constructor có tên protected Component() Nó sử dụng để tạo Component Lớp Component bao gồm trường sau: static float BOTTOM_ALIGNMENT: Hằng dễ dàng sử dụng cho getAlignmentY static float CENTER_ALIGNMENT: Hằng dễ dàng sử dụng cho getAlignmentY getAlignmentX static float LEFT_ALIGNMENT: Hằng dễ dàng sử dụng cho getAlignmentX static float RIGHT_ALIGNMENT: Hằng dễ dàng sử dụng cho getAlignmentX static float TOP_ALIGNMENT: Hằng dễ dàng sử dụng cho getAlignmentY Các phần tử Swing UI Bảng liệt kê danh sách control sử dụng phổ biến thiết kế GUI sử dụng SWING ST T Control & Miêu ta Lớp JLabel Một đối tượng JLabel thành phần để đặt text vào Container Lớp JButton Lớp tạo button gán nhãn Lớp JTable Lớp JTable sử dụng để hiển thị liệu ô bảng hai chiều 10 Nguyên tắc 4: Phát triển phần mềm hướng cấu phần tăng xuất phần mềm Phần mềm hướng cấu phần xây dựng cách lắp ráp tái sử dụng thành phần có phát triển từ đầu lần – tái sử dụng thay làm Quá trình nhanh nhiều so với việc phát triển ứng dụng từ đầu hầu hết trường hợp • Nguyên tắc 5: Phát triển phần mềm hướng cấu phần thúc đẩy tiêu chuẩn phần mềm Như Clemens Czyoerski mô tả, thị phần để phát triển, thành phần tiêu chuẩn phải đạt chỗ Tiêu chuẩn sử dụng để tạo thỏa thuận chi tiết kỹ thuật giao diện vững chắc, tạo điều kiện cho hiệu thành phần đảm bảo COP mơ hình lập trình mới, “plugand-play” trở thành thực phát triển phần mềm thành phần phần cứng 1.2.3 Tại COP quan trọng? • Với lập trình hướng cấu phần, người ta tiến hành lập trình theo phương thức sau: - Xây dựng thư viện thành phần, thành phần thực công việc xác định Khi cần phát triển phần mềm cụ thể, người ta cần chọn thành phần có sẵn thư viện để ghép lại với Người lập trình phát triển thêm thành phần cần mà chưa có thư viện COP cung cấp phương thức cao mức độ trừu tượng Có số lượng ngày lớn thành phần tái sử dụng thư viện hỗ trợ việc phát triển ứng dụng cho lĩnh vực khác COP có mục tiêu chính: giải phức tạp, quản lý thay đổi, tái sử dụng - Giai phức tạp: Chúng ta sống giới phức tạp thời đại bùng nổ thơng tin Theo nhóm nghiên cứu trường đại học Berkeley năm 2000, “Thế giới sản xuất từ đến hai exabytes (exabytes = 1018bytes) thơng tin năm, khoảng 250 MB cho người đàn ông, người phụ nữ đứa trẻ trái đất Như khoa học máy tính, kích thước độ phức độ phức tạm tăng lên đáng kể Và thật may mắn, COP cung cấp cách hiệu để đối phó với phức tạp phần mềm: phân chia chinh phục Quan lý thay đổi: Thay đơi vốn có ngành cơng nghiệp cơng nghệ phần mềm Các yêu cầu người dùng thay đổi, thay đổi thông số kỹ thuật, thay đổi nhân sự, thay đổi cơng nghệ, thay đổi ngân sách nhiều nguyên nhân thay đổi khác Một nguyên tắc kỹ thuật phần mềm để nhấn mạnh tầm quan trọng quản lý thay đổi Điều quan trọng cần nhấn mạnh - 15 kiến trúc dự án COP cung cấp cách hiệu để thực theo nguyên tắc kỹ thuật phần mềm nhằm đối phó với thay đổi: lên kế hoạch cho thay đổi, thiết kế cho thay đổi xây dựng thay đổi Phần mềm dễ dàng thích ứng với yêu cầu thay đổi Các kỹ sư phần mềm đến thống cách tốt để đối phó với thay đổi liên tục xây dựng hệ thống thành phần để tái sử dụng phù hợp với tiêu chuẩn kiến trúc plug-in - Tái sử dụng: Một phần mềm phải cho phép tái sử dụng thiết kế thưc việc phải sử dụng lại hoàn cảnh khác Điều làm tăng suất làm việc, cải thiện chất lượng phần mềm… Có nhiều cấp độ khác việc tái sử dụng phần mềm Ví dụ: Sao chép mã nguồn – Đây cấp thấp việc tái sử dụng phần mềm Xây dựng lớp thư viện hàm, thủ tục hình thức tốt việc tái sử dụng so với việc chép mã nguồn không phổ biến Các lớp thư viện tốt việc tái sử dụng họ cố gắng phổ biến Tuy nhiên, vấn đề đặt đòi hỏi hiểu biết trước lớp tái sử dụng Hơn nữa, hỗ trợ tái sử dụng hộp trắng Và khách hàng bị ảnh hưởng cấu trúc bên lớp thư viện thay đổi Ví dụ, ngơn ngữ hướng đối tượng (OPP) C++ hay Java, lớp thư viện kết hợp thực với lớp sở Những thay đổi lớp sở phá vỡ kết cấu lớp thư viện Hơn mức độ tái sử dụng ngôn ngữ cụ thể, tái sử dụng ngôn ngữ khác COP hỗ trợ cấp độ cao việc tái sử dụng phần mềm cho phép tái sử dụng bao gôm hộp trắng, hộp xám hộp đen Tái sử dụng hộp trắng có nghĩa phần source code thành phần phần mềm cung cấp, nghiên cứu, tái sử dụng, điều chỉnh sửa đổi Tái sử dụng hộp đen dựa nguyên tắc ẩn thông tin Các giao diện cụ thể cho dịch vụ người dùng yêu cầu từ thành phần Các thành phần cung cấp thực giao dịch mà khách hàng thao tác Miễn giao diện không thay đổi, thành phần thay đổi nội chương trình mà khơng ảnh hưởng tới người dùng Tái sử dụng hộp xám nằm tái sử dụng hộp đen tái sử dụng hộp trắng Khi kích thước độ phức tạp hệ thống phần mềm tăng lên, việc xác định quản lý phù hợp mối liên hệ thành phần hệ thông trở thành trọng tâm COP cung cấp giải pháp quản lý để đối phó với phức tạp phần mềm, thay đổi liên tục hệ thống vấn đề tái sử dụng phần mềm COP mơ hình thực tế để phát triển hệ thống phần mềm lớn Ví dụ doanh nghiệp có quy mơ lớn nằm phân tán, ứng dụng web dịch vụ web 1.2.4 Ưu nhược điểm 16 Ưu điểm: - Tư giải thuật rõ ràng Đơn giản, dễ hiểu Nhược điểm: - - - Trong lập trình hướng cấu phần ta thường quan tâm đến việc phát triển hàm mà quan tâm tới liệu – thứ mà chúng dùng để xử lý công việc (Điều khiến cho liệu khó kiểm sốt) Khơng hỗ trợ sử dụng lại mã nguồn: cấu trúc liệu phù hợp với số giải thuật, thay đổi cấu trúc liệu giải thuật phải thay đổi theo Khơng phù hợp với tốn lớn có nhiều module Chương Phân tích thiết kế hệ thống game cờ caro 2.1 Giới thiệu game caro 17 Là loại game đối kháng hai người chơi tờ giấy hay hình có kẻ vng người chơi đánh kí tự O X vào Luật chơi: trò chơi gồm hai người chơi bên đánh dấu O—X, bên đạt năm dấu chung hàng (có thể hàng dọc, hàng ngang, hàng chéo) thắng ngược lại người lại thua 2.2 Mơ hình Use case Hình 2.2 Biểu đồ Use case game caro 2.2.1 Danh sách Actor Tên Actor Ý nghĩa Người chơi Người điều khiển tồn trò chơi 2.2.2 Danh sách Use-case STT Tên Use-case Ý nghĩa / Ghi Game Use case hệ thống giúp quản lý chế độ chơi như: New, End Game Help Use case giúp người xem thông tin game hướng dẫn chơi game Hight soccer Use case giúp người chơi lưu điểm cao Exit Use case giúp người chơi trò chơi New game Use case giúp người chơi chơi ván 18 End game 2.2.3 Đặc 2.2.3.1 Use case giúp người chơi trò chơi tả use case Use case Game Hình 2.3 Use case game Tóm tắt: Use case hệ thống giúp quản lý chế độ chơi như: New, End Game Các dòng kiện chính: Người chơi khởi động chương trình chọn chơi “Game” Hệ thống hiển thị giao diện trò chơi cho người chơi Trong q trình chơi, người dùng chọn chức kết thúc trò chơi “End game” chơi lại “new game” o Người chơi lựa chọn chức Nếu người chơi chọn New game Dòng kiện A1 thực Nếu người chơi chọn End game Dòng kiện A2 thực Các dòng kiện rẽ nhánh: Luồng kiện A1: Hệ thống thực load lại trò chơi trở trạng thái ban đầu Luồng kiện A2: Hệ thống dừng trò chơi Tiền điều kiện: Yêu cầu người chơi khởi động chương trình Hậu điều kiện: Hiển thị giao diện trò chơi chức chơi lại kết thúc trò chơi 2.2.3.2 Use-case New Tóm tắt: Use case giúp người chơi tạo chơi Các dòng kiện chính Người chơi khởi động chương trình chọn chơi Game Hệ thống hiển thị lựa chọn cho người chơi: New End Game 19 Người chơi lựa chọn từ danh sách New Chương trình khởi động lại trạng thái lưu trước Các dòng kiện rẽ nhánh: Khơng có Tiền điều kiện: Yêu cầu người chơi khởi động chương trình Hậu điều kiện: Người chơi tạo chơi Use-case End game Tóm tắt: Use case giúp người chơi kết thúc trò chơi Các dòng kiện chính Người chơi khởi động chương trình chọn chơi Game Hệ thống hiển thị lựa chọn cho người chơi: New End Game Người chơi lựa chọn từ danh sách End Game Chương trình tắt, người chơi khỏi trò chơi 2.2.3.3 Các dòng kiện rẽ nhánh: Khơng có Tiền điều kiện: u cầu người chơi khởi động chương trình Hậu điều kiện: Người chơi khỏi trò chơi 2.2.3.4 Use case Hight soccer Hình 2.4 Use case hight soccer Tóm tắt: Use case hệ thống hiển thị top người chơi có điểm số cao Các dòng kiện chính: Người chơi khởi động chương trình chọn High Score Hệ thống hiển thị thơng tin danh sách người chơi có điểm số cao Các dòng kiện rẽ nhánh: Khơng có Tiền điều kiện: Lựa chọn menu High Score Hậu điều kiện: Hiển thị danh sách người chơi có điểm số cao 2.2.3.5 Use case Help 20 Hình 2.5 Use case help Tóm tắt: Use case hệ thống hiển thị luật chơi game Các dòng kiện chính: Người chơi khởi động chương trình chọn help Hệ thống hiển thị thơng tin luật chơi Các dòng kiện rẽ nhánh: Khơng có Tiền điều kiện: Lựa chọn menu help Hậu điều kiện: Hiển thị luật chơi 2.2.3.6 Use case Exit Hình 2.6 Use case exit Tóm tắt: Use case hệ thống khỏi chương trình Các dòng kiện chính: Người chơi khởi động chương trình chọn exit Hệ thống khỏi chương trình Các dòng kiện rẽ nhánh: Khơng có Tiền điều kiện: Lựa chọn menu exit 2.2.3.7 Use case Sound Hình 2.7 Use case Sound Tóm tắt: Use case giúp người chơi cài đặt âm cho trò chơi Các dòng kiện chính 21 Người chơi lựa chọn từ danh sách Sound Chương trình hiển thị lên chức Tắt/bật âm Chương trình mở mặc định có âm Người chơi chọn tắt âm dòng kiện A1 thực Nếu người chơi chơi chế độ khơng có âm mà chọn bật âm dòng kiện A2 thực Các dòng kiện rẽ nhánh: Luồng kiện A1: Âm trò chơi tắt Luồng kiện A2: Âm trò chơi bật lên Tiền điều kiện: Yêu cầu người chơi khởi động chương trình, chọn Sound Hậu điều kiện: Người chơi thay đổi âm trò chơi 2.2.4 Sơ đồ lớp Hình 2.8 Sơ đồ lớp 22 Chương Thực nghiệm - Ứng dụng 3.1 Xây dựng chương trình Command Line 3.1.1 Phân tích cấu phần cho Game Caro Từ phân tích chức thực Chương II, chia Game Caro thành cấu phần sau: Cấu phần giao diện: - Hình 3.9 Giao diện game - - 3.1.2 Cấu phần Âm game: Cho phép thay đổi âm phát chơi tạo hút, thích thú cho người chơi Cấu phần luật chơi: Cho phép mức độ chơi Các cấu phần built thành thư viện file class dễ dàng thay Cấu phần chức Save: Lưu trữ trạng thái hành trò chơi lên tệp liệu ghi đĩa cứng máy tính, trạng thái nạp trở lại lần khởi động trò chơi sau Cấu hình biến môi trường để sử dụng Command Line Đầu tiên bạn thiết lập biến môi trường: Bước 1: My computer >Nháy chuột phải > Properties > Advanced > Environment Bước 2: Tại mục "System variables" bạn tìm tới "Path" chọn "Edit" Bước 3: Tìm đường dẫn tới thư mục bin java, máy là: 23 C:\Program Files\Java\jdk1.8.0_152\bin Chèn đường dẫn vào cuối ô “Variable value” Bước 4: Ok lưu lại Kiểm tra việc thiết lập biến mơi trường có thành cơng hay khơng cách mở cửa sổ Run lên (ấn tổ hợp phím Window + r), gõ cmd ấn Enter gõ câu lệnh sau Nếu hình sau việc thiết lập biến môi trường bạn thành công 3.1.3 Xây dựng Game Caro Command Line Bước 1: Xây dựng mã nguồn GameView.java, SoundView.java, Menu.java, Main.java Intelliji IDEA Bước 2: Trong Command line sử dụng câu lệnh Để build file.java thành file.class Bước 3: Sau build thành file.class sử dụng câu lệnh sau để chạy chương trình 24 Lưu ý: lấy tên file bỏ class Sau build xong ta có thêm thư mục “out” chứa file.class Hình 3.10 Thư mục “out” 3.2 Giao diện Game Caro 3.2.1 Giao diện menu Hình 3.11 Giao diện menu 3.2.2 Giao diện GameView 25 Hình 3.12 Giao diện hình chính game 3.2.3 Giao diện SoundView Hình 3.13 Giao diện cài đặt âm 26 KẾT LUẬN Hiện lập trình game lĩnh vực thu hút nhiều lập trình viên Việc xây dụng ứng dụng vui chơi giải trí cần thiết cho phát triển cơng nghệ Nhìn chung game tạo đáp ứng nhu cầu giải trí người chơi với giao diện thân thiện, đơn giản, dễ sử dụng thao tác Tuy nhiên số lỗi chưa khắc phục bàn cờ hạn chế chưa đẹp mắt Với kiến thức có mình, nhóm em hồn thành xong tập lớn nhiên với kinh nghiệm lập trình chưa có nhiều, kiến thức hạn hẹp, kĩ nhiều hạn chế nhóm em cố gắng thực theo yêu cầu đề Nhóm em mong nhận ý kiến đóng góp thầy bạn để tập hoàn thiện tốt 27 LỜI CẢM ƠN Trên thực tế khơng có thành cơng mà khơng gắn liền với hỗ trợ, giúp đỡ dù hay nhiều, dù trực tiếp hay gián tiếp người khác Trong suốt thời gian từ bắt đầu học tập giảng đường đại học đến nay, nhóm chúng em nhận nhiều quan tâm, giúp đỡ q thầy bạn bè Với lòng biết ơn sâu sắc nhất, em xin gửi đến quý thầy cô khoa Công nghệ thông tin – Trường đại học Công nghiệp Hà Nội đặc biệt thầy Nguyễn Thái Cường hướng dẫn môn “Phát triển phần mềm theo cấu phần” với tri thức tâm huyết để truyền đạt vốn kiến thức quý báu cho nhóm chúng em suốt thời gian học tập trường, giúp cho chúng em hoàn thiện tập lớn tốt Sau nhóm chúng em xin kính chúc thầy dồi sức khỏe thành công nghiệp cao quý với sứ mệnh cao dẫn dắt hệ trẻ không ngừng cống hiến phát triển ngành Công nghệ thông tin 28 TÀI LIỆU THAM KHẢO [1] Java Swing O’Reilly Media - 6/2006 [2] Think Java O’Reilly Media [3] Component-Based Software Development Semantic Scholar [4] Hướng dẫn lập trình game cờ caro ngôn ngữ Java Google [5] Introduction to Algorithm MIT Press - 1989 29