Tải bản đầy đủ (.docx) (36 trang)

Báo cáo Java Lập trình game trúc xanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.46 MB, 36 trang )

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO MÔN HỌC LẬP TRÌNH ANDROID
ĐỀ TÀI:
LẬP TRÌNH GAME PIKACHU
Giáo viên hướng dẫn: GV. LÊ HOÀN
Sinh viên thực hiện:
Hà Nội, 2013
MỤC LỤC
2
DANH MỤC HÌNH ẢNH
3
DANH MỤC BẢNG
4
LỜI MỞ ĐẦU
Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) do Sun Microsystem đưa ra vào giữa
thập niên 90. Chương trình viết bằng ngôn ngữ lập trình Java có thể chạy trên bất kỳ hệ thống
nào có cài máy ảo Java (Java Virtual Machine). Java là ngôn ngữ lập trình hướng đối tượng. Sức
mạnh của phương pháp lập trình hướng đối tượng thể hiện ở chỗ khả năng mô hình hoá hệ thống
dựa trên các đối tượng thực tế, khả năng đóng gói và bảo vệ an toàn dữ liệu, khả năng sử dụng lại
mã nguồn để tiết kiệm chi phí và tài nguyên, đặc biệt là khả năng chia sẽ mã nguồn trong cộng
đồng lập trình viên chuyên nghiệp. Những điểm mạnh này hứa hẹn sẽ thúc đẩy phát triển một môi
trường lập trình tiên tiến cùng với nền công nghiệp lắp ráp phần mềm với các thư viện thành phần
có sẵn.
Một đề tài Java phải làm nổi bật được tính chất của môn học, có tính thực tiễn và mang lại
thiết thực và có thể triển khai trên thực tế. Chính vì những lý do đó chúng em đã quyết định lựa
chọn đề tài Lập trình trò chơi trúc xanh để làm đề tài kết thúc môn học này.
Chương trình có các yêu cầu cơ bản như:
− Các chức năng của trò chơi: tạo mới một màn chơi, chơi lại, tạm dừng, chơi tiếp, tính điểm, thông
báo kết quả, thoát khỏi trò chơi, hướng dẫn chơi, thay đổi giao diện.
− Tương tác giao diện một người chơi, hai người chơi.


− Yêu cầu về đồ họa: trò chơi phải được thiết kế sao cho dễ sử dụng, thiết kế hợp lý dễ thao tác.
− Xử lý các sự kiện của người chơi trong trò chơi: lật ô, xóa ô, sự kiện nhấn nút.
Trong quá trình giảng dạy, nhờ có sự hướng dẫn tận tình của thầy giáo Vũ Đức Minh cùng
với sự giúp đỡ của các thầy cô trong khoa, chúng em đã hoàn thành được bài tập với đề tài Lập
trình game trúc xanh viết trên ngôn ngữ Java. Từ đó chúng em đã thấy được các trình ứng dụng
được tạo ra như thế nào, đồng thời giúp chúng em nắm vững được các phương pháp thuật toán,
cách lập trình hướng đối tượng trên Java.
Trong quá trình làm đề tài dù đã cố gắng tìm hiểu nhưng vẫn không tránh khỏi sai sót và
chưa được hoàn thiện hết các chức năng. Chính vì vậy chúng em mong được sự đóng góp ý kiến
của các thầy cô.
Chúng em xin chân thành cảm ơn!
CHƯƠNG 1. TÓM TẮT ĐỒ ÁN
Phần này sẽ trình bày sơ lược về trò chơi “Trúc xanh” một trò chơi khá phổ biến
hiện nay, mặc dù nghe cái tên có vẻ mới lạ.
1.1. Tổng quan
Khi rảnh rỗi hoặc sau mỗi giờ làm việc căng thẳng thì mỗi người trong chúng ta đều muốn
tìm cho mình một trò chơi hoặc một hoạt động để giảm căng thẳng và lấy lại tinh thần. Có thể đó là
các hoạt động thể thao, hoặc chơi các trò chơi giải trí tùy thuộc vào quỹ thời gian của từng người,
và với những ai có ít quỹ thời gian nhưng muốn có một trò chơi mang tính giải trí cao thì game
Trúc xanh là một trong những game đáp ứng được nhu cầu đó.
5
Trúc xanh là một trò chơi được viết theo tựa của trò chơi lật hình - một trò chơi khá phổ
biến hiện nay, cái tên “Trúc xanh” là do chúng em tự đặt ra, dựa theo tựa của một game lật hình nổi
tiếng trên mạng. Tùy theo những hình ảnh mà trò chơi sử dụng, cái tên cho chò chơi này cũng rât
khác nhau như: Đi tìm vật nuôi, Purble Place(Window 7), Critter Match …

Hình 1.1: Giao diện trò chơi Critter Match.
Mục tiêu chính của đề tài là giúp người chơi tăng cường trí nhớ, giác quan và thấy thoải mái
tinh thần sau khi đã chinh phục được hết các ô chứa các hình. Ngoài ra chương trình còn có chức
năng chơi hai người để có thể tranh tài cao thấp với nhau xem ai có thể mở được các hình ra nhiều

hơn.
Đề tài có các mức chơi bình thường, khó và dễ phù hợp với từng người chơi và cũng không
kém tính trí tuệ khi người chơi phải tính toán sao cho tổng số lần mở các hình là ít nhất.
Đồ án nêu ra chi tiết các bước thực hiện xây dựng trò chơi “Trúc Xanh” sử dụng ngôn ngữ
Java và các cách tiếp cận để giải quyết các vấn đề trong trò chơi cũng những kết quả đã đạt được
dựa trên một số những ví dụ thử nghiệm trong khi lập trình.
1.2. Phạm vi nghiên cứu, phạm vi ứng dụng
- Phạm vi nghiên cứu: tự nghiên cứu.
- Phạm vi ứng dụng: cá nhân.
1.3. Chức năng, công việc đã làm được
STT Chức năng, công việc Đã làm được
1 Tạo giao diện thân thiện, dễ sử dụng.

2 Có thể chơi 1 người hoặc 2 người.

3 Random ảnh vào các button.

4 Khi đang chơi có thể tạm dừng chơi.

5
Tính điểm và lưu điểm của 10 người chơi có điểm số cao
nhất vào trong file.

6 Chọn các mức độ dễ, trung bình, khó.

6
7 Hướng dẫn chơi.

Bảng 1.1 Chức năng công việc đã làm được.
7

CHƯƠNG 2. CƠ SỞ LÝ THUYẾT
Chương này sẽ trình bày về các cơ sở lý thuyết được sử dụng, mô hình thiết kế trò
chơi.
2.1. Ngôn ngữ Java
2.1.1. Lịch sử ra đời
Năm 1990, James 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 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
thiết bị phần cứng khác nhau. Lúc đầu nhóm này định dùng C++ nhưng rồi họ nhận thấy C++
không thích hợp vì quá cồng kềnh và đòi hỏi nhiều thiết bị phần cứng để hỗ trợ Vì thế họ đã
quyết định xây dựng hẳn một ngôn ngữ mới và đặt tên là Oak ( Sau này được đổi thành tên Java vì
Oak đã bị trùng tên ).
Đầu tiên Oak được sử dụng trong Dự án Xanh, trong đó nhóm phát triển đã đưa hệ thống
kiểm soát vào các thiết bị điện dân dụng như TV, VCR, đèn, điện thoại cũng như tất cả các thiết bị
máy vi tính cầm tay.
Vào năm 1993, Internet phát triển, do đó các thông tin Internet được chuyển từ môi trường
văn bản sang đồ hoạ. Nhóm phát triển Java cho rằng, Java nếu được phát triển sẽ là một ngôn ngữ
hoàn hảo nhất cho lập trình trên Web. Vì thế họ đã xây dựng những ứng dụng nhỏ nhúng vào trang
Web (gọi là Web Applets) và triển khai cả một ứng dụng hoàn chỉnh, một trình duyệt Web (gọi là
hot java) để chứng tỏ khả năng mạnh mẽ của Java.
Từ năm 1995, Java nhanh chóng được đón nhận như một công cụ mạnh mẽ
cho việc phát triển các ứng dụng cho Internet. Các trình duyệt Web lần lượt đưa ra
sự hỗ trợ cho Java, mở đầu là Netscape Communications với Netscape Navigator
Web (bản 2.0 ) rồi Microsoft Explorer 3.0 .
2.1.2. Đặc điểm của ngôn ngữ java
 Nhỏ gọn: Java phiên bản 1.0 khá đơn giản vì kích thước của bộ biên dịch cơ bản và
lớp hỗ trợ là rất nhỏ ~ 40Kbyte cho mỗi trình thông dịch và cho lớp hỗ trợ. Kích
thước bộ thư viện chuẩn và lớp hỗ trợ phân tuyến chỉ khoảng 175Kbyte.
 Hướng đối tượng: Mọi ứng dụng viết trên Java đều phải được xây dựng trên các đối
tượng và thông qua các đối tượng.
 Phân tán: Thư viện của Java có lớp mạng ( java.net ). Nó có khả năng truy xuất từ

máy chủ ở xa, hoặc truy cập đến các đối tượng thông qua mạng cũng dễ dàng.
 Thông dịch: Khi file nguồn của java được biên dịch hoàn toàn sang file .class thì nó
dễ dàng chạy được trên nhiều môi trường, nền tảng khác nhau chứa bộ thông dịch.
8
 Mạnh mẽ: Một chương trình Java phải đòi hỏi tính chắc chắn, không dễ tuỳ tiện
trong khai báo biến, Java không cung cấp biến con trỏ như các ngôn ngữ lập trình
khác.
 Bảo mật cao: Java không chỉ là ngôn ngữ lập trình thuần tuý mà còn cung cấp nhiều
mức để kiểm soát tính an toàn khi thực thi chương trình.
 Máy ảo: Khi mã nguồn được biên dịch dưới dạng bytecode, Java tạo ra các máy ảo
trên mỗi hệ thống để các ứng dụng chạy được dễ dàng.
 Khả chuyển: Mã nguồn Java sau biên dịch có thể chạy được trên mọi nền tảng chỉ
dựa vào máy ảo. Chính vì thế mà Java có 1 khẩu hiệu “ write once run anywhere”.
 Hiệu quả: Java khá chậm so với một số ngôn ngữ khác như C/C++ bởi nó phải mất
công biên dịch sang file.class rồi lại thông dịch để chạy, tuy nhiên, ở các môi trường
khác thì Java phát huy tương đối hiệu quả tính năng nhỏ gọn và khả chuyển của
mình.
 Đa tuyến: Java hỗ trợ lập trình đa tuyến, lập trình song song tránh được những tính
tuần tự nhàm chán, nâng cao thời gian thực thi công việc.
2.1.3. Các thành phần cơ bản về java
 Ký tự và tên
Tập ký tự của Java bao gồm:
 26 chữ cái từ ‘a’…’z’ và 26 chữ cái từ ‘A’ ’Z’.
 Các chữ số từ 0 9.
 Các ký tự như: ‘~’ / ‘ ,’ / ‘ ;’ / “ / “/ ‘ {‘/ ‘ }’/ ‘ (‘ /’ )’ …
 Các ký tự đặc biệt khác.
Trong chương trình, sử dụng rất nhiều tới việc đặt tên, ví dụ tên đối tượng, tên biến, tên
hằng, tên phương thức, lớp … vì vậy đều phải có một tên nhất định ( indentifier ). Tên là tổ hợp
của bộ ký tự đã được định nghĩa trong ngôn ngữ Java ví dụ tập chữ cái, tập chữ số, các ký tự đặc
biệt, dấu gạch dưới ( _ )… Không hạn chế về chiều dài của tên.

Cách đặt tên trong Java được giống như cách đặt tên của các ngôn ngữ lập trình khác như
C/C++, Pascal… và được định nghĩa như sau:
 Bao gồm tập các ký tự, mở đầu bắt buộc là chữ cái.
 Không có dấu cách.
 Không trùng với từ khoá.
 Java khác Pascal là phân biệt chữ hoa và chữ thường.
 Từ khóa
Từ khoá còn gọi là key word. Nó là các từ được Java định nghĩa sẵn có ý nghĩa riêng
trong chương trình.
9
Abstract Default Goto Null Synchronized
Boolean Double If Package This
Break Do Import Private Throw
Byte Else Implements Protected Throws
Case Extends Int Public Transient
Catch False Enterface Return True
Char Final Instanceof Short Try
Class Finally Long Static Void
Const Float Native Super Volatile
Continue for New Switch While
Bảng 1.2 Các từ khóa.
 Kiểu dữ liệu
Các kiểu dữ liệu cơ sở là các kiểu dữ liệu “dùng sẵn “ đã được ngôn ngữ lập trình định
nghĩa sẵn kiểu . Trong các ngôn ngữ đã biết các kiểu dữ liệu cơ sở là các kiểu như kiểu số nguyên,
số thực, kiểu ký tự …
Các kiểu dữ liệu phức hợp, hay còn gọi là các kiểu dữ liệu có cấu trúc như kiểu mảng, kiểu
chuỗi ký tự, trong Java còn cung cấp các kiểu như kiểu lớp, kiểu giao diện (interface).
 Kiểu số nguyên: java định nghĩa 4 kiểu số nguyên: Byte, Short, Int, Long.
 Kiểu Float: Float được định nghĩa là kiểu số thực.
Kiểu ký tự : Tất cả các dữ liệu viết ở dạng chữ ký tự được khai báo bởi từ khóa CHAR.

Một ký tự được viết trong hai dấu nháy đơn ‘ ‘. Ðể tiện trao đổi thông tin cần phải sắp xếp,
đánh số các ký tự, mỗi cách sắp xếp như vậy gọi là bảng mã. Bảng mã thông dụng hiện nay là bảng
mã ASCII.
 Ép kiểu dữ liệu: Các toán tử chuyển đổi kiểu cho phép chuyển đổi dữ liệu từ
kiểu này sang kiểu khác. Ép kiểu đơn giản là đặt trước biểu thức cần chuyển
đổi tên kiểu dữ liệu được bọc trong cặp ngoặc đơn ( ).
 Kiểu logic: Một dữ liệu thuộc kiểu BOOLEAN là một đại lượng chỉ có thể
nhận được một trong hai gía trị logic là TRUE (đúng) và FALSE (sai).
Qui ước: TRUE > FALSE. Ví dụ các phép AND, OR, NOT, XOR.
 Biến và hằng
 Hằng
Là đại lượng có giá trị không đổi.
Cách khai báo hằng:
Data_Type list_of_constant = variable;
10
Ví dụ : int k=3;
float c=6.5;
String s=”java programming”;
 Biến: Là đại lượng có giá trị thay đổi. Biến luôn có giá trị bắt đầu. Biến có
thể có kiểu dữ liệu số nguyên, số thực, chuỗi,… trong Java không cung cấp
kiểu con trỏ, do đó không có biến có kiểu dữ liệu là con trỏ.
 Biểu thức
Một biểu thức bao gồm toán tử và toán hạng. Toán tử bao gồm các phép toán như + - *
/ % Một số dạng biểu thức:
- Biểu thức số học: có kết quả là giá trị số.
- Biểu thức logic: Có kết quả trả về là 1 trong 2 giá trị đúng hoặc sai.
- Biểu thức quan hệ: > , < , >= , <= , != , = =.
 Phép toán
 Phép toán một ngôi: Phép toán một ngôi là phép toán được sử dụng trên
một số hạng: +,-,++,

 Phép toán 2 ngôi: Phép toán 2 ngôi được thực hiện trên 2 toán hạng khác
nhau ví dụ :+,-,*,/,%.
 Phép toán quan hệ: Mô tả quan hệ giữa các toán hạng. Giá trị của phép
toán quan hệ trả về dưới dạng phép toán boolean : >,<,>=,<=,==,!=.
2.1.4. Cấu trúc câu lệnh
 Lệnh If
Lệnh if được coi như là một phép thử biểu thức Boolean nhằm ra quyết định thực hiện rẽ
nhánh chương trình.
Dạng 1: If ( condition ) statement ;
Trong trường hợp thực hiện nhiều công việc cùng lúc ta cũng đặt trong khối lệnh { }
Dạng 2 : If ( condition ) Statement 1;
Else Statement 2;
 Vòng lặp For
Ta đã làm quen với vòng lặp for từ các ngôn ngữ lập trình cơ bản nhất, vòng lặp for trong
pascal còn gọi là vòng lặp xác định, tuy nhiên tới ngôn ngữ C thì tính xác định của nó không còn
tuyệt đối nữa, bởi nó có thể sử dụng 2 biến điều khiển khác nhau cùng lúc để điều khiển vòng lặp.
For ( operator1;operator2;operator3)
11
Trong đó biểu thức 2 thường là biểu thức điều kiện, biểu thức 1 và biểu thức 3 thường là biểu
thức gán và toán tử tăng giảm. Trong Java, vòng lặp for có thể khuyết thiếu, hoặc chỉ có biểu thức 2
và biểu thức 3 hoặc chỉ có biểu thức 2
 Vòng lặp While
While là vòng lặp không xác định. Cú pháp vòng lặp while như sau:
While ( Condition )
Statement;
Trong trường hợp nhiều công việc được thực hiện cùng lúc sau biểu thức điều kiện chứa
trong lệnh while thì sử dụng khối lệnh { }.
2.1.5. Cách nhập, xuất file trong java
 FileInputStream và FileOutputStream
Để khởi tạo một đối tượng mới. Sử dụng phương thức:

FileInputStream(String name)
FileInputStream (File file )
Ví dụ: FileInputStream fis=new FileInputStream(“c:/config.sys);
hoặc File myFile = new FileInputStream(“c:/config.sys”);
FileInputStream fis=new FileInputStream(myFile);
 Đọc file
Từ trong lớp FileInputStream cung cấp sẵn các hàm đọc. Chủ yếu sử dụng nhiều nhất là
hàm read(). Ngoài ra có thể sử dụng các hàm sau:
int read()
int read(byte b[])
int read(byte b[],int off,int len);
 Tạo lớp luồng FileOutputStream
Trong lớp FileOutputStream có các phương thức khởi dựng sau:
FileOutputStream(String name)
FileOutputStream(File file)
Ví dụ:
FileOutputStream fos=new FileOutputStream(“d:/out.dat”);
hoặc File myfile= new File(“d:/out.dat”);
FileOutputStream fos= new FileOutputStream(File myfile);
12
 Viết ra thông tin của luồng xuất
Sử dụng hàm write() để viết ra thông tin. Ngoài hàm write() còn có những hàm sau:
void write( int b);
void write(byte b[]);
void write(byte b[],int off, int len);
 Đóng lớp FileInputStream
dùng hàm close()
ví dụ: fos.close();
13
2.1.6. Lập trình giao diện

Trong lớp thư viện của Java có gói Swing. Swing là bộ công cụ giao diện người dùng, nằm
trong gói javax.swing, bao gồm các thành phần cơ bản (component ) để xây dựng giao diện đồ hoạ
như : windows, buttons, combo box, trees, table, và menu và xử lý các điều khiển cho thiết bị nhập
như : chuột, bàn phím và các thiết bị nhập khác. Sử dụng Swing để tạo các ứng dụng như sau:
Frames, Buttons, Label, Textfile, textarea, Drop down – list, checkbox…
 Frame
Frame là một cửa sổ có thanh tiêu đề. Tạo giao diện Frame bằng cách:
Public class Simpletest extends JFrame{
// body
}
Lớp JFrame có 2 phương thức khởi dụng là JFrame() và JFrame(String ) - đây là cách đặt
tên hiển thị trên thanh tiêu đề. Để điều chỉnh kích thước cho Frame sử dụng phương thức
setSize(int, int ) để truyền vào 2 tham số là chiều dài và chiều cao của Frame.
Các phương thức khác:
setVisible(boolean ): Để chế độ ẩn hay hiện.
setBounds(int,int,int,int): Toạ độ góc trên, góc dưới của cửa sổ.
Ví dụ: class Simpleframe extends JFrame{
public Simpleframe(){
super("simpe frame");
setSize(300,300);
setBounds(0,0,200,200);
setVisible(true);
}
Đặt thuộc tính cho Frame khi đóng dùng mẫu sau:
setDefaultCloseOperation(JFrame.thuộc tính);
Các thuộc tính bao gồm:
EXIT_ON_CLOSE: Thoát ứng dụng khi Frame bị đóng.
DISPOSE_ON_CLOSE: Đóng Frame, di chuyển đối tượng Frame khỏi bộ
nhớ, và chạy ứng dụng.
DO_NOTHING_ON_CLOSE : Vẫn mở Frame và tiếp tục chạy.

HIDE_ON_CLOSE: Đóng Frame và tiếp tục chạy.
14
Ví dụ: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 Button
Button hay còn gọi là nút nhấn ( nút lệnh ). Nó là một đối tượng tựa như là để thể hiện một
hành động khi nhấn chuột vào nó. Button được tạo bởi lớp JButton . Để tạo một nút có thể dùng
một trong các phương thức sau đây:
JButton(String)— Nhãn là chuỗi ký tự
JButton(Icon)— Hiện lên một biểu tượng
JButton(String, Icon)— Cả chuỗi ký tự và biểu tượng
 Label
Nhãn được dùng khi thể hiện chuỗi ký tự, biểu tượng hoặc cả hai. Nhãn được tạo bởi lớp
JLabel
JLabel(String)—Nhãn có chuỗi
JLabel(String, int)—Nhãn có chuỗi ký tự và căn lề
JLabel(String, Icon, int)—Nhãn có chuỗi ký tự, biểu tượng và căn lề
Ví dụ: JLabel label1 = new JLabel(“Label1”);
 TextField
Text field là ô để người dùng có thể sử dụng nhập các ký tự từ bàn phím. Text field được
tạobởi lớp JtextField và chỉ có 1 hàng duy nhất để nhập.
Cấu trúc khởi tạo textfield
JTextField()— Một ô văn bản rỗng
JTextField(int)—Một ô văn bản với độ rộng int
JTextField(String, int)— Một ô văn bản với chuỗi ký tự và độ rộng int
Ví dụ:
JTextField tf1 = new JTextField(30);
JTextField tf2 = new JTextField(“Enter RSS feed URL here”, 30);
 Checkbox và RadioButton
Checkbox và Radio button đều là dạng lựa chọn. Checkbox thuộc lớp JCheckbox còn Radio
button thuộc lớp JRadioButton.

Các hàm thông dụng:
 setSelected(boolean): Đặt lựa chọn cho checkbox hoặc radiobutton. Nếu
chọn thì đặt giá trị là true.
15
 isSelected(): Trả về giá trị xem checkbox hoặc radiobutton có được chọn
hay không.
Cấu trúc khai báo Jcheckbox như sau:
 JCheckBox(String): Tạo một hòm checkbox với nhãn là chuỗi ký tự
 JCheckBox(String, boolean): Tạo một checkbox với nhãn là ký tự và khi
lựa chọn nó có giá trị là true
 JCheckBox(Icon): Tạo một checkbox với biểu tượng
 JCheckBox(Icon, boolean): Tạo một checkbox với biểu tượng và khi lựa
chọn nó có giá trị là true
 JCheckBox(String, Icon): Tạo một checkbox có nhãn là ký tự và biểu
tượng
 JCheckBox(String, Icon, boolean): Tạo một checkbox có nhãn là chuỗi
ký tự, biểu tượng và mặc định giá trị khi lựa chọn nó là true
Cấu trúc khai báo đối với JRadiobutton cũng như vậy. Bình thường đối tượng thường là một
nhóm nút. Vậy, cách tạo đối tượng là một nhóm các nút như sau:
ButtonGroup choice = new ButtonGroup();
Ví dụ:
ButtonGroup saveFormat = new ButtonGroup();
JRadioButton jr1 = new JRadioButton(“C++”, false);
saveFormat.add(jr1);
JRadioButton jr2= new JRadioButton(“Java”, true);
saveFormat.add(jr2);
 Toolbars
Toolbars hay còn gọi là thanh công cụ được tạo bởi lớp JToolbar, Là một nhóm các thành
phần trên hàng hay trên cột. Thanh công cụ ngang là thành công cụ được mặc định. Tuy nhiên có
thể thay đổi thành chiều dọc hay chiều ngang tuỳ ý

Cấu trúc khởi tạo một Toolbar:
 JToolBar(): Tạo một toolbar mới
 JToolBar(int): Tạo toolbar mới với chiều đặc biệt
Ví dụ: JToolBar toolbar = new JToolBar();
 Menubar
Thanh menu bao gồm một loạt các nút có thể kéo xuống và chứa đựng các danh mục để thực
hiện các công việc khác nhau.
16
Các khởi tạo như sau:
 JmenuItem:Khởi tạo một mục menu
 Jmenu: Một menu thả xuống gồm một hoặc nhiều mục menu con
thành phần
 JmenuBar: Một thanh bao gồm một hoặc nhiều thành phần Menu
Ví dụ: Tạo một menu gồm 7 mục:
JMenuItem j1 = new JMenuItem(“Open”);
JMenuItem j2 = new JMenuItem(“Save”);
Sau đó thêm các mục vào menu:
JMenu m1 = new JMenu(“File”);
m1.add(j1);
m1.add(j2);
m1.addSeparator();
Cuối cùng là tạo menu trên thanh menu bar:
JMenuBar bar = new JMenuBar();
bar.add(m1);
gui.setJMenuBar(bar);
 DialogBox
Lớp JOptionPane cung cấp một vài phương thức để tạo những hộp dialog đơn giản tựa như
một cửa sổ nhỏ có câu hỏi và lựa chọn Yes hoặc No.
17
Có 4 kiểu hộp Dialog như sau:

− ConfirmDialog
− InputDialog
− MessageDialog
− OptionDialog
Confirm Dialog
Là hộp chọn đơn giản nhất, có 3 nút chọn chủ yếu là Yes/No/Cancel và được gọi bởi phương
thức showConfirmDialog(Thành phần, Đối tượng ).
Để lựa chọn số nút trong hộp thoại sử dụng bổ từ:
YES_NO_CANCEL_OPTION
hoặc YES_NO_OPTION
Để lựa chọn biểu tượng hiển thị trên hộp thoại dùng các tuỳ chọn sau:
 ERROR_MESSAGE
 INFORMATION_MASSAGE
 PLAIN_MESSAGE
 QUESTION_MESSAGE
 WARNING_MESSAGE
Dialog Box
Tương tự như Confirm Dialog, chỉ việc gọi phương thức showInputDialog( Thành phần, Đối
tượng ).
Ví dụ: String response= JOptionPane.showInputDialog(null,”Enter your choice”);
 Message Dialog Box
Dùng mang tới một thông điệp nào đó được tạo bởi phương thức
showMessageDialog(Thành phần, Đối tượng).
Grid Layout
Quản lý trình bày theo Grid Layout là việc sắp xếp thành phần theo hàng hoặc cột. Grid
Layout được khởi tạo bới lớp GridLayout và nó cũng thuộc gói java.awt. Trong lúc khởi tạo, truyền
các đối số cho nó . Ví dụ:
GridLayout gr= new GridLayout(2,3); // 2 hàng và 3 cột
GridLayout gl=new GridLayout(10,3,5,8); // 10 hàng, 3 cột , khoảng cách
hàng trên hàng dưới là 5 pixel, khoảng cách giữa các cột là 8 pixel.

Xử lý sự kiện
18
Trong gói java.awt.event đã chứa tất cả các bộ xử lý sự kiện cơ ban nhất. Dưới đây là một số
giao diện hay dùng nhất:
 ActionListener: Sự kiện hành động, nó được sinh ra khi người
dùng gọi một hành động trên component, ví dụ như click trên một nút nào
đó
 AdjustmentListener: Sự kiện điều chỉnh, đuợc sinh ra khi
component được điều chỉnh.
 FocusListener: Sự kiện trên bàn phí, được sinh ra khi chữ trong
textfield trên component vượt qua giới hạn nào đó
 ItemListener: Sự kiện được sinh ra trên một đối tượng nào đó, ví
dụ hòm checkbox bị thay đổi.
 KeyListener: Sự kiện bàn phím, khi người dùng nhập ký tự từ bàn
phím
 MouseListener: Sự kiện chuột, khi người dùng click chuột.
 MouseMotionListener: Sự kiện khi chuột di chuyển
 WindowListener: Sự kiện được sinh ra khi cửa sổ thay đổi trạng
thái ví dụ phóng to, thu nhỏ, dịch chuyển hoặc đóng.
Sau khi các đối tượng đã được khởi tạo, muốn tạo các sự kiện trên nó dùng
các phương thức để lắng nghe như sau:
 addActionListener(): Sử dụng với các đối tượng như JButton,
JCheckBox, JComboBox, JTextField, JRadioButton và JMenuItem
 addFocusListener(): Dùng với tất cả các đối tượng của Swing
 addItemListener(): Dùng với các đối tượng như JButton, JCheckBox,
JComboBox và JRadioButton components
 addKeyListener(): Dùng với tất cả các đối tượng của Swing
 addMouseListener(): Dùng với tất cả các đối tượng của Swing
 addMouseMotionListener(): Dùng với tất cả các đối tượng của Swing
 addTextListener(): Dùng xử lý sự kiện trên JTextField và JTextArea

 addWindowListener(): Dùng xử lý sự kiện trên JWindow và JFrame
Ví dụ: JButton b=new JButton(“click here”);
b.addActionListener(this);
Hành động lắng nghe chỉ có một phương thức duy nhất đó là actionPerformed(). Tất cả các
lớp được bổ sung từ phương thức ActionListener theo cấu trúc sau:
public void actionPerformed(ActionEvent event) { // events }
19
2.2. Giới thiệu trò chơi
Như đã trình bày ở trên, Trúc xanh là một trò chơi khá đơn giản, các hình ảnh và nội dung
của hình ảnh đưa vào chính là những cái mà chúng ta cần quan tâm. Làm sao để có thể quản lý
được các hình ảnh đưa vào trong trò chơi, xác định được nội dung của từng bức ảnh đó đối sánh và
thông báo cho người chơi. Một số vấn đề khác là cách xử lý để xác định các lượt chơi của người
chơi, tính toán điểm và đưa ra màn hình.
Mô hình chung của bài toán là trò chơi sẽ đưa ra các ô vuông, trong mỗi ô vuông đó sẽ chứa
một hình ảnh của một đối tượng nào đó và trong tất cả các ô vuông còn lại sẽ có một ô vuông có
chứa hình như vậy, nhiệm vụ đặt ra cho người chơi là phải làm sao tìm ra được những ô vuông
giống nhau đó trong thời gian ngắn nhất và số điểm đạt được là cao nhất. Thông thường trò chơi
được đặt ra là chơi một người, khi đó nếu trong một lượt đi người chơi lật đúng thì sẽ được cộng
một số điểm giới hạn, khi lật sai sẽ bị trừ điểm. Việc đưa vào thời gian tính chơi sẽ làm trò chơi
thêm thú vị hơn bởi người chơi sẽ bị thúc ép làm sao để có thể lật hết trong một khoảng thời gian
ngắn.
Trong trò chơi Trúc xanh chúng em sẽ lập trình thêm một phần nữa là chơi dành cho hai
người chơi. Trong chế độ này, người chơi sẽ không bị thúc ép bởi thời gian, cũng không đánh giá
bởi số điểm mà được đánh giá thông qua số lượt lật đúng hình mà người chơi ghi được. Điều này sẽ
làm cho việc đánh giá được tốt hơn, hai người chơi sẽ không bị gò bó, có được tinh thần thoải mái
nhất khi chơi. Để dễ dàng làm quen với trò chơi, trò chơi sẽ có các mức độ chọn lựa độ khó khi
chơi.
Trúc xanh là trò chơi thử trí nhớ của người chơi, vì có rất hình ảnh giống nhau và sau khi lật
ô vuông chúng lại quay về vị trí cũ khiến người chơi có thể bị nhầm lẫn. Đây là một trò chơi có
cách chơi hết sức đơn giản nhưng đòi hỏi người chơi phải có một trí nhớ tốt.

2.3. Mô hình tổng quát
Vấn đề thiết kế và xử lý các chế độ khi chơi phải trải qua rất nhiều bước. Việc thiết kế và xử
lý các chế độ khi chơi có thể tóm gọn lại trong mô hình sau.
Hình 2.1: Mô hình tổng quát các bước xử lý trò chơi.
2.3.1. Người dùng chọn chế độ chơi
Ở giai đoạn này, các công việc xử lý bao gồm:
20
Thiết kế giao diện lựa chọn chế độ chơi: Ở đây trò chơi được thiết kế sao cho người dùng có
thể dễ dàng chọn lựa chế độ chơi thích hợp một hoặc hai người chơi, và mức độ chơi dễ ,trung bình
hoặc khó.
Xử lý chọn lựa trò chơi: Xử lý các sự kiện nhấn nút và truyền biến để nắm bắt được các biến
khi khởi tạo cho người chơi.
Truyền các biến cần thiết: Các biến được truyền vào phải được lưu lại và sử dụng.
2.3.2. Người chơi chơi
Các công việc trong giai đoạn này bao gồm:
Thiết kế giao diện để khởi tạo và thông báo các thông tin khi chơi trò chơi, các thông tin cần
thiết tùy theo giao diện một người chơi hay hai người chơi.
Xử lý các sự kiện khi chơi: Nắm bắt được các lượt đi khi ngừi chơi lật các ô, các sự kiện khi
lật đúng và sai, chuyển lượt chơi trong chế độ hai người chơi.
Tính toán thời gian chơi: Như đã nêu ở trên, trong trò chơi kết quả được tính theo thời gian
và điểm, các bước ở giai đoạn này là để tính toán và xác định chúng.
2.3.3. Kết thúc trò chơi
Khi người chơi chơi xong một màn chơi, trò chơi sẽ kết thúc chúng ta phải tính tổng thời
gian và các thông tin cần thiết sau đó thông báo để người chơi được biết. Các thông tin về điểm cao
trong chế độ một người chơi sẽ được lưu lại.
21
CHƯƠNG 3. PHÂN TÍCH - THIẾT KẾ
Nội dung chương này sẽ trình bày về các yêu cầu đặt ra trước khi thiết kế, phân
tích các chức năng rõ hơn và các mục tiêu đã đạt được của chương trình.
3.1. Phân tích chương trình

 Yêu cầu
Chương trình phải có giao diện thân thiện, dễ sử dụng. Đảm bảo đủ các chức năng cần thiết
như chơi mới, chơi lại, tạm dừng, chọn mức độ khó,…
Chương trình này được xây dựng gồm một menubar chứa các chức năng của trò chơi, một
panel để xem thông tin điểm của người chơi và một panel chính chứa các ô hình ảnh cho người
chơi click.
Thanh menubar nằm ở trên cùng, tiếp theo đến panel chứa điểm và ở giữa là panel chứa hình
ảnh. Panel ở giữa là panel chứa các button là các ảnh, số lượng các button được dựa vào mức độ
khó mà người chơi lựa chọn, có 3 mức độ là: dễ, trung bình và khó.
 Mục tiêu
Chương trình đảm bảo các chức năng như chơi mới, thoát, hướng dẫn, giới thiệu thông tin về
trò chơi, chọn mức độ khó, chơi hai người hoặc một người…
3.2. Thiết kế chương trình
3.2.1. Các chức năng
- Menu: hiển thị menu chọn mức độ khó và cách chơi 2 người hay 1 người.
- Chơi:
o Chơi lại: chơi lại ván mới giống như ván đang chơi.
o Tạm dừng: enables = false tất cả các button để tạm dừng trò chơi.
o Chơi tiếp: enables = true tất cả các button để tiếp tục trò chơi.
o Điểm cao: hiển thị danh sách 10 người chơi có điểm cao nhất.
- Hướng dẫn:
o Giới thiệu: giới thiệu thông tin về chương trình, người thực hiện chương trình.
o Cách chơi: giới thiệu cách chơi của chương trình.
 Chi tiết chức năng
 Chức năng 1: Xem giao diện chuẩn, giao diện tùy chỉnh
Xem giao diện chuẩn tức là: giao diện có kích thước chuẩn khi chơi, khi giao diện chuẩn
được chọn thì các ô có kích thước vừa khít khung, không cho tùy chỉnh kích thước.
Xem theo giao diện tùy chỉnh: là giao diện mà người chơi có thể thay đổi kích thước khung
theo ý muốn, sao cho phù hợp với người chơi.
• Khó khăn:

− Làm sao để xác định được giao diện hiện tại là ở chế độ gì, chuẩn hay tùy chỉnh.
− Xác định phương thức nào dùng để thay đổi giao diện.
• Hướng giải quyết:
22
− Để xác định giao diện hiện tại dùng tạo menu xem để chọn loại giao diện hiển thị, phương
thức .setEnable( ) để ẩn hiện loại giao diện hiện đang sử dụng. Nếu chưa sử dụng sẽ hiện nút
chọn giao diện chưa sử dụng và ngược lại.
−Để thay đổi giao diện từ chuẩn sang tùy chỉnh dùng phương thức:
.pack( ) và . setResizable( ).
 Chức năng 2: Thoát khỏi trò chơi
Thoát khỏi trò chơi là thoát hoàn toàn, toàn bộ dữ liệu sẽ không được lưu lại.
• Khó khăn:
Phương thức nào được sử dụng để thoát khỏi hệ thống.
• Hướng giải quyết:
Dùng phương thức System.exit( 0).
 Chức năng 3: Tạo màn chơi mới
Tạo màn chơi mới khi người chơi kết thúc trò chơi muốn chơi lại hoặc điểm thấp muốn
chơi lại.
• Khó khăn:
− Làm thế nào để tạo màn chơi mới mà không cần phải xử lý nhiều.
− Xác định các biến nào sẽ được reset lại, các chức năng nào sẽ ảnh hưởng.
− Tạo lại ngẫu nhiên các hình ảnh để thực hiện chơi lại sao cho không giống với các hình
ảnh ban đầu.
− Lật lại tất cả các ô về trạng thái chưa lật.
− Xác định các phương thức nào sẽ được dùng.
• Hướng giải quyết:
− Để không phải xử lý nhiều tạo mới một phương thức newgame( ) chứa tất cả code xử lý tạo lại màn
chơi mới.
− Các biến sẽ được reset lại: biến tính điểm, biến tính số lượt click, biến tính số ô đã được đánh, các
biến lưu địa chỉ của một ô khi click. Các chức năng bị ảnh hưởng: Tạm dừng, Chơi tiếp,…

− Để lật lại các ô về trạng thái chưa lật:
+ Lấy hình ảnh đại diện cho hình khi chưa lật.
+ setIcon của tất cả các nút là hình này.
− Các phương thức được sử dụng:
+ addActionListener( )
+ removeActionListener( )
+ setText( )
+ setIcon( )
+ random( )
• Xây dựng:
void newgame()
{
int tg;
count=score=0;
23
a=b=c=d=-1;
click=false;
arr[1][2].setLabel("");
arr[2][2].setLabel("");
diem.setText(score+"");
diem.setForeground(Color.BLACK);
for(int i=0;i<arr.length;i++)
for(int j=0;j<arr[0].length;j++)
{
arr[i][j].setIcon(new
ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("Images/anh0.png"))));
arr[i][j].removeActionListener(this);
arr[i][j].addActionListener(this);
count++;
}

for(int i=0;i<vitri.length;i++)
{
vitri[i]=-1;
}
for(int i=0;i<vitri.length;i++)
{
do{
tg=random(20);
}while(testonly(vitri, vitri.length,tg));
vitri[i]=tg;
}
24
Hình 3.1: Chức năng chơi, tạm dừng, chơi tiếp
 Chức năng 4: Tạm dừng, Chơi tiếp
Tạm dừng là chức năng cho phép người chơi vô hiệu hóa màn chơi khi đang bận để có thể
tiếp tục chơi khi rảnh, giúp tránh sự ảnh hưởng không cần thiết.
• Khó khăn:
− Xác định khi nào thì có thể tạm dừng, chơi tiếp.
− Xác định các phương thức được sử dụng.
• Hướng giải quyết:
− Xây dựng menu để thực hiện tạm dừng và chơi tiếp.
− Khi người dùng bắt đầu chơi thì có thể tạm dừng, sau khi tạm dừng thì có thể chơi tiếp. Khi tạm
dừng rồi thì không thể tạm dừng tiếp với chơi lại cũng vậy.
− Sử dụng phương thức .setEnable( ) để thực hiện ẩn hiện menu tạm dừng và chơi tiếp.
− Khi tạm dừng tất cả các nút chơi sẽ ẩn, khi chơi tiếp tất cả các nut chơi sẽ hiện.
• Xây dựng:
Code xử lý cho code ấn nút:
if(e.getSource()==it[4])
{
it[4].setEnabled(false);//ẩn nut choi tiep

it[5].setEnabled(true);//hien nut tam dung
for(int i=0;i<4;i++)
for(int j=0;j<5;j++)
arr[i][j].setEnabled(true);
}
else //tam dung
if(e.getSource()==it[5])
{
it[4].setEnabled(true);//hien nut choi tiep
25

×