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

Đề tài lập trình game caro cho điện thoại di động

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 (436.26 KB, 14 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
MÔN CHUYÊN ĐỀ 1
ĐỀ TÀI: LẬP TRÌNH GAME CARO CHO ĐIỆN THOẠI DI ĐỘNG
GVHD : TH.S HUỲNH HỬU HƯNG
SVTH : TRẦN THANH DUY
PHAN ĐĂNG MÙI
LỚP : 09T4
NHÓM: 07
Đà Nẵng tháng 3/2012
LỜI MỞ ĐẦU
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
Hiện nay, Công nghệ thông tin đang phát triển mạnh mẽ và trở thành một
ngành công nghiệp mũi nhọn ở nhiều quốc gia, Việt Nam cũng không là ngoại lệ. Xã
hội ngày càng phát triển thì có nhiều ngành được tin học hóa để dễ dàng trong việc
quản lý và tra
cứu.
Trong xu thế phát triển và ứng dụng công nghệ thông tin có nhiều phần mền được
được ra đời và đem lại hiệu quả kinh tế, giảm thiểu sức lao động.
Việc ứng dụng các ngôn ngữ lập trình ngày càng rộng rãi, đặt biệt hiện nay với xu
thế ngày càng phát triễn thì viêc ứng dụng các phần mền vào trong điện thoại ngày càng
phát triễn rỗng rãi. Sau khi học xong môn học này, chúng em đã chọn đề tài “Lập trình
game caro cho điện thoại di động”.
Do còn hạn chế về mặt kiến thức nên trong quá trình làm không thể tránh khỏi
những thiếu xót, mong quý thầy cô và các bạn đóng góp ý kiến và giúp đỡ để chúng em
ngày càng hoàn thiện hơn.
Chúng em xin chân thành cám ơn thầy Huỳnh Hửu Hưng đã tận tình giúp đỡ và
hướng dẫn chúng em trong việc trao đổi học tập kiến thức lý thuyết trên trường và làm
bài tập này.


Chúng em xin chân thành cảm ơn!
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 2
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
I. GIỚI THIỆU ĐỀ TÀI
ĐỀ TÀI: LẬP TRÌNH GAME CARO CHO DTDD
1. VÀI NÉT VỀ J2ME
J2ME được thiết kế dành cho máy với tài nguyên bộ nhớ hạn chế.
Ngày nay thị trường J2ME mở rộng ra cho nhiều chủng loại thiết bị như:
- Các loại thẻ nhớ cá nhân Java Card
- Máy điện thoại di động
- Máy PDA, các hộp điều khiển cá nhân thiết bị giải trí đa dụng.
2. TRÒ CHƠI CARO
Trò chơi đối kháng (two-agent,conflicting game ) : Gồm 2 người chơi, đối thủ này
sẽ tìm cách dành chiến thắng trước đối thủ kia trong một số hữu hạn nước đi, mỗi
nước đi đuợc tạo ra dựa từ 1 trạng thái bất kỳ của trận đấu. Nếu sau 1 số giới hạn
nước đi, nếu chưa ai dành chiến thắng thì xem như hoà. Ngoài ra, thông tin về trận
đấu là hoàn toàn biết đuợc (perfect information) đối với cả 2 đối thủ.
- Cờ Carô (hay còn gọi là Gomoku ) cũng là 1 loại trò chơi đối kháng, trong
đó mỗi đối thủ trong mỗi lượt đi của mình sẽ chọn 1 ô trống còn lại trên bàn cờ (kẻ
sẵn các ô lưới ) sao cho tạo thành n con liên tiếp để chiến thắng Nếu n = 3 thì nó có
1 tên khác là Tic Tac Toe , nếu bổ sung thêm luật cho nó thì có thể đổi tên là
Penta,Pentix (có ăn quân) Ngoài ra, có luật thi đấu mà người ta đã chứng minh
đuợc người đi truớc bao giờ cũng có thuật toán để thắng, do đó để hạn chế thuận lợi
của người đi trước, người ta đã đặt ra "luật rừng" sau ( luật này sẽ sử dụng cho quá
trình phát triển chương trình ):
- Bàn cờ có kích thước tuỳ ý nxm.
- Quân cờ đầu tiên phải đánh chính giữa lưới bàn cờ.
- Nếu tồn tại đúng 5 con liên tiếp trên 1 hàng là thắng (chéo,ngang,dọc).
- Nếu hết chỗ đi thì 2 bên hoà.
Và 1 số luật khác…

SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 3
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
Một số trò chơi đối kháng
3. GIẢI THUẬT LƯỢNG GIÁ BÀN CỜ
Thủ tục AlphaBeta là một cải tiến thuật toán Minimax nhằm tỉa bớt nhánh của
cây trò chơi, làm giảm số lượng nút phải sinh và lượng giá, do đó có thể tăng độ sâu
của cây tìm kiếm. Giả sử hình dưới là một thế cờ mà hai nút đầu tiên đã được lượng
giá. Nếu thực hiện thủ tục Minimax đối với các nút đó sẽ cho thấy người chơi cực đại
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 4
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
đã được đảm bảo nếu đi nước bên trái sẽ được ít nhất là 2 điểm dù là các lượng giá
của các nút khác cho kết quả như thế nào đi nữa.
Bây giờ, ta lại giả sử nút tiếp theo được lượng giá và cho kết quả là 1. Nếu đi
vào nhánh này thì đối phương sẽđảm bảo làm điểm của người chơi cực đại không thể
vượtquá được giá trị 1 dù là các lượng giá của các nút khác cho kết quả như thế nào
đi nữa. Do đó đến đây, nước đi tốt nhất là chọn nước đi bên trái với đảm bảo là ít nhất
đạt được 2 điểm. Và do đó, hoàn toàn không cần thiết phải lượng giá nút còn
lại.Nguyên tắc Alpha-Beta Nếu biết điều đó thật sự tồi thì đừng mất thời gian tìm
hiểu nó sẽ tồi tệ đến đâu Ý tưởng này được gọi là nguyên tắc Alpha-Beta do nó dùng
trong thủ tục AlphaBeta (ta sẽ xét dưới đây). Hai tham số của thủ tục này (theo các
đặt tên truyền thống) được gọi là alpha và beta và dùng để theo dõi các triển vọng -
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 5
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
chúng cho biết các giá trị nằm ngoài khoảng [alpha, beta] là các điểm "thật sự tồi" và
không cần phải xem xét nữa. Khoảng [alpha, beta] còn được gọi là cửa sổ alpha, beta.
Trong ngữ cảnh của các trò chơi, nguyên tắc Alpha-Beta nói rằng, mỗi khi xem xét
một nút bất kì, nên kiểm tra các thông tin đã biết về các nút cha, ông của nó. Rất có
thể do có đủ thông tin từ cha, ông nên không cần phải làm bất cứ việc gì nữa cho nút
này. Cũng vậy, nguyên tắc này cũng giúp chỉnh sửa hoặc xác định chính xác giá trị tại
nút cha, ông nó. Như trên nói, một cách để tiện theo dõi quá trình tính toán là dùng

các tham số alpha và beta để ghi lại các thông tin theo dõi cần thiết. Thủ tục
AlphaBeta được bắt đầu tại nút gốc với giá trị của alpha là -vôcùng và beta là
+vôcùng. Thủ tục sẽ tự gọi đệ quy chính nó với khoảng cách giữa các giá trị alpha và
beta ngày càng hẹp hơn
Thuật toán AlphaBeta:
* Nếu mức đang xét là đỉnh (gốc cây), đặt giá trị của alpha là -vôcùng và beta
là +vôcùng
* Nếu như đạt đến giới hạn tìm kiếm (đến tầng dưới cùng của cây tìm kiếm),
tính giá trị tĩnh của thế cờ hiện tại ứng với người chơi ở đó. Ghi lại kết quả
* Nếu như mức đang xét là của người chơi cực tiểu, Thực hiện các công việc
sau cho đến khi tất cả các con của nó đã được xét với thủ tục AlphaBeta hoặc cho đến
khi alpha là bằng hoặc lớn hơn beta.
- Áp dụng thủ tục AlphaBeta với giá trị alpha và beta hiện tại cho một con.
Ghi nhớ lại kết quả.
- So sánh giá trị ghi nhớ với giá trị beta, nếu giá trị đó nhỏ hơn thì đặt beta
bằng giá trị mới này. Ghi nhớ lại beta
* Nếu như mức đang xét là của người chơi cực đại, Thực hiện các công việc
sau cho đến khi tất cả các con của nó đã được xét với thủ tục AlphaBeta hoặc cho đến
khi alpha là bằng hoặc lớn hơn beta.
- Áp dụng thủ tục AlphaBeta với giá trị alpha và beta hiện tại cho một con.
Ghi nhớ lại kết quả.
- So sánh giá trị ghi nhớ với giá trị alpha, nếu giá trị đó lớn hơn thì đặt alpha
bằng giá trị mới này. Ghi nhớ lại alpha.
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 6
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
II. THUẬT TOÁN CHƯƠNG TRÌNH CHÍNH
1. MỤC TIÊU
- Viết chương trình game caro để hai người có thể đánh với nhau.
4. KHỞI ĐỘNG
- Chọn cấu trúc dữ liệu thích hợp để lưu trạng thái 1 ô của bàn cờ (lưu thông tin

của từng ô)
- Chọn 1 loại ngôn ngữ lập trình để hiện thực: Java
- Tối ưu hoá các chọn lựa trên thành 1 thể thống nhất
5. Ý TƯỞNG
Ban đầu cho con trỏ nằm chính giữa bàn cờ, nguời chơi đùng các thoa tác để
chọn chơi trước hoặc cho máy tính chơi trước ,người chơi trước đánh bằng đấu x, con
đi sau thi đánh dấu 0.
Sử dụng các phím chức năng up, right, down, left để di chuyển con trỏ lên
xuống qua trái qua phải trên bàn cờ.
Sử dụng phím chọn giữa (hoặc phím 5 trên điên thoại) để đánh cờ.
Sau mỗi bước đi của người chơi kiểm tra đã thắng hay chưa, nếu có người chơi
thắng thì hiện ra thông báo “ you win”. Và nếu người chơi thua thì hiện thông báo
“you lose”.
6. MENU CHƯƠNG TRÌNH.
Chương trình gồm 3 menu chính:
- Menu thứ nhất: new game
Ở mục này bạn có thể chon để bắt đầu chơi game mới khi vào game.
- Menu thứ 2: options
Ở mục này ban có thể thử chơi với 3 mức chơi từ level 1 đến level 3 . độ
khó sẽ tăng dần tư level 1 đến level 3.
- Menu thứ 3: help
Ở mục này bạn có thể vào để tham khảo cách chơi game.
7. CẤU TRÚC THUẬT TOÁN.
Chương trình được xây dựng từ 4 lớp chính:
+ Lớp Board với nhiệm vụ tạo ra 1 bàn cờ caro và các thao tác chính của game
Kế thứa lớp Canvas để tạo giao diện bàn cờ caro,xử lý các hoạt động của game,xử lý
các phím nhấn,tạo giao diện cho người sử dụng.
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 7
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
Lớp Broad được các lớp thành viên:

- Lớp ClipRect vẽ bàn cờ caro,và tạo giao diện sử dụng.
class ClipRect{
public int y1,x1,y2,x2;
ClipRect(int ny1, int nx1, int ny2, int nx2)
{
y1 = ny1; x1 = nx1; y2 = ny2; x2 = nx2;
}
public void setAll(int ny1, int nx1, int ny2, int nx2)
{
y1 = ny1; x1 = nx1; y2 = ny2; x2 = nx2;
}
}
- Lớp BoardCommand xử lý các sự kiện hành động của game và các sự kiện
của phím nhấn.
class BoardCommand extends Command {
int tag;
BoardCommand(String label, int type, int pri, int tag_)
{
super(label, type, pri);
tag = tag_;
}
}
- Lớp Move hành động di chuyển của con trỏ trên bàn cờ.
class Move{
int y,x,prior;
Move(int ny,int nx,int nprior){
y =ny; x=nx; prior = nprior;
}
public void set(int ny,int nx,int nprior){
y =ny; x=nx; prior = nprior;

}
public int gety(){
return y;
}
public int get(){
return x;
}
public int getprior(){
return prior;
}
public void setprior(int nprior){
prior = nprior;
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 8
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
}
}
+ Lớp caro đây là lớp chính của chương trình kế thừa từ lớp Board.
public class caro extends MIDlet {
Board b;
public caro() {
b = new Board(this);
}
public void startApp() {
Display.getDisplay(this).setCurrent( b );
}
public void pauseApp() { }
public void destroyApp(boolean unc) { }
}

+ Lớp Options là lớp chứa tùy chọn của game,khi chơi game người dùng có thể

vào đây để chỉnh Level của game.
public class Options extends Form implements CommandListener {
int level;
Command ok;
Command cancel;
Display dpy;
Displayable prev;
ChoiceGroup cg1;
Options(Display dpy_, Displayable prev_) {
super("Options");
dpy = dpy_;
prev = prev_;
// set up default values
level= 0;
// REMIND should use a label here
//append("Choise level:");
cg1 = new ChoiceGroup("Choise level:", Choice.EXCLUSIVE);
cg1.append("Level 1", null);
cg1.append("Level 2", null);
cg1.append("Level 3", null);
append(cg1);
ok = new Command("OK", Command.OK, 0);
cancel = new Command("Cancel", Command.CANCEL, 1);
addCommand(ok);
addCommand(cancel);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == ok) {
} else if (c == cancel) {

}
dpy.setCurrent(prev);
}
}
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 9
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
+ Lớp Uses dùng để hiển thị nội dung help để hướng dẫn chơi game.
public class Uses {
private static final String strHelp =
" press key 2 or up go up.\n"
+ " press key 8 or down go down.\n"
+ " press key 4 or left go left.\n"
+ " press key 6 or right go right.\n"
+ " press key 5 or select.\n"
+ " undo move,two press key * ";

/** the previous screen to go back to */
private Displayable previous;
private Uses() {};

public static void showHelp(Display display) {
Alert alert = new Alert("Help Caro");
alert.setTimeout(Alert.FOREVER);alert.setString(strHelp);
display.setCurrent(alert);
}
}
III.KẾT QUẢ CHẠY THỬ CHƯƠNG TRÌNH TRÊN WirelessToolkit
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 10
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
H1: Biên dịch ứng dụng

SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 11
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
H2:Khởi động game
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 12
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1

H3: Tùy chọn H4: Kết thúc
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 13
BÀI TẬP LỚN MÔN CHUYÊN ĐỀ 1
KẾT LUẬN
Mặc dù đã cố gắng để hoàn thiện chương trình, chúng em chỉ thực hiện được viêc
chơi game giữa người và máy. Chưa thực hiện được việc chơi đối kháng giữa 2 người với
nhau.
Trong quá trình hoàn thành đề tài không tránh khỏi sai xót kính mong quý thầy cô
xem xét giúp đỡ để chúng em ngày càng hoàn thiện hơn.
Em xin chân thành cảm ơn!
SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI Trang 14

×