You are on page 1of 35

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM

ĐỒ ÁN JAVA

XÂY DỰNG TRÒ CHƠI SUDOKU

Ngành: CÔNG NGHỆ THÔNG TIN


Chuyên ngành: CÔNG NGHỆ PHẦN MỀM

Giảng viên hướng dẫn: TS. Nguyễn Thị Hải Bình


Lớp: 18DTHJB1
Sinh viên thực hiện: Lê Thành Hậu - 1811062932
Phạm Phúc Thịnh - 1811063154
Lê Huỳnh Ý - 1811061247

TP. Hồ Chí Minh, 2022


MỤC LỤC
CHƯƠNG 1: TỔNG QUAN ............................................................................................................. 1
1.1 Giới thiệu đề tài .......................................................................................................................... 1
1.2 Cơ sở lý thuyết ........................................................................................................................... 1
1.2.1 Java là gì.............................................................................................................................. 1
1.2.2 Java Swing là gì .................................................................................................................. 2
CHƯƠNG 2: XÂY DỰNG TRÒ CHƠI SUDOKU ......................................................................... 7
2.1 MỤC TIÊU ................................................................................................................................ 7
2.2 GIAO DIỆN ............................................................................................................................... 8
CHƯƠNG 3: CÀI ĐẶT ................................................................................................................... 19
3.1 Input ......................................................................................................................................... 19
3.2 Đồng hồ .................................................................................................................................... 19
3.3 New game ................................................................................................................................ 21
3.4 Reset game ............................................................................................................................... 21
3.5 Pause ........................................................................................................................................ 21
3.6 Resume ..................................................................................................................................... 21
3.7 Submit ...................................................................................................................................... 22
3.8 Level......................................................................................................................................... 22
3.9 Help .......................................................................................................................................... 22
3.10 Code để thiết kế giao diện ...................................................................................................... 23
3.11 Code thiết kế giao diện chức năng để nhập dữ liệu ............................................................... 26

CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG GIẢI QUYẾT ............................................................... 32


4.1 Ưu và nhược điểm .................................................................................................................... 32
4.2 Hướng giải quyết...................................................................................................................... 32
TÀI LIỆU THAM KHẢO ............................................................................................................... 33
CHƯƠNG 1: TỔNG QUAN
1.1 Giới thiệu đề tài
− Tên đề tài: Trò chơi Sudoku
− Mô tả: là một trò chơi dành cho người dùng để giải trí
− Ngôn ngữ lập trình: java
− Nền tảng: Apache Netbeans IDE 12.5
− Đối tượng sử dụng: người dùng

1.2 Cơ sở lý thuyết

1.2.1 Java là gì
Java là một một ngôn ngữ lập trình hiện đại, bậc cao, hướng đối tượng, bảo mật và mạnh
mẽ. và là một Platform.
Platform: Bất cứ môi trường phần cứng hoặc phần mềm nào mà trong đó có một chương
trình chạy, thì được hiểu như là một Platform. Với môi trường runtime riêng cho mình
(JRE) và API, Java được gọi là Platform.
Ngôn ngữ lập trình Java ban đầu được phát triển bởi Sun Microsystems do James
Gosling khởi xướng và phát hành vào năm 1995. Phiên bản mới nhất của Java Standard
Edition là Java SE 8. Với sự tiến bộ của Java và sự phổ biến rộng rãi của nó, nhiều cấu hình
đã được xây dựng để phù hợp với nhiều loại nền tảng khác nhau. Ví dụ: J2EE cho các ứng
dụng doanh nghiệp, J2ME cho các ứng dụng di động.
Các phiên bản J2 mới đã được đổi tên thành Java SE, Java EE và Java ME. Phương châm
của java là "Write Once, Run Anywhere" - viết một lần chạy nhiều nơi, nghĩa là bạn chỉ cần
viết một lần trên window chẳng hạn, sau đó vẫn chương trình đó bạn có thể chạy trên Linux,
Android, các thiết bị J2ME…

1
1.2.1.1 Các tính năng của Java
Ngôn ngữ lập trình java có các tính năng sau:
• Hướng đối tượng - Trong Java, mọi thứ đều là một Object. Java có thể dễ dàng mở rộng
và bảo trì vì nó được xây dựng dựa trên mô hình Object.
• Nền tảng độc lập - Không giống nhiều ngôn ngữ lập trình khác bao gồm cả C và C ++,
khi Java được biên dịch, nó không được biên dịch thành ngôn ngữ máy nền tảng cụ thể,
thay vào mã byte - nền tảng độc lập. Mã byte này được thông dịch bởi máy ảo (JVM)
trên nền tảng nào đó mà nó đang chạy.
• Đơn giản - Java được thiết kế để dễ học. Nếu bạn hiểu khái niệm cơ bản về OOP Java,
sẽ rất dễ để trở thành master về java.
• Bảo mật - Với tính năng an toàn của Java, nó cho phép phát triển các hệ thống không có
virut, giả mạo. Các kỹ thuật xác thực dựa trên mã hoá khóa công khai.
• Kiến trúc - trung lập - Trình biên dịch Java tạo ra định dạng tệp đối tượng kiến trúc
trung lập, làm cho mã biên dịch được thực thi trên nhiều bộ vi xử lý, với sự hiện diện
của hệ điều hành Java.
• Portable - Là kiến trúc tập trung và không có khía cạnh thực hiện phụ thuộc của đặc tả
này làm cho Java khả chuyển. Trình biên dịch trong Java được viết bằng ANSI C, đó là
một tập con POSIX.
• Mạnh mẽ - Java làm nỗ lực để loại trừ các tình huống dễ bị lỗi bằng cách kiểm tra lỗi tại
thời gian biên dịch và kiểm tra lỗi tại runtime.
• Đa luồng - Với tính năng đa luồng của Java có thể viết các chương trình có thể thực hiện
nhiều tác vụ đồng thời. Tính năng thiết kế này cho phép các nhà phát triển xây dựng các
ứng dụng tương tác có thể chạy trơn tru hơn.
• Thông dịch - Mã byte Java được dịch trực tiếp tới các máy tính gốc và không được lưu
trữ ở bất cứ đâu.
• Hiệu năng cao - Với việc sử dụng trình biên dịch Just-In-Time, Java cho phép thực hiện
hiệu năng cao.
• Phân tán - Java được thiết kế cho môi trường phân tán của Internet.
• Năng động - Java là năng động hơn C hoặc C++ vì nó được thiết kế để thích nghi với
môi trường đang phát triển. Các chương trình Java có thể mang một lượng lớn thông tin
tại runtime mà có thể được sử dụng để xác minh và giải quyết các truy cập vào các đối
tượng tại runtime.
2
1.2.1.2 Ưu và nhược điểm của Java
Ưu điểm
• Java là nền tảng độc lập vì chúng ta có thể chạy mã Java trên bất kỳ máy nào mà không
cần cài đặt bất kỳ phần mềm đặc biệt nào, JVM thực hiện điều đó.
• Java là hướng đối tượng vì các lớp và đối tượng của nó.
• Lý do chính để Java được bảo mật là con trỏ, Java không sử dụng con trỏ.
• Trong Java, chúng ta có thể thực thi nhiều chương trình đồng thời, do đó, có thể đạt
được đa luồng.
• Java mạnh mẽ vì nó có nhiều tính năng như thu gom rác, không sử dụng con trỏ rõ ràng,
xử lý ngoại lệ.
• Java là một ngôn ngữ cấp cao giúp nó dễ hiểu.
• Quản lý bộ nhớ hiệu quả được thực hiện bằng Ngôn ngữ lập trình Java.
• Nhược điểm
• Là một ngôn ngữ cấp cao, nó phải xử lý các cấp độ biên dịch và trừu tượng của một máy
ảo. Java thể hiện hiệu suất kém, nguyên nhân chính là do bộ thu gom rác, cấu hình bộ
nhớ đệm không hợp lệ và bế tắc giữa các quy trình.
• Java có rất ít trình tạo GUI – Swing, SWT, JSF và JavaFX trong số những trình xây
dựng phổ biến hơn.
• Để viết mã để thực hiện một tập hợp các hoạt động đơn giản, bạn có thể phải viết những
đoạn mã dài và phức tạp. Điều này có thể ảnh hưởng đến khả năng đọc nhưng đảm bảo
rằng các lập trình viên nhập chính xác những gì cần phải làm. Khi chúng tôi so sánh
Java với Python , chúng tôi nhận thấy Python không cần dấu chấm phẩy, dấu ngoặc đơn
hoặc dấu ngoặc nhọn và có mã ngắn hơn rõ ràng.

1.2.2 Java Swing là gì


- Java Swing là cách gọi rút gọn khi người ta nhắc đến Swing của Java Foundation (JFC).
Nó là bộ công cụ GUI mà Sun Microsystems phát triển để xây dựng các ứng dụng tối ưu
dùng cho window (bao gồm các thành phần như nút, thanh cuộn,…).
- Swing được xây dựng trên AWT API và hoàn toàn được viết bằng Java. Tuy nhiên, nó lại
khác với AWT ở chỗ bộ công cụ này thuộc loại nền tảng độc lập, bao gồm các thành phần
nhẹ và phức tạp hơn AWT.

3
- Các gói javax.swing bao gồm các lớp cho Java Swing API như JMenu, JButton,
JTextField, JRadioButton, JColorChooser,…
- Việc xây dựng ứng dụng sẽ trở nên dễ dàng hơn với Java Swing vì chúng ta có các bộ
công cụ GUI giúp đỡ công việc.
- Swing được chính thức phát hành vào tháng 3/1998. Nó đi kèm với thư viện Swing 1.0 với
hơn 250 lớp, 80 giao tiếp.
- Hiện nay con số này đã được tăng lên, ở phiên bản Swing 1.4 có 451 lớp và 85 giao tiếp.
- Các bản phát hành Java 2 (SDK 1.2 và các phiên bản mới hơn) đều bao gồm Swing trong
runtime environment.

1.2.2.1 Ứng dụng của Java Swing:


Java Swing được dùng để hỗ trợ tạo giao diện đồ hoạ người dùng (với Java).
Bộ công cụ này cung cấp các bộ điều khiển nâng cao như thanh trượt, colorpicker, Tree,
TabbedPane và bảng điều khiển,..
Swing có những đặc điểm:
• Độc lập với thiết bị
• Có thể tuỳ chỉnh, mở rộng
• Khá nhẹ
• Có thể cấu hình
Ngoài ra bạn cũng có thể tùy chỉnh các điều khiển xoay một cách dễ dàng mà không ảnh
hưởng đến các thành phần khác.

4
1.2.2.2 Cấu trúc phân lớp của Java Swing

- Chú thích: Tất cả các thành phần trong swing được kế thừa từ lớp Jcomponent như
JButton, JComboBox, JList, JLabel đều có thể được thêm vào lớp Container.
- Container là các window như Frame và Dialog. Các container này chỉ có thể thêm một
thành phần vào chính nó.
1.2.3 Java awt là gì
- Java AWT (Abstract Window Toolkit) là một API để phát triển các ứng dụng dựa trên
GUI hoặc cửa sổ trong java.
- Các thành phần Java AWT là các thành phần phụ thuộc vào nền tảng được hiển thị theo
giao diện của hệ điều hành. AWT có nghĩa là các thành phần của nó sử dụng các tài nguyên
của hệ điều hành.
- Gói java.awt cung cấp các lớp cho api AWT như TextField, Label, TextArea,
RadioButton, CheckBox, Choice, List, v.v.

5
1.2.3.1 Phân cấp Java Awt

- Container:
Vùng chứa (Container) là thành phần trong AWT mà chứa các thành phần khác như button,
textfield, label, ... Các lớp được kế thừa lớp Container được biết đến như các container như
Frame, Dialog, Panel.
- Window:
The window is the container that have no borders and menu bars. You must use frame,
dialog or another window for creating a window.
- Panel:
Panel là vùng chứa mà không chứa thanh tiêu đề và thanh menu. Nó có thể có các thành
phần như button, textfield, ...
- Frame:
Khung (Frame) là vùng chứa thanh tiêu đề và có thể có các thanh trình đơn. Nó có thể có
các thành phần khác như button, textfield, ...

6
CHƯƠNG 2: XÂY DỰNG TRÒ CHƠI SUDOKU
2.1 MỤC TIÊU
Sudoku là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp. Mục tiêu của trò
chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗi phần trong số
chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là "hộp", "khối", hoặc "vùng") đều chứa
tất cả các chữ số từ 1 tới 9. Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp
bằng việc điền số.
Nội dung hướng dẫn gồm 2 phần:
✓ Thiết kế: Thiết kế giao diện .
✓ Xây dựng chức năng.
Các phần chính ứng dụng:

• Nút New game : Trò chơi sẽ tự động làm mới khi được nhấn.

• Nút Reset game: Trò chơi sẽ tự động xóa đi những ô đã được nhập

• Nút Pause: Trò chơi sẽ bị dừng ngay lập tức

• Nút Resume: Trò chơi sẽ được tiếp tục khi trước đó người dùng đã bấm Pause.

• Nút Submit: Sau khi người chơi hoàn thành thì kết quả sẽ hiển thị.
• Game:
+ New game 9x9: khởi tạo trò chơi theo 9 ô dọc và 9 ô ngang.
+ New game 6x6: khởi tạo trò chơi theo 6 ô dọc và 6 ô ngang.
+ Exit: Thoát trò chơi.

• Level:
+ Beginner: Chế độ dễ
+ Intermediator: Chế độ trung bình
+ Expart: Chế độ khó

• Help:
About: Thông tin trò chơi

7
2.2 GIAO DIỆN

Hình 2.2.1: Giao diện chính


Chức năng:
- New game: Tạo trò chơi mới.
- Reset game: Xóa các ô đã điền.
- Pause: Dừng trò chơi.
- Resume: Tiếp tục trò chơi .

8
Hình 2.2.2: New game

9
Hình 2.2.3: Reset game
Các ô trong trò chơi sẽ tự động xóa và đồng hồ sẽ bắt đầu tính giờ lại.

10
Hình 2.2.4: Pause
Trò chơi sẽ bị dừng tạm thời và đồng hồ sẽ ngưng.

11
Hình 2.2.5: Submit
Kết thúc sẽ có thông báo xuất hiện để hiển thị kết quả trò chơi.

12
Hình 2.2.6: New game 9x9
Khởi tạo trò chơi theo ô 9x9

13
Hình 2.2.7: New game 6x6
Khởi tạo trò chơi theo ô 6x6.

14
Hình 2.2.8: Level beginner

15
Hình 2.2.9: Level Intermediator

16
Hình 2.2.10: Level Expart

17
Hình 2.2.11: Thông tin

18
CHƯƠNG 3: CÀI ĐẶT
3.1 Input

19
3.2 Đồng hồ

20
3.3 New game

3.4 Reset game

3.5 Pause

3.6 Resume

21
3.7 Submit

3.8

3.9

3.10 Code thiết kế giao diện chương trình

22
23
24
3.11 Code thiết kế chức năng để nhập dữ liệu vào giao diện

25
26
27
28
29
30
31
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG GIẢI QUYẾT
4.1 Ưu và nhược điểm
- Ưu điểm:
+ Trò chơi đảm bảo các chức năng cần thiết của game sudoku.
+ Tạo được 2 loại sudoku là 9x9, 6x6
+ Có các level tùy ý
- Nhược điểm:
+ Chưa có đăng nhập trò chơi
+ Chưa đặt tên được cho người chơi
+ Lưu kết quả trò chơi
4.2 Hướng giải quyết
- Tìm hiểu các hướng dẫn
- Liên kết cơ sở dữ liệu
4.3 Hướng phát triển
- Kết nối online để thi đấu với các người chơi khác
các chức năng cơ bản
+ Bảng điểm
+ So sánh
+ thời gian nhanh
+……

32
TÀI LIỆU THAM KHẢO
[1] Java Swing là gì? Cách học lập trình Java Swing cơ bản | Ironhack VN
(ironhackvietnam.edu.vn)
[2]https://www.w3schools.com/
[3]http://www.thayphet.net/
[4] Thuật toán giải sudoku bằng quay lui backtracking - O₂ Education (o2.edu.vn)
[5] https://o2.edu.vn/thuat-toan-giai-sudoku-bang-quay-lui-backtracking/
[6] http://thayphet.net/product-cat/175-chuyen-de-1-cnpmngon-ngu-java-.html
[7] http://thayphet.net/product-cat/104-lap-trinh-java-cd-mang-may-tinh-.html

33

You might also like