Kết thúcđềtài đã thu được một sốkết quảnhư sau:
-Trình bày được một sốkiến thức cơ bản vềcông nghệJava và nền tảng
J2SE.
-Làm quen và sửdụng thư viện lập trình JFC.
-Xây dựng thành công trò chơi Puzzlevới chức năng chính như sau:
+Cho phép người chơi dịch chuyển các ô sốđểđưa vềtrạng thái win.
+Cho phép người chơi lưu tên và điể m sốnếu rơi vào top 5.
+Thiết lập độkhó trò chơi.
+Hiện ra danh sách top 5 người chơi có điểm sốcao nhất.
28 trang |
Chia sẻ: lylyngoc | Lượt xem: 4022 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Luận văn Trò chơi puzzle, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 1 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Luận Văn
TRÒ CHƠI PUZZLE.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 2 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
MỤC LỤC
Lời nói đầu…………………………………………………………..2
Phần I.Giới thiệu Game Puzzle……………………………………….3
Phần II.Giới thiệu công nghệ Java và nền tảng J2SE………………...5
I. Giới thiệu chung về Java…………………………………………….5
II. Máy ảo Java-JVM…………………………………………………...7
III. Giới thiệu J2SE……………………………………………………..11
IV. Giới thiệu gói javax.swing.*………………………………………...11
Phần III.Phân tích thiết kế……………………………………………17
I. Sơ đồ phân rã chứa năng……………………………………………17
II. Sơ đồ luồng dữ liệu mức đỉnh………………………………………18
III. Cấu trúc chương trình……………………………………………….19
IV. Đặc tả chương trinh…………………………………………………25
Phần IV.Kết luận……………………………………………………..27
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 3 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
LỜI NÓI ĐẦU
Nói đến game thì chắc phần lớn mọi người đều đồng ý đó là một loại hình
giải trí có sức thu hút rất lớn,nhất là với giới trẻ hiện nay.Đặc biệt sau sự ra đời của
Internet,game online xuất hiện và nhanh chóng gây được sức hấp dẫn to lớn.Chúng
ta có thể chơi game online trên mạng,các game offline trên PC,các game trên các
dòng máy chuyên như PS2,PS3..hiện nay game cũng đang được phát triển mạnh
trên các thiết bị di động như điện thoại di động,các máy Xbox..
Ở các nước phát triển như Nhật Bản,Mỹ..có rất nhiều các công ty chuyên về
sản xuất game như Nintendo,Sony,Sega..và mỗi năm các công ty này đạt doanh thu
hàng tỷ USD.Hay với các nước đi sau như Hàn Quốc,Trung Quốc cũng có được
một ngành công nghê game rất mạnh nhờ có sự đầu tư đúng đắn và chiến lược phát
triển tốt.
Mặc dù VINASA xếp game là một trong 3 định hướng công nghệ chiến
lược của hiệp hội này trong giai đoạn 2006-2010, bên cạnh định hướng phần mềm
nhúng và ERP (bộ phần mềm hoạch định nguồn lực doanh nghiệp) nhưng hiện tại
thị trường game ở Việt Nam còn rất yếu.Chưa có nhiều công ty chuyên về lập trình
game,những công ty phát triển game online thì chủ yếu là cung cấp các game nhập
từ Hàn Quốc,Trung Quốc..các game nội hầu như vắng bóng trên thị trường.Đúng
như theo nhận định của một chuyên gia phát triển game của Hàn Quốc:“ngành
công nghiệp game Việt Nam hiện nay giống như một đứa trẻ sơ sinh, rất cần được
sự giúp đỡ và nuôi nấng (của Chính phủ) để phát triển”.Chắc hẳn hiện nay có rất
nhiều bạn trẻ đang theo đuổi ngành CNTT cũng muốn tham gia vào lĩnh vực này
và họ rất cần có được sự giúp đỡ và ủng hộ từ các nhà giáo dục,từ chính sách,định
hướng phát triển của chính phủ.Đề tài tốt nghiệp này là làm trò chơi Puzzle sử
dụng ngôn ngữ lập trình Java.Do mới tiếp cận về lập trình game nên chương trình
còn có nhiều thiếu sót,mong các thầy giúp đỡ,góp ý để hoàn thiện hơn.
Để hoàn thành bài tập này ngoài sự cố gắng của bản thân còn có sự tham gia
góp ý,giúp đỡ của thầy giáo và bạn bè.Trước hết em xin gởi lời cảm ơn chân thành
đến thầy giáo hướng dẫn Nguyễn Đức Tuấn đã nhiệt tình giúp đỡ để em hoàn
thành đề tài.Ngoài ra xin cám ơn các bạn trong lớp,các bạn trong cộng đồng Java
Việt Nam đã đóng góp ý kiến trong quá trình thực hiện đề tài.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 4 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
PHẦN I:GIỚI THIỆU VỀ ĐỀ TÀI
TRÒ CHƠI PUZZLE.
Bản thân từ 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.Nhiệm vụ của
người chơi là xếp 8 chữ số sao cho đạt được trạng thái win cho như sau:
Ngườ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à số lần dịch chuyển.Nghĩa là nếu người chơi chơi hết thời gian giới hạn hay
số lần dịch chuyển giới hạn sẽ bị thua.
Người chơi cố gắng xếp 8 ô về trạng thái win càng nhanh càng tốt và
càng dùng ít lần dịch chuyển càng tốt,khi win người chơi sẽ được một số điểm tính
theo công thức:
Số giây ít hơn so với giây giới hạn*3+Số lần dịch chuyển ít hơn số lần cho
phép*5
Nếu số điểm của bạn nằm trong top 5 người có điểm cao nhất thì bạn
sẽ được ghi danh vào top.
Cách thức chơi có vẻ rất đơn giản.Khi tìm hiểu game này có một vấn
đề khá thú vị.Đó là có phải bao giờ bạn cũng có thể đưa game về trạng thái win
như trên không?Trong game có một trạng thái mà không có ai có thể giải quyết,đó
là trạng thái sau:
1 2 3
4 5 6
7 8
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 5 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Đã có rất nhiều người tham gia giải quyết tình huống này nhưng đến
nay chưa ai có thể thành công.Để biết rõ hơn về tình huống thú vị này bạn có thể
xem them tại địa chỉ sau:
Chương trình được xây dựng trên nền tảng J2SE của Java.Chủ yếu là
lập trình GUI sử dụng Swing trong Java-sẽ được giới thiệu trong phần II dưới đây.
1 2 3
4 5 6
8 7
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 6 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
PHẦN II.GIỚI THIỆU VỀ JAVA VÀ NỀN TẢNG J2SE
I.Giới thiệu chung về Java.
1.Sự phát triển.
Java được xây dựng vào cuối năm 1990 bởi James Gosling và khi đó
nó có tên là Oak(Oak:cây sồi,vì cửa sổ phòng làm việc của Gosling nhìn ra một
gốc sồi).Gosling được công ty Sun Microsystems giao nhiệm vụ xây dựng một
phần mềm lập trình cho các mặt hàng điện dân dụng với mục tiêu là nhỏ gọn và
tương thích được với nhiều loại thiết bị phần cứng khác nhau.Đầu tiên Oak được
dung trong Dự án Xanh.
Sau một chuyến du lịch của nhóm phát triển Oak đến đảo Java của
Indonesia nổi tiếng về cà phê,Oak đã được đôi tên thành Java từ đó.Sau này chúng
ta có thể thấy nhiều khái niệm và hình tượng liên quan đến cà phê(như “bean” là
hạt cà phê).
Sun, công ty đã phát minh ra ngôn ngữ Java, chính thức ban hành bản
Java Development Kit (JDK) 1.0 vào năm 1995 hoàn toàn miễn phí để các nhà
phát triển có thể tải về, học Java, xây dựng các ứng dụng Java và triển khai chúng
trên các hệ điều hành có hỗ trợ Java. Ban đầu, Java chủ yếu dùng để phát triển các
Applet, các ứng dụng nhúng vào trình duyệt, góp phần làm sinh động các trang
Web tĩnh vốn hết sức tẻ nhạt hồi dó. Tuy nhiên, cùng với sự phát triển của công
nghệ thông tin và nhu cầu của xã hội, Java applet đã dần mất đi vị trí của nó và
thay vào đó, các công ty, cộng đồng ủng hộ Java đã phát triển nó theo một hướng
khác. Hiện nay, công nghệ Java được chia làm ba bộ phận:
J2SE
Gồm các đặc tả, công cụ, API của nhân Java giúp phát triển các ứng dụng
trên desktop và định nghĩa các phần thuộc nhân của Java.
J2EE
Gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng dụng qui
mô xí nghiệp, chủ yếu để chạy trên máy chủ (server). Bộ phận hay được
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 7 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java để
làm các ứng dụng web.
J2ME
Gồm các đặc tả, công cụ, API mở rộng để phát triển các ứng dụng Java chạy
trên điện thoại di động, thẻ thông minh, thiết bị điện tử cầm tay, robo và những
ứng dụng điện tử khác.
Java đã trải qua 3 bước phát triển quan trọng: Java 1.0 gắn liền với bản
JDK đầu tiên, Java 2 gắn với JDK 1.2 và Java 5 gắn với J2SDK 1.5
Ngày nay, khi nhắc đến Java người ta không còn chỉ nhắc đến Java như
là một ngôn ngữ mà nhắc đến Java như là một công nghệ hay một nền tảng phát
triển. Nó bao gồm các bộ phận:
Máy ảo Java: JVM
Bộ công cụ phát triển: J2SDK
Các đặc tả chi tiết kĩ thuật (specifications)
Ngôn ngữ lập trình (programming language)
2.Một số đặc điểm.
Java là một nền tảng phát triển các ứng dụng phần mềm có vị trí rất lớn
trong những năm cuối thể kỷ 20 đầu thế kỷ 21 .Đánh dấu sự trưởng thành của mô
hình hướng đối tượng , nó được coi là một nền tảng mang tính chất cách mạng
trong ngành phần mềm . Mô hình máy ảo Virtual Machine đã cho phép các ứng
dụng viết bằng Java có thể chạy trên nhiều hệ điều hành khác nhau.Khẩu hiệu nổi
tiếng của Java là “Write one,Run anywhere” có thể hiểu là “Viết một lần,chạy
khắp mọi nơi”
Java nhanh chóng được nhiều nhà lập trình công nhận . Các câu lệnh và các
biểu diễn tượng tự trong một số ngôn ngữ như C , C++ . Mặc dù Java đã bổ sung
khá nhiều điểm mới , nét phân biệt nhất của Java lại là những đặc điểm mà nó bỏ
qua :
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 8 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Như so với C thì Java không có : Số học địa chỉ bộ nhớ (Con trỏ) , Bộ tiền
xử lý, Câu lệnh goto , chuyển đổi kiểu tự động , các biến và hàm tổng thể , các
định danh xác định kiểu.
So với C++ thi Java không có : đa thừa kế , đa ABI (Application Binary
Interface – Giao diện nhị phân ứng dụng)
II. Máy ảo Java : Java Virtual Machine (JVM) :
Mã nguồn Java được biên dịch để sinh ra mã đối tượng gọi la ByteCode (Mã
byte ). ByteCode ở đây không phải là mã nhị phân của máy tính đang tồn tại thực
tế nào mà nó là một loại mã máy kiến tạo trung gian có thể dễ dàng dịch sang để
chạy trên bất ký máy tính cụ thể nào . Thông thường trong hầu hết các môi trường
hiện tại (Hệ điều hành ) JVM được gọi thực thi bằng một chương trình có tên là
Java .JVM đọc chương trình bằng ByteCode và thông dich hoặc biên dịch nó ra
theo hệ lênhk thực tế .
Ðây là một đặc điểm có ý nghĩa rất lớn. Chạy bytecode trên một JVM là lý do vì
sao các phần mềm Java là "viết một lần, chạy khắp nơi". Các chương trình chạy
được Java (Java executable) cung cấp một bộ mã nhị phân chạy trên mọi bộ xử lý.
Nói cách khác, một ứng dụng bằng Java của bạn chẳng hạn là chương trình xyz
nào đó bằng Java sẽ chạy trên mọi hệ thống hỗ trợ Java mà không cần phải có
riêng "xyz cho DOS", "xyz cho Windows 3.1", "xyz cho Windows 95"...
Bởi vì JVM có thể cài đặt trên hầu hết các hệ điều hành(HDH) khác nhau (Window
, Linux, Mac OS ,…) nên cùng một tập tin class có thể chạy trên các hệ điều hành
khác nhau đó . Điều này nghĩa là với một file Java có thể chạy trên nhiều HDH
khác nhau :
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 9 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Tính dễ chuyển mang và tính năng của phần mềm
Tính dễ chuyển mang của phần mềm là khuynh hướng lý tưởng của ngành
công nghệ phần mềm. Nó đã được nghiên cứu, tìm kiếm từ lâu nay nhưng chưa
bao giờ thực sự đạt được. Java làm cho ngành công nghệ này tiến lại gần tính dễ
chuyển mang của phần mềm nhiều hơn tất cả các hệ thống trước đó. Tại các cửa
hàng bán phần mềm hiện nay, có lẽ bạn sẽ thấy chủ yếu là các phần mềm dùng cho
Windows (một số chỉ cho Windows 3.1, một số cho cả Windows 95 và Windows
3.1), một số ít cho Mac và một số rất ít (có thể là không có) cho Unix. Khi Java trở
thành ngôn ngữ phổ biến thì bạn có thể chọn từ tất cả các phần mềm có trong cửa
hàng và phần mềm bạn chọn mua sẽ chạy trên tất cả các hệ thống máy tính mà bạn
có. Lúc đó mọi người có được sự lựa chọn rộng rãi hơn và giá phần mềm cũng sẽ
hạ do các nhà cung ứng phần mềm có thể phân bổ chi phí phát triển trên một thị
trường rộng lớn 250 triệu máy tính chứ không phải chỉ cho 91 triệu hệ thống
Windows 3.1 hoặc cho 20 triệu hệ thống Macintosh hoặc cho 8 triệu hệ thống
Unix.
Máy ảo Java phải được triển khai cho mỗi hệ thống máy tính và sau đó mọi
bytecode sẽ chạy được trên hệ thống đó. Ðiểm quan trọng ở đây là bytecode có khả
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 10 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
năng chuyển mang tổng hợp. Ðương nhiên vấn đề đặt ra là làm sao để có các JVM
thích hợp cho từng môi trường. Có lẽ vấn đề này cũng tương tự như quá trình để
cho các máy tính cá nhân (PC) là tương thích DOS trước đây.
Một điều lý thú là bytecode không phải chỉ dành riêng cho Java. Nếu sửa đổi
một chương trình dịch đối với một số ngôn ngữ khác như Ada hay Visual Basic để
nó sinh ra được bytecode thì cũng có thể chạy bytecode đó "ngon lành" trên JVM
trên bất kỳ máy tính nào. Ðây là một hướng mà các nhà cung ứng phần mềm đang
quan tâm. Khả năng chạy được mã trên mọi hệ thống máy tính trên hành tinh là lý
do mạnh mẽ để cải cách. ý tưởng về JVM hỗ trợ đắc lực cho hướng cải cách này.
Java có những đảm bảo tính dễ chuyển mang, bao gồm việc cung cấp cùng
một giao diện người lập trình ứng dụng (API, Application Programmer Interface)
trên mọi loại nền; cùng một giao diện nhị phân ứng dụng (ABI, Application Binary
Interface), cụ thể là máy ảo Java, trên mọi loại nền. Ngoài ra ngôn ngữ Java còn có
qui định bắt buộc một số điểm lâu nay vẫn để tuỳ thuộc vào sự cụ thể hoá của
người viết chương trình dịch. Bằng cách yêu cầu rằng các toán hạng được đánh giá
theo thứ tự nghiêm ngặt từ trái qua phải và qui định kích thước của tất cả các kiểu
cơ bản (kiểu nguyên là 32 bit, kiểu chính xác gấp đôi là 64 bit v.v) Java đáp ứng
không những tính dễ chuyển mang mà còn cả cách xử lý đồng nhất của chương
trình trên các hệ thống khác nhau. Java dùng Unicode là tập ký tự chuẩn có thể
biểu diễn các ký hiệu, ký tự trong hầu hết các bảng chữ cái trên thế giới, kể cả các
ký tự tiếng Việt cũng như các loại chữ tượng hình của châu A'. Trong thời gian sắp
tới, nếu chuẩn tiếng Việt cho công nghệ thông tin của Việt nam dựa trên Unicode
thì chắc chắn Java dễ dàng hỗ trợ cho chuẩn đó.
Một điều có thể dễ nhận thấy rằng việc bảo đảm tính dễ chuyển mang có thể
ảnh hưởng tới tính năng thực hiện của phần mềm. Tuy nhiên, ta có một sự cân nhắc
đáng giá. Bạn hãy hình dung xem, nếu tất cả các hệ thống được xây dựng trong
nhiều năm qua không cố gắng tiết kiệm chi phí của hai byte "thừa" và lưu giữ các
con số năm bằng 4 byte chứ không phải là 2 byte thì chúng ta đã không gặp phải sự
cố đau đầu "vấn đề năm 2000" . Với Java, có thể thấy một số điểm là hơi "cồng
kềnh" hoặc "dư thừa". Tuy nhiên, những qui định chặt chẽ và chuẩn hoá của Java
chính là để đảm bảo tính dễ chuyển mang và tính năng của nó trong một tương lai
dài lâu.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 11 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Java với việc quản lý bộ nhớ
Trong lập trình, một vấn đề rất nặng nề được đặt ra là việc quản lý bộ nhớ
động, trong đó có việc "dọn dẹp bộ nhớ" - tức là việc giải phóng những phần bộ
nhớ mà chương trình đã dùng xong để dành cho những mục đích khác. Khi một
chương trình chạy, nó sẽ phân bổ bộ nhớ để lưu giữ các đối tượng mới. Khi sự tồn
tại của các đối tượng này đã kết thúc thì không gian bộ nhớ dành cho chúng cần
được giải phóng và dùng lại cho các đối tượng khác. Nếu bộ nhớ không được giải
phóng thì quá trình (chương trình) sẽ ngày càng lớn lên và sẽ có thể chiếm hết tất
cả không gian nhớ, gây tràn. Một số ngôn ngữ như COBOL-74 không trang bị khả
năng quản lý bộ nhớ động (do vậy một số chương trình hết sức khó viết hoặc
không thể viết được). Một số ngôn ngữ khác như Pascal, C, C++ lại trút gánh nặng
quản lý bộ nhớ lên vai người lập trình. Thậm chí người lập trình còn phải quan tâm
xem phần nào của bộ nhớ đang được sử dụng và phải giải phóng phần nào của bộ
nhớ khi cần thiết. Những chuyện này dẫn đến nhiều loại lỗi khác nhau của các
chương trình, phổ biến là lỗi không giải phóng được bộ nhớ gây ra các "lỗ hổng"
không bao giờ được khai báo lại trong bộ nhớ. Còn tệ hơn là các lỗi gây ra do việc
cố giải phóng những phần bộ nhớ còn đang sử dụng dẫn đến hỏng hoặc mất dữ
liệu.
Các chương trình Java được quản lý về bộ nhớ ở mức hệ thống và người lập
trình không bao giờ phải lo lắng về chuyện đó. Thư viện thời gian chạy của Java sẽ
giám sát các cấu trúc dữ liệu. Khi không còn một tham chiếu nào tới một cấu trúc
dữ liệu thì nó không thể là đang được sử dụng vì chương trình không có cách gì để
đọc hoặc ghi nó. Lúc đó nó sẽ là đối tượng của việc dọn dẹp bộ nhớ.
Java hướng tới việc dọn dẹp bộ nhớ tự động. Việc dọn dẹp bộ nhớ tự động
ảnh hưởng tới tính năng vì nó liên quan đến các quá trình khác chạy trong nền sau
để giám sát việc sử dụng bộ nhớ. Tuy nhiên thực tế đã chỉ ra rằng, ở đây cũng có
một sự cân nhắc đáng giá. Một hệ thống nhỏ thực hiện dọn dẹp bộ nhớ tự động đã
dẫn tới sự cải thiện rất lớn thông qua việc gỡ bỏ một loạt các lỗi của các chương
trình Java. Có thể so sánh, các chương trình C++ chịu trách nhiệm quản lý các
đống (heap) bộ nhớ của riêng chúng do vậy chúng phải có mã dài hơn, mất nhiều
thời gian gỡ rối hơn và các chương trình lớn thường dẫn tới các lỗi rất khó phát
hiện và xử lý về việc dọn dẹp bộ nhớ.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 12 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
III.Giới thiệu nền tảng J2SE
J2SE : là viết tắt của Java 2 Standard Edition - Vừa là một đặc tả , vừa là
một nền tảng thực thi (bao gồm cả phát triển và triển khai) cho các ứng dụng Java.
J2SE cung cấp các API , các kiến trúc chuẩn , các thư viện và các công cụ cốt lõi
nhất để xây dựng các ứng dụng Java .
Mặc dù J2SE là nền tảng thiên về phát triển các sản phẩm chạy trên máy tính
để bàn nhưng những tính năng của nó, bao gồm phần triển khai ngôn ngữ Java lớp
gốc, các công nghệ nền như JDBC để truy vấn dữ liệu... chính là chỗ dựa để Java
tiếp tục mở rộng và hỗ trợ các thành phần mạnh mẽ hơn dùng cho các ứng dụng hệ
thống quy mô xí nghiệp và các thiết bị nhỏ.
J2SE gồm 2 bộ phận chính là: Java 2 Runtime Environment, Standard
Edition (JRE) và Java 2 Software Development Kit, Standard Edition (SDK). Môi
trường thực thi hay JRE cung cấp các Java API, máy ảo Java và các thành phần
cần thiết khác để chạy các Applet và ứng dụng viết bằng ngôn ngữ lập trình Java.
Môi trường thực thi Java không có các công cụ và tiện ích như là các trình biên
dịch hay các trình gỡ lỗi để phát triển các applet và các ứng dụng.
Java 2 SDK là một tập mẹ của JRE, và chứa mọi thứ nằm trong JRE, bổ
sung thêm các công cụ như là trình biên dịch và các trình gỡ lỗi cần để phát triển
applet và các ứng dụng.
Phiên bản J2SE mới nhất tính đến thời điểm hiện tại là J2SE 1.5 hay còn gọi
là J2SE 5.0 theo như cách đặt tên phiên bản của Sun Microsystems.
IV. Giới thiệu về gói javax.swing.*;
1. Giới thiệu JFC (Java Foundation Class):
- Là thư viện lập trình đồ họa được thiết kế và đóng gói theo mô hình
hướng đối tượng
- JFC có khả năng tạo nên các giao diện uyển chuyển linh hoạt.Nó không
chỉ cho phép chương trình chạy tương thích trên nhiều hệ điều hành khác
nhau mà còn cho phép giao diện của chương trình thay đổi cách nhìn
ngay trên một hệ điều hành Windows duy nhất.Có nghĩa là trên môi
trường Windows của Microsoft chẳng hạn,chương trình của ta vẫn có thể
mang dáng dấp của giao diện trên máy Macsintosh hay máy Unix,ngoài
giao diện chuẩn của Windows mà ta thường thấy.Để làm được điều này
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 13 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
thư viện JFC đưa ra một khái niệm gọi là “cảm quan”(Look and Feel) các
thành phần đồ họa xây dựng bằng JFC có khả năng biến đổi theo dáng
dấp của giao diện do lập trình viên chỉ định.
- Có sẵn trong thư viện chuẩn JDK từ bản 1.2 trở lên.
2. javax.swing :
- Là một gói nằm trong thư viện JFC gồm nhiều Class và giao diện
(Interfaces) hỗ trợ mạnh cho việc lập trình giao diện đồ họa trên JDK.
Các thành phần của Swing thường được bắt đầu bằng chữ J : Jbutton,
JTextField , Jlabel , JcheckBox , JRadioButton,….
3.Một số gói điển hình của Lớp Swing :
1. javax.accessbility
Chứa các lớp và các giao tiếp mà có thể được sử dụng cho phép công
nghệ trợ giúp để tương tác với các thành phần của Swing. Các công nghệ trợ giúp
để cập : một dãy Item , từ bộ đọc văn bản đến phóng đại màn hình ,…
2. javax.swing :
Chứa các thành phần cốt lõi của Swing, bao gốm hầu hết các mô hình
giao tiếp và các lớp hỗ trợ
3. javax.swing.border
Chứa định nghĩa các lớp đường viền trừu tượng cũng như 8 đường
viền được định nghĩa. Border không phải là những thành phần, thay vì thế, chúng
là những yếu tố đồ họa đặc biệt mà Swing sử dụng như những thuộc tính và đặt
chúng xung quanh các thành phần. Nếu như bạn muốn tạo ra border của riêng bạn,
bạn có thể tạo lớp con từ những border có sẵn trong gói này, hoặc bạn có thể viết
mã cho một lớp mới.
4. javax.swing.colorchooser
Hỗ trợ cho thành phần JColorChooser
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 14 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
5. javax.swing.event
Định nghĩa những listener mới và những event mà những thành phần
Swing sử dụng để giao tiếp thông tin với các class.
6. javax.swing.filechooser
Hỗ trợ cho thành phần JFileChooser
7. javax.swing.plaf
Định nghĩa những yếu tố duy nhất tạo nên L&F cho mỗi thành phần
Swing. Trong gói này chứa các gói con là javax.swing.plaf.basic,
javax.swing.plaf.metal và javax.swing.plaf.multi
8.javax.swing.table
Cung cấp các mô hình và quan sát cho thành phần table, cho phép bạn
sắp xếp thông riêng biệt trong định dạng lưới với sự xuất hiện tương tự như bảng
tính.
9. javax.swing.text
Cung cấp các điểm của các lớp và giao tiếp dựa trên văn bản hỗ trợ
thiết kế thông dụng được biết đến như document/view.
10. javax.swing.text.html
Sử dụng kỹ thuật đọc và định dang văn bản HTML
11.javax.swing.text.html.parser
Hỗ trợ việc phân tích HTML
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 15 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
12.javax.swing.text.rtf
Sử dụng kỹ thuật đọc và định dạng Rich Text Format
13.javax.swing.tree
Định nghĩa các mô hình và quan sát thành phần một cây phân cấp , có
thể thay thế một cấu trúc file hoặc một dãy các thuộc tính.
14.javax.swing.undo
Chứa những chức năng cần thiết cho việc bổ sung chức năng undo.
4. Một số cấu trúc swing cơ bản:
a.Cấu trúc GUI tổng quát:
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 16 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 17 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
b.Cấu trúc Tree của swing:
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 18 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
PHẦN III.PHÂN TÍCH THIẾT KẾ
I.Sơ đồ phân rã chức năng:
-Chương trình có 4 chức năng chính,trong đó quan trọng nhất là chức năng
Xử lý kết thúc.Nó bao gồm các công việc:
+ Xử lý các hoạt động chính của trò chơi như dịch chuyển các ô ở
cạnh ô trống.
+So sánh với trạng thái cần đạt được để xét chiến thắng.
+So sánh điểm với điểm trong file danh sách người chơi có điểm số
cao nhất để ghi kỉ lục
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 19 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
+Xét thời gian và số lần dịch chuyển giới hạn để xử thua.
II.Sơ đồ dòng dữ liệu mức đỉnh:
NGƯỜI
CHƠI
XỬ LÝ
KẾT THÚC
THIẾT LẬP
ĐỘ KHÓ
KHỞI TẠO
TRÒ CHƠI
LƯU KỈ
LỤC ĐIỂM
Menu/New
Thông báo
bắt đầu
Menu/Har
d
Thời gian giới hạn
Số lần dịch chuyển
Thông số giới hạn
Thông báo
thắng/thua
Điểm
Tên người chơi
ĐIỂM KỈ LỤC
Tên người chơi
Điểm
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 20 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
III.Cấu trúc chương trình
Chương trình bao gồm 4 lớp với các thành phần và chức năng như sau:
1.Lớp gamer:
-Lớp này được cài đặt giao diện Serializable để tạo ra đối tượng phục vụ ghi
và đọc file với lớp ObjectOutputStream và ObjectInputStream:
class gamer implements Serializable
-Đối tượng người chơi được ghi vào file gồm 2 thuộc tính là tên người
chơi,điêm của người chơi:
gamer(String strName,int iDiem)
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 21 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
2.Lớp writeFile:
-Phương thức void writeFile() ghi vào tập tin top.txt 5 đối tượng người chơi
được tạo ra từ lớp gamer.Đây là 5 đối tượng khởi tạo trong danh sách người chơi
có điểm số cao nhất.
-Phương thức void writeList(gamer[] g) ghi vào tập tin top.txt 1 mảng đối
tượng gamer.
-Phương thức gamer[] readList() đọc ra tất cả các đối tượng gamer trong file
top.txt .Trả giá trị về cho mảng gamer g.
3.Lớp puzzle:
-Đây là lớp quan trọng nhất của chương trình.Nó tạo ra một JPanel là bàn cờ
gồm 9 ô như hình trên.Bao gồm các thành phần chính:
Tên biến Chức năng
JButton btn[] Một mảng gồm 9 JButton tương ứng với 9 ô bàn
cờ
String lbBtn=”12345678 ” Nhãn gán cho lần lượt 9 ô bàn cờ.Đây cũng là
đích để xác định chiến thắng.
String lbBtns=”12345687 ” Đích so sánh để xác định trạng thái “chết”
String names Lưu tên người chơi
int btnX,btnY Giá trị xác định vị trí của các ô trên bàn cờ khi
được click.btn[i] có btnX=i%3,btnY=i/3.
int btnOX,btnOY Lưu vị trí ô trống.btnOX=i%3,btnOY=i/3
int diem Giá trị lưu điểm của người chơi
int move Tính số lần dịch chuyển
int timeMax,moveMax Giới hạn về thời gian và số lần dịch chuyển của
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 22 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
trò chơi
Boolean boSta Xác định game được bắt đầu.Giá trị của nó được
lấy khi người chơi click vào nút Start Game
writeFile write Đối tượng được tạo ra từ lớp writeFile phục vụ
việc ghi và đọc kỉ lục điểm ra file text.
gamer gms[],newGamer,tg Đối tượng được tạo ra từ lớp gamer để lưu vào
file với thong tin điểm và tên người chơi.
File f Kiểm tra file text ghi danh sách người chơi có
tồn tại không.
-Các JOptionPane:
+Hiện thông báo điểm ,thời gian và số lần dịch chuyển còn lại.Hỏi người
chơi có ghi tên không :
JOptionPane.showConfirmDialog(this,"LeftMove:"+leftMove+line+"
LeftTime:”+timeMax+line+ "Your Score:" +diem + line + "Do you save
your Score?", "Congretulation", JOptionPane. YES_NO_OPTION);
+Thông báo chiến thắng nhưng điểm số không được vào top 5:
JOptionPane.showMessageDialog(this, "You Win!Try again to Top
Score!")
+Thông báo rơi vào trạng thái “chết” không thể chiến thắng:
JOptionPane.showMessageDialog(this, "You can't Win!Try again");
+Thông báo hết giờ chơi:
JOptionPane.showMessageDialog(this, "Het gio!You Lost!")
+Thông báo hết move:
JOptionPane.showMessageDialog(this, "Het move!You Lost!")
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 23 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Tên hàm Chức năng
void emptyLabel() Dùng vòng for xác định vị trí ô
trống,lưu vị trị qua btnOX,btnOY
void createBoard() Tạo bàn cờ với trạng thái các ô ngẫu
nhiên
void actionPerformed Xử lý sự kiện khi các ô số bị click
void gameAction() Xử lý các hành động của game như
kiểm tra cho phép dịch chuyển;xét giới
hạn về thời gian,số lần dịch chuyển;Xác
định trạng thái cuối cùng ;so sánh danh
sách người chơi có điểm số cao nhất để
ghi kỉ lục mới
JLabel setText(JLabel lb,String s) Lấy ra JLabel hiển thị số lần dịch
chuyển
void setMax(int i) Xác định giá trị thời gian và số lần dịch
chuyển giới hạn tương ứng với các mức
độ khó,dễ.
4.Lớp startGame
-Đây là lớp chính của chương trình.Chủ yếu tương tác với người chơi thông
qua 1 JMenu để khởi tạo một game mới,thiết lập độ khó cho trò chơi.Gồm các
thành phần và chức năng:
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 24 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Tên biến Chức năng
JMenuBar menuBar Cung cấp các lựa chọn cho người chơi như tạo
game mới,xem danh sách người chơi có điêm cao
nhất,thiết lập độ khó..
JLabel lbm,lbt Hiển thị số lần dịch chuyển và thời gian
JButton sta Khi người chơi click vào nút này thì bắt đầu tính
thời gian và số lần dịch chuyển của game mới.
JPanel subPanel Khung chứa sta,lbm,lbt.Được trình bày theo kiểu
FlowLayout
Puzzle puz Đối tượng bàn cờ
JPanel mainPanel Khung chứa puz và subpanel.Được trình bày theo
kiểu BorderLayout
int iMax Giá trị để xác định độ khó nào được chọn mà lấy
ra 2 giá trị time và move để hiển thị
Thread thrTime Luồng để chạy thời gian cho chương trình
gamer gamer[] Mảng đối tượng người chơi để lưu các đối tượng
người chơi đọc được từ file top.txt
String top[] Mảng lưu danh sách người chơi có điểm số cao
nhất để xuất ra JOptionPane
-Các JOptionPanel:
+Hiện ra danh sách người chơi có điểm số cao nhất:
JOptionPane.showMessageDialog(this,top);
+Hiện thông báo hướng dẫn về game:
JOptionPane.showMessageDialog(this, "Puzzle Game!");
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 25 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
-JMenuBar có cấu trúc như
sau:
-JMenu game gồm JMenuItem new:Tạo một ván game mới
JMenuItem High Score:Xem danh sách top score
JMenuItem Exit:Thoát khỏi trò chơi
-JMenu Hard gồm JRadioButtonMenuItem Easy:chọn mức độ dễ
JRadioButtonMenuItem Normal:Mức độ trung bình
JRadioButtonMenuItem Hard:Cấp độ khó.
-JMenu Helps gồm JMenuItem Author:giới thiệu tác giả
JMenuItem About Game:Giới thiệu về game.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 26 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
Tên hàm Chức năng
JMenuBar createMenuBar() Tạo menu
void actionPerformed Xử lý các sự kiện khi người chơi chọn Menu hay
click vào nút Start Game
class Class1 implements
Runnable
Lớp cài đặt giao diện Runable để chạy luồng tạo
thời gian cho trò chơi
IV.Tiến trình trò chơi:
1. Khởi động trò chơi.
2. Lựa chọn menu\Hard thiết lập độ khó:
2.1 If chọn Easy(mặc định):timeMax=120,moveMax=100
2.2 If chọn Normal:timeMax=60,moveMax=50
2.3 If chọn Hard:timeMax=20,moveMax=20
3. Lựa chọn menu\Game:
3.1 If chọn High Score:hiện danh sách người chơi có điểm cao nhất.
3.2 If chọn Exit:thoát khỏi trò chơi.
3.3 If chọn New gọi createBoard() tạo bàn cờ random
3.3.1 While chưa click nút Start Game mà click vào ô cạnh ô trống
thì hiện thông báo yêu cầu click nút Start Game để bắt đầu chơi.
3.3.2 Click nút Start Game:-boSta=true
-timeMax bắt đầu giảm
-Mỗi lần dịch chuyển move+1
3.3.3 If move>=moveMax:thông báo hết move->end
3.3.4 If timeMax=0:thông báo hết giờ->end
3.3.5 Sau mỗi lần dịch chuyển kiểm tra chuỗi số thu được với lbBtn:
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 27 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
a.If bằng nhau thì tính:diem=timeMax*3+(moveMax-move)*5.
b.Ghi danh sách người chơi có điểm số cao nhất vào mảng gms.
c.for(i=0;i<9;i++) if diem=gms[i].txtdiem thì hiện thông báo cho
phép người chơi có thể nhập tên.->end
3.3.6 Nếu chuỗi số thu được sau khi dịch chuyển = với lbBtns thì
thông báo trạng thái không thể chiến thắng.->end
4. Lựa chọn menu\Hepls:
4.1 If lựa chọn Author hiện bảng giới thiệu tác giả.
4.2 If chọn About Game hiện thông báo giới thiệu về game.
Đề tài tốt nghiệp:Trò chơi Puzzle Khoa CNTH-Viện ĐH Mở HN
Page 28 of 28
SV:Phạm Công Thành-Lớp 04B1 GVHD:Nguyễn Đức Tuấn
PHẦN IV.TỔNG KẾT
*Kết thúc đề tài đã thu được một số kết quả như sau:
-Trình bày được một số kiến thức cơ bản về công nghệ Java và nền tảng
J2SE.
-Làm quen và sử dụng thư viện lập trình JFC.
-Xây dựng thành công trò chơi Puzzle với chức năng chính như sau:
+Cho phép người chơi dịch chuyển các ô số để đưa về trạng thái win.
+Cho phép người chơi lưu tên và điểm số nếu rơi vào top 5.
+Thiết lập độ khó trò chơi.
+Hiện ra danh sách top 5 người chơi có điểm số cao nhất.
*Một số vấn đề tồn tại:
-Chưa giải quyết được vấn đề khởi tạo random bàn cờ,người chơi xếp về
trạng thái “chết”,không có chiến thắng.
-Chưa lưu kỉ lục người chơi theo các cấp độ khó khác nhau.
*Hướng phát triển them:
-Đưa thêm các hình ảnh để cho game sinh động.
Tài liệu tham khảo :
Website :
+ : Trang chủ của Sun
+ : Diễn đàn
Các file đính kèm theo tài liệu này:
- de_tai_tot_nghieptro_choi_puzzle_6251.pdf