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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠ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 [...]... 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 SVTH: TRẦN THANH DUY- PHAN ĐĂNG MÙI H4: Kết thúc 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... 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 . 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. 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,. 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

Ngày đăng: 01/11/2014, 21:29

Từ khóa liên quan

Mục lục

  • 1. VÀI NÉT VỀ J2ME

  • 2. TRÒ CHƠI CARO

  • 3. GIẢI THUẬT LƯỢNG GIÁ BÀN CỜ

  • 1. MỤC TIÊU

  • 4. KHỞI ĐỘNG

  • 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.

  • 6. MENU CHƯƠNG TRÌNH.

  • 7. CẤU TRÚC THUẬT TOÁN.

Tài liệu cùng người dùng

Tài liệu liên quan