“Game Xếp Hình”. Hay còn được gọi là Puzzle, có nghĩa là câu đố, đây là trò chơi thuộc thể loại game trí tuệ. Trò chơi này cũng giống như các trò chơi xếp hình, đầu tiên với kích thước trò chơi là 9 ô, trạng thái ban đầu được khởi tạo ngẫu nhiên.
Trang 1MỤC LỤC
DANH MỤC CÁC HÌNH ẢNH VÀ SƠ ĐỒ 2
TÓM TẮT ĐỀ TÀI 3
1 Cơ sở lý thuyết 4
1.1 Giới thiệu về ngôn ngữ Java: 4
1.2 Một số tính chất của ngôn ngữ Java: 4
1.2.1 Đơn giản: 4
1.2.2 Hướng đối tượng: 4
1.2.3 Độc lập phần cứng và hệ điều hành: 5
1.2.4 Mạnh mẽ: 6
1.2.5 Bảo mật: 6
1.2.6 Phân tán: 7
1.2.7 Đa luồng 7
1.2.8 Linh động 7
2 Quá trình xây dựng chương trình: 7
2.1 Xác định yêu cầu: 7
2.1.1 Yêu cầu chức năng: 7
2.1.2 Yêu cầu phi chức năng: 7
2.2 Thiết kế chương trình: 7
2.2.1 Biểu đồ Usecase: 7
2.2.2 Biểu đồ trình tự: 8
2.2.3 Thiết kế thuật toán : 11
2.2.4 Thiết kế giao diện người dùng 12
3 Kết quả: 15
Trang 2Hình 1.1: Các biên dịch chương trình hệ thống
Hình 1.2: Biên dịch hệ thống java
Hình 2.1 Biểu đồ Usecase
Hình 2.2 Biểu đồ trình tự bắt đầu chơi game
Hình 2.3 Biểu đồ trình tự tự động chơi game
Hình 2.4 Biểu đồ trình tự thêm ảnh
Hình 2.5 Biểu đồ trình tự cài đặt game
Hình 2.6 Bài toán mô tả hàm ước lượng Heuristic
Hình 3.1 Giao diện chính của chương trình
Hình 3.2 Các chức năng chính của chương trình
Hình 3.3 Giao diện bắt đầu chơi game
Hình3.4 : Giao diện thiết lập độ khó cho trò chơi
Hình 3.5 : Giao diện game khi Win
Hình 3.6 : Giao diện hỏi người chơi có muốn Autorun không
Hình 3.7 : Giao diện khi game đang tự động chơi
Hình 3.8 : Giao diện Add Image
Hình 3.9 : Giao diện cài đặt trò chơi
Hình 3.10 : Giao diện hướng dẫn cho người chơi
Trang 3PHÂN CÔNG CÔNG VIỆC VÀ ĐÁNH GIÁ KẾT QUẢ
Họ Tên Nhiệm Vụ Kết Quả
Đinh Thu Quỳnh Xác định yêu cầu và thiết kế
chương trình ( Các biểu đồ ) Hoàn thành
Phạm Đức Mạnh Thiết kế thuật toán và kết
Nguyễn Quốc Hùng Cơ sở lý thuyết và thiết kế
giao diện người dùng Hoàn thành
Trang 4Java là một ngôn ngữ lập trình dạng lập trình hướng đối tượng (OOP) Khác vớiphần lớn ngôn ngữ lập trình thông thường, thay vì biên dịch mã nguồn thành mã máyhoặc thông dịch mã nguồn khi chạy, Java được thiết kế để biên dịch mã nguồn thànhbytecode, bytecode sau đó sẽ được môi trường thực thi (runtime environment) chạy.Bằng cách này, Java thường chạy chậm hơn những ngôn ngữ lập trình thông dịch khácnhư C++, Python, Perl, PHP, C#
Ngôn ngữ lập trình Java được giới thiệu vào năm 1990 Sau đó không lâu, ngônngữ này được sử dụng rộng rãi và phổ biến đối với các lập trình viên chuyên nghiệpcũng như các nhà phát triển phần mềm
Để hiểu rõ hơn về Java nhóm chúng em đã tìm hiểu và xây dựng một chương
trình đơn giản là “Game Xếp Hình” Hay còn được gọi là Puzzle, có nghĩa là câu đố,
đây là trò chơi thuộc thể loại game trí tuệ Trò chơi này cũng giống như các trò chơixếp hình, đầu tiên với kích thước trò chơi là 9 ô, trạng thái ban đầu được khởi tạo ngẫunhiên Nhiệm vụ của người chơi là xếp 8 chữ số sao cho đạt được trạng thái win chonhư sau:
1 2 3
4 5 6
7 8Người chơi sẽ dịch chuyển các số theo các hướng lên xuống,sang trái phải khi ôcạnh nó là ô trống.Độ khó của trò chơi được qui định bằng giới hạn thời gian chơi và
Trang 53 Kết quả
4 Hạn chế thiếu xót và hướng phát triển
1 Cơ sở lý thuyết
1.1 Giới thiệu về ngôn ngữ Java:
Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6 năm
1995 Từ đó, nó đã trở thành một công cụ lập trình của các lập trình viên chuyênnghiệp Java được xây dựng trên nền tảng của C và C++, do vậy nó sử dụng các cúpháp của C và các đặc trưng hướng đối tượng của C++
Vào năm 1991, một nhóm các kỹ sư của Sun Microsystems có ý định thiết kế mộtngôn ngữ lập trình để điều khiển các thiết bị điện tử như tivi, máy giặt, lò nướng,…Mặc dù C và C++ có khả năng làm việc này nhưng trình biên dịch lại phụ thuộc vàotừng loại CPU
Trình biên dịch thường phải tốn nhiều thời gian để xây dựng nên rất đắt, vì vậy để
Trang 61.2 Một số tính chất của ngôn ngữ Java:
Java là ngôn ngữ lập trình được phát triển từ ngôn ngữ lập trình C/C++ Nó kếthừa, phát huy các thế mạnh của ngôn ngữ C/C++ và lược bỏ đi các cú pháp phức tạpcủa C/C++ Ngôn ngữ lập trình Java có một số đặc trưng tiêu biểu: đơn giản, hướng đốitượng, độc lập phần cứng và hệ điều hành, mạnh mẽ, bảo mật, phân tán, đa luồng vàlinh động
1.2.1 Đơn giản:
Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen thuộcvới đa số người lập trình Do vậy Java loại bỏ các đặc trưng phức tạp của C và C++như:
- Loại bỏ thao tác con trỏ, thao tác định nghĩa chồng toán tử
- Không cho phép đa kế thừa mà sử dụng các giao diện
- Không sử dụng lệnh “goto” cũng như file header (.h)
- Loại bỏ cấu trúc “struct” và “union”
1.2.2 Hướng đối tượng:
Java là ngôn ngữ lập trình thuần hướng đối tượng, mọi chương trình viết trênJava đều phải được xây dựng trên các đối tượng Nếu trong C/C++ ta có thể tạo ra cáchàm (chương trình con không gắn với đối tượng nào) thì trong Java ta chỉ có thể tạo racác phương thức (chương trình con gắn liền với một lớp cụ thể) Trong Java không cho
Trang 7Đối với các ngôn ngữ lập trình truyền thống như C/C++, phương pháp biên dịchđược thực hiện như sau :
Hình 1.1: Các biên dịch chương trình hệ thống
Với mỗi nền phần cứng khác nhau, có một trình biên dịch khác nhau để biên dịch mã nguồn chương trình cho phù hợp với nền phần cứng ấy Do vậy, khi chạy trên một nền phần cứng khác bắt buộc phải biên dịch lại mã nguồn
Đối với các chương trình viết bằng Java, trình biên dịch Javac sẽ biên dịch mãnguồn thành dạng bytecode Sau đó, khi chạy chương trình trên các nền phần cứngkhác nhau, máy ảo Java dùng trình thông dịch Java để chuyển mã bytecode thành dạngchạy được trên các nền phần cứng tương ứng Do vậy, khi thay đổi nền phần cứng,không phải biên dịch lại mã nguồn Java
Trang 8Hình 1.2: Biên dịch hệ thống java
1.2.4 Mạnh mẽ:
Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu
- Kiểu dữ liệu phải khai báo tường minh
- Java không sử dụng con trỏ và các phép toán con trỏ
- Java kiểm tra tất cả các truy nhập đến mảng, chuỗi khi thực thi để đảm bảo rằng cáctruy nhập đó không ra ngoài giới hạn kích thước
- Trong các môi trường lập trình truyền thống, lập trình viên phải tự mình cấp phát
Trang 9Java cung cấp một môi trường quản lý thực thi chương trình với nhiều mức đểkiểm soát tính an toàn:
- Ở mức thứ nhất, dữ liệu và các phương thức được đóng gói bên trong lớp Chúngchỉ được truy xuất thông qua các giao diện mà lớp cung cấp
- Ở mức thứ hai, trình biên dịch kiểm soát để đảm bảo mã là an toàn, và tuân theo các
nguyên tắc của Java
- Mức thứ ba được đảm bảo bởi trình thông dịch chúng kiểm soát xem bytecode có
đảm bảo các quy tắc an toàn trước khi thực thi không
- Mức thứ tư kiểm soát việc nạp các lớp vào bộ nhớ để giám sát việc vi phạm giới
hạn truy xuất trước khi nạp vào hệ thống
1.2.6 Phân tán:
Java được thiết kế để hỗ trợ các ứng dụng chạy trên mạng bằng các lớp mạng(java.net) Hơn nữa, Java hỗ trợ nhiều nền chạy khác nhau nên chúng được sử dụngrộng rãi như là công cụ phát triển trên Internet - nơi sử dụng nhiều nền khác nhau
Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi trường
mở Các chương trình Java chứa rất nhiều thông tin thực thi nhằm kiểm soát và truynhập đối tượng lúc chạỵ Điều này cho phép khả năng liên kết mã động
Trang 102 Quá trình xây dựng chương trình:
2.1 Xác định yêu cầu:
2.1.1 Yêu cầu chức năng:
Game xếp hình (hay còn gọi là Puzzle) là một trò chơi điều khiển các khối trượt trong một khung được đánh số thứ tự ngẫu nhiên với một ô bị thiếu Nhiệm vụ của chúng ta là trượt các khối Các khối trượt là những con số hoặc hình ảnh sao cho kết quả được dãy số sắp xếp tăng hoặc giảm dần, hoặc các hình được ghép lại từ các miếngnhỏ thành hình ban đầu
2.1.2 Yêu cầu phi chức năng:
Giao diện game đơn giản, thân thiện và dễ sử dụng với người chơi
2.2 Thiết kế chương trình:
2.2.1 Biểu đồ Usecase:
Trang 11Hình 2.1 Biểu đồ Usecase
2.2.2 Biểu đồ trình tự:
2.2.2.1 Biểu đồ trình tự New game:
Trang 12Hình 2.2 Biểu đồ trình tự bắt đầu chơi game
2.2.2.2 Biểu đồ trình tự Solve:
Trang 13Hình 2.3 Biểu đồ trình tự tự động chơi game
Trang 142.2.2.3 Biểu đồ trình tự Add image:
Hình 2.4 Biểu đồ trình tự thêm ảnh
Trang 15Hình 2.5 Biểu đồ trình tự cài đặt game
2.2.3 Thiết kế thuật toán :
Để giải quyết vấn đề liên quan đến tìm đường đi và đồ thị thì A* là một giải thuật tìm kiếm thường được sử dụng Ta chọn nó không chỉ vì tính hiệu quả mà còn vì rất dễ dàng để hiểu và cài đặt
Ta rất dễ thấy là mỗi trạng thái của bảng số là một hoán vị của ma trận (m x n) phần tử ( với m là cạnh), như vậy không gian trạng thái của nó là (m x n)! Với 8-puzzle là 9! =
362880 (m = 3) và 15-puzzle là 16! = 20922789888000 ( m = 4) Ta có thể khi tăng m lên 1 đơn vị thì không gian trạng thái tăng lên rất nhanh, nên với m>3 thì rất ít khi
Trang 16Procedure A *
Begin Đặt trạng thái đầu vào ds L;
While true do Begin
If ds L rỗng then Begin
Thông báo thất bại;
Kết thúc;
End;
u <- trạng thái đầu;
If u ≡ đích then Begin
Thông báo thành công;
Kết thúc;
End;
For mỗi v kề u do Begin
g(v) = g(u) + k(v,u);
f(v) = g(v) + h(u);
Đặt v vào ds L sao cho L tăng dần theo hàm f;
Trang 172.2.4 Thiết kế giao diện người dùng
2.2.4.1 Giao diện chính:
Giao diện chính gồm các chức năng:
- Chức năng New game: hiển thị ra màn hình có các chức năng như sau: Chọn kích
thước ảnh có thể là 3x3,4x4,5x5 , chọn kiểu ảnh là ảnh và số hoặc ảnh số, chọn ước lượng heuristic1,2,3 Sau đó start game
Dữ liệu đầu vào là ảnh mẫu bất kì, được chia làm 9 ô bị xáo trộn và đã được thiết lập kiểu ảnh, size ảnh Dữ liệu đầu ra là thông báo thắng, ảnh sau khi được sắp xếp hoàn chỉnh giống với hình ban đầu đã cho
Hàm ước lượng Heuristic đơn giản nhất sẽ đếm số ô sai khác so với trạng thái
đích trong từng trạng thái Trạng thái có số ô sai khác ít nhất sẽ gần đích hơn và là
trạng thái tốt nhất để kiếm tra kế tiếp
Trang 18h(n) là ước lượng heuristic cho khoảng cách từ trạng thái n đến trạng thái đích.
- Chức năng Solve ( tự giải quyết game ):
Sau khi ấn nút Solve ở màn hình new game Giao diện hiện ra sẽ hỏi người chơi bạn có muốn tự động chơi game hay không Khi người chơi ấn Yes, ở bảng thông báo
đã hiện ra kết quả được tính sẵn Sau đó game sẽ tự động chơi với ước lượng và số bước đi ngắn nhất trong thời gian sớm nhất đã được thiết lập sẵn từ trước
Dữ liệu đầu vào là ảnh mẫu bất kì, được chia làm 9 ô bị xáo trộn và đã được thiết lập kiểu ảnh, size ảnh Dữ liệu đầu ra là thông báo thắng, ảnh sau khi được sắp xếp hoàn chỉnh giống với hình ban đầu đã cho
2.2.4.2 Giao diện Add Image:
Chức năng thêm ảnh Có thể tải ảnh từ máy tính của bạn vào giao diện game để
Trang 192.2.4.4 Giao diện Help:
Hướng dẫn cách chơi game
Trang 203.1 Chương trình hoàn chỉnh:
Giao diện chương trình lúc ban đầu hình vẽ:
Trang 21Để bắt đầu chơi, người chơi phải click menu File, khi đó 1 menu sổ xuống như hình vẽ:
Trang 22Tiếp theo chọn New Game để bắt đầu chơi.
Khi đó trên giao diện chương trình ta sẽ thấy các mảnh ghép sẽ được săp xếp xáo trộn với nhau như hình vẽ:
Trang 23Hình 3.3 Giao diện bắt đầu chơi game
Trang 24Và nhiệm vụ của người chơi lúc này là phải sắp xếp lại tấc cả các mảnh ghép để được bức ảnh như cũ.
Trước khi chơi game, người chơi có thể thiết lập độ khó cho trò chơi nếu muốn như sau:
Hình 3.4 : Giao diện thiết lập độ khó cho trò chơi
Trang 25Sau đó bắt đầu chơi:
Trang 26Hình 3.5 : Giao diện game khi Win.
Sau khi hoàn thành trò chơi trên giao diện sẽ hiển thị thông báo bạn đã thắng và hiển
thị thời gian và số bước bạn đã đạt được, sau đó người chơi có hai nút chọn chơi lại hoặc thoát.
Trang 27Giao diện Solve : Tự động chơi game.
Với những thiết lập đã được chọn ban đầu Người chơi ấn Solve giao diện hiện ra sẽ hỏi người chơi có muốn tự động chơi game không, người chơi chọn Yes hoặc No
Hình 3.6 : Giao diện hỏi người chơi có muốn Autorun không.
Trang 28Khi người chơi chọn Yes, trên màn hình chính sẽ hiện thông báo kết quả thắng
đã được tính sẵn, game đang tự động chơi
Trang 29Hình 3.7 : Giao diện khi game đang tự động chơi
Trang 30Chức năng Edit: Add Image
Người chơi có thể chọn ảnh bất kỳ từ máy tính để tải vào game như hình dưới đây:
Trang 31Chức năng Tool: Option
Trang 32Hình 3.9 : Giao diện cài đặt trò chơi.
Chức năng Help
Trang 33Hình 3.10 : Giao diện hướng dẫn cho người chơi.
3.2 Các khó khăn gặp phải và cách giải quyết:
Do thời gian còn hạn chế, bài làm lại gồm các thành viên trong nhóm cùng làm nênrất khó để đồng nhất các ý kiến của các thành viên Các thành viên trong nhóm lại xa nhau nên việc liên lạc trao đổi bài còn gặp nhiều khó khăn Việc tiếp cận với một ngôn ngữ mới cũng gặp rất nhiều khó khăn về cú pháp và câu lệnh
Vượt qua những khó khăn trên, nhóm chúng em đã tích cực trao đổi bài với nhau qua mail, điện thoại để tìm cách giải quyết bài toán Các thành viên cũng ý thức được
và đã tìm hiểu những vấn đề còn vướng mắc qua sách vở và các tài liệu lưu trữ trên internet
Trang 34KẾT LUẬN
Mục tiêu đã hoàn thành
- Đã xây dựng được một chương trình game gồm có các chức năng cơ bản : Bắt đầu
chơi, Tạo độ khó của trò chơi, Tự động giải quyết được trò chơi
- Đã tìm hiểu được rõ thêm về Java.
Các thiếu xót cần bổ sung
Trang 36[1] Ngô Công Thắng; Bài giảng Lập trình Java
[2] Phạm Quang Dũng Bài giảng lập trình Java Trường ĐH Nông Nghiệp Hà Nội 2009[3] Bài giảng Java căn bản Aptech 2010
[4] Java cơ sở Trường ĐH Sư phạm kỹ thuật Hưng Yên 2008