Mục đích và ý nghĩa Xây dựng game với các mục đích ý nghĩa sau: - Tạo ứng dụng game cờ gánh dân gian trên điện thoại Android có giao diện trực quan, phục vụ nhu cầu giải trí của nhiều n
Trang 1z
NGÀNH: CỬ NHÂN CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI:
XÂY DỰNG GAME CỜ GÁNH DÂN GIAN
TRÊN ĐIỆN THOẠI ANDROID
GVHD : PGS.TSKH Trần Quốc Chiến SVTH : Nguyễn Quốc Tùng
Lớp : 10CNTT2
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
Trang 2
KHÓA LUẬN TỐT NGHIỆP
NGÀNH: CỬ NHÂN CÔNG NGHỆ THÔNG TIN
ĐỀ TÀI:
XÂY DỰNG GAME CỜ GÁNH DÂN GIAN
TRÊN ĐIỆN THOẠI ANDROID
GVHD : PGS.TSKH Trần Quốc Chiến SVTH : Nguyễn Quốc Tùng
Lớp : 10CNTT2
ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM
KHOA TIN HỌC
Đà Nẵng, tháng 5 năm 2014
Trang 3LỜI CẢM ƠN
Trước tiên, tôi muốn gửi lời cảm ơn sâu sắc nhất đến thầy giáo, Phó Giáo sư Tiến sĩ khoa học Trần Quốc Chiến đã tận tình hướng dẫn em trong suốt quá trình thực tập và thực hiện khóa luận tốt nghiệp
Tôi xin bày tỏ lời cảm ơn sâu sắc đến những thầy cô giáo đã giảng dạy tối trong suốt bốn năm qua, những kiến thức mà tôi nhận được trên giảng đường đại học sẽ là hành trang giúp tôi vững bước trong tương lai
Tôi cũng muốn gửi lời cảm ơn đến các anh chị và các bạn trong Công ty Cổ phần Phần mềm Kế toán BRAVO – nơi tôi đang công tác – đã giúp đỡ và cho tôi
những lời khuyên bổ ích về chuyên môn trong quá trình nghiên cứu
Cuối cùng, em muốn gửi lời cảm ơn sâu sắc đến tất cả bạn bè, và đặc biệt là cha
mẹ và anh chị em, những người luôn kịp thời động viên và giúp đỡ em vượt qua những khó khăn trong cuộc sống
Tôi xin chân thành cảm ơn!
Sinh viên thực hiện
Nguyễn Quốc Tùng
Trang 4
LỜI CAM ĐOAN
Những nội dung trong báo cáo này là do tôi thực hiện dưới sự hướng dẫn trực
tiếp của thầy PGS.TSKH Trần Quốc Chiến
Mọi tham khảo dùng trong cáo cáo này đều được trích dẫn rõ ràng tên tác giả,
tên công trình, thời gian, địa điểm công bố
Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo hay gian trá tôi xin chịu
hoàn toàn trách nhiệm
Sinh viên thực hiện
Nguyễn Quốc Tùng
Trang 5MỤC LỤC
LỜI MỞ DẦU 1
TỔNG QUAN ĐỀ TÀI 2
I Phát biểu bài toán 2
II Mục đích, ý nghĩa, phạm vi đề tài 2
II.1 Tên đề tài 2
II.2 Mục đích và ý nghĩa 2
II.3 Phạm vi đề tài 3
III Những việc sẽ giải quyết trong đề tài 3
III.1 Các bước thực hiện 3
III.2 Dự kiến kết quả đạt được 3
IV Nội dung của đề tài 4
PHẦN 1: CƠ SỞ LÝ THUYẾT 5
I Tìm hiểu về Android 5
I.1 Android và hệ điều hành Android 5
I.2 Các phiên bản của hệ điều hành Android 6
I.3 Các thành phần ứng dụng của Android 9
I.3.1 Activity là gì? 9
I.3.2 Services 15
I.3.3 Content Providers 16
I.3.4 Intent 16
I.3.5 Broadcast receivers 17
II Lập trình ứng dụng Android 18
II.1 Thiết lập môi trường phát triển ứng dụng 18
II.2 Các thành phần trong Android Project 18
II.2.1 Tạo mới Android Project 18
II.2.2 Thiết kế giao diện trong Android 20
Trang 6III.1 Giới thiệu về Cờ Gánh 25
III.2 Luật chơi game cờ gánh 26
PHẦN 2: THIẾT KẾ VÀ XÂY DỰNG ỨNG DỤNG GAME CỜ GÁNH 29
I Phân tích hệ thống 29
I.1 Mô tả bài toán 29
I.2 Phân tích yêu cầu 30
II Thuật toán tìm kiếm có đối thủ 30
II.1 Cây trò chơi đầy đủ 31
II.2 Chiến lược Minimax 33
II.3 Phương pháp cắt tỉa Alpha – Beta 36
III Thiết kế hệ thống thông tin 39
III.1 Xây dựng kiến trúc chương trình 39
III.2 Xây dựng cấu trúc dữ liệu và thuật toán 42
III.3 Biểu đồ trạng thái 50
IV Biểu đồ lớp 51
PHẦN 3: KẾT QUẢ CỦA ỨNG DỤNG 52
I Màn hình Menu chính 52
II Màn hình chơi game 53
II.1 Lựa chọn mức độ 53
II.2 Bắt đầu game 53
II.3 Các nước đi hợp lệ 54
II.4 Khi mở gánh 55
III Kết thúc trò chơi 56
III.1 Màn hình khi chiến thắng 56
III.2 Màn hình khi thua 56
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57
TÀI LIỆU THAM KHẢO 58
Trang 7DANH MỤC HÌNH ẢNH
Hình 1.1: Hình ảnh về Android 5
Hình 1.2: Các phiên bản của hệ điều hành Andoid 6
Hình 1.3: Bản báo cáo mới nhất của Google về tình hình các phiên bản Android 9
Hình 1.4: Activity Lifecycle 13
Hình 1.5: Service Lifecycle 15
Hình 1.6: Truyền Intent và số liệu sang Activity khác 16
Hình 1.7: Tạo mới 1 ứng dụng Android 19
Hình 1.8: Cấu trúc 1 Project 20
Hình 1.9: Các em bé đang chơi cờ gánh trên bãi cát 26
Hình 1.10: Mô hình bàn cờ gánh 26
Hình 1.11: Các nước quân cờ có thể đi theo chiều mũi tên 27
Hình 1.12:Quân cờ đang vào ăn hai cặp gánh 27
Hình 1.13: Các quân cờ xanh đã bóp chết tất cả các quân cờ đỏ 28
Hình 1.14: Quân đỏ di chuyển theo chiều mũi tên thì để mở gánh 28
Hình 2.1: Vị trí ban đầu của bàn cờ Gánh 32
Hình 2.2:Biểu diễn cây trò chơi Cờ Gánh với Đỏ đi trước 33
Hình 2.3: Cắt bỏ cây con gốc a, nếu eval(u)> eval(v) 36
Hình 2.4: Minh họa giải thuật Alpha-beta 39
Hình 2.5: Kiến trúc menu trong game 39
Hình 2.6: Kiến trúc Game Loop của game 40
Hình 2.7: Các thuộc tính của ChessBoard 41
Hình 2.8: Máy tìm nước đi tốt nhất theo chiến lược Minimax 43
Hình 2.9: Khởi tạo giá trị bàn cờ ban đầu 44
Hình 2.10: Ví dụ quân cờ chỉ di chuyển theo hàng ngang, cột dọc 46
Hình 2.11:Nước đi hợp lệ của quân cờ 46
Hình 2.12: Ví dụ quân cờ xanh đang mở gánh, đối phương phải vào ăn gánh 47
Hình 2.13: Ví dụ các bước tìm các quân cờ bị bóp chết 49
Hình 2.14: Biểu đồ trạng thái InGame 50
Hình 2.15: Biểu đồ trạng thái cho cả hệ thống 50
Hình 2.16: Biểu đồ lớp 51
Hình 3.1: Giao diện main_menu của trò chơi 52
Hình 3.2: Lựa chọn mức độ trò chơi 53
Trang 8Hình 3.3: Màn hình chính khi chơi game 53
Hình 3.4: Các nước đi hợp lệ của quân cờ 54
Hình 3.5: Mở gánh trong trò chơi 55
Hình 3.6: Màn hình chiến thắng 56
Hình 3.7: Màn hình khi thua 56
Trang 9DANH MỤC TỪ VIẾT TẮT
- JDK : Java Development Kit
- SDK : Software Development Kit
- IDE : Integrated Development Environment
- Menu : Trình đơn
- User : Người sử dụng
- Touch : chạm (trỏ)
Trang 10Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
LỜI MỞ DẦU
Từ lâu, các loại hình giải trí thật sự đa dạng và phong phú, và khi game xuất hiện trên máy tính thì nó đã nhanh chóng trở thành công cụ giải trí số một trên toàn thế giới Số lượng người chơi game trên máy tính nhất là máy tính bảng và các thiết bị điện thoại di động lên tới con số hàng tỉ, không phân biệt về tuổi tác, giới tính hay màu da
Một trong số đó là game Snake được bắt nguồn từ một chiếc di động mà Nokia trình làng năm 1997 có tên là Nokia 6110 đã mở ra một kỷ nguyên mới cho lĩnh vực lập trình game trên di động Nhưng với sự hạn chế về đồ họa, tốc độ xử lý, cốt truyện game đã nhanh chóng gây ra nhàm chán đối với người chơi Và các công nghệ lập trình game đã ra đời như Brew, App Store, J2ME và đặc biệt là Android
Các thiết bị di động sử dụng hệ điều hành Android với phần cứng mạnh mẽ, các nút bấm chơi game chuyên dụng Thế giới game trên Smart phone lại gần như thống trị
cả thế giới Game được xây dựng trên các thiết bị di động này có hình ảnh mượt mà hơn, tốc độ xử lý mạnh mẽ hơn cùng với những hiệu ứng rất gần với thực tế hơn Cùng với đó là các loại hình game trí tuệ luôn có khả năng thu hút đông số người chơi, đặc biệt là số người chơi thích thử thách, đấu trí
Vì vậy em quyết định chọn đề tài “Nghiên cứu công nghệ phát triển game trên điện thoại Android Xây dựng game cờ gánh dân gian” làm đề tài khóa văn tốt nghiệp của mình Với mục đích tìm hiểu rõ hơn về Android, các tính năng của nó, nâng cao kỹ thuật lập trình cá nhân và đặc biệt là quản bá hình ảnh các trò chơi dân gian của Việt Nam không để nó bị mai mọt Hy vọng sẽ tạo ra được một sản phẩm có ích, đẹp mắt và thu hút người chơi
Trang 11Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
TỔNG QUAN ĐỀ TÀI
Trò chơi dân gian Cờ Gánh là một trong số trò chơi dân gian tương đối phổ biến
ở các vùng nông thôn Việt Nam Nhưng nó và các trò khác ngày càng bị quên lãng do
xã hội ngày càng phát triển diện tích đất ngày càng thu hẹp hơn và với những nhu cầu giải trí cao hơn Vì vậy việc tin học hóa trò chơi dân gian cũng được coi là hoàn toàn hợp lý
Đây là một trò chơi có cấu trúc và cách chơi hoàn toàn giống với trò chơi dân gian Cờ Gánh Trò chơi giúp cho việc tổ chức một ván chơi cờ gánh trở nên dễ dàng hơn Với những hình ảnh và các hỗ trợ khác tạo nên một không khí chơi hấp dẫn và tạo được sự hứng thú Với luật chơi đơn giản, trò chơi phù hợp với mọi lứa tuổi, hứa hẹn
sẽ là một trò chơi phổ biến trên các máy tính hiện nay
II.1 Tên đề tài
“Xây dựng game cờ gánh dân gian trên điện thoại Android”
II.2 Mục đích và ý nghĩa
Xây dựng game với các mục đích ý nghĩa sau:
- Tạo ứng dụng game cờ gánh dân gian trên điện thoại Android có giao diện trực quan, phục vụ nhu cầu giải trí của nhiều người chơi và giúp mọi người biết rõ hơn về trò chơi này
- Nắm bắt và hiểu được công nghệ lập trình game trên hệ điều hành Android Nâng cao kỹ năng lập trình, kỹ năng giải quyết vấn đề
- Ứng dụng trí tuệ nhân tạo để máy có khả năng suy nghĩ tối ưu cho mỗi nước
Trang 12Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- Sử dụng thành thạo một số công cụ hổ trợ cho môi trường làm việc, lập trình game
II.3 Phạm vi đề tài
Ứng dụng trên các thiết bị di động sử dụng trên hệ điều hành Android có kích thước màn hình xác định, là một game trí tuệ có khả năng tổ chức chơi giữa Người và Máy với các mức độ khác nhau
III Những việc sẽ giải quyết trong đề tài
III.1 Các bước thực hiện
- Tìm hiểu thông tin liên quan
- Xem xét bàn bạc tính khả thi của các yêu cầu trong ứng dụng
- Xác định thời gian thực hiện và hoàn thành dự án
- Lên kế hoạch để thực hiện dự án
- Phân tích các yêu cầu của dự án
- Phân tích thiết kế từng chi tiết của từng module
- Dựa vào bảng phân tích thiết kế tiến hành code ứng dụng
- Tiến hành kiểm thử ứng dụng
- Báo cáo sẽ được viết song song trong suốt quá trình làm dự án
III.2 Dự kiến kết quả đạt được
Hi vọng chương trình sẽ đáp ứng được các yêu cầu như sau:
- Xây dựng hoàn chỉnh game cờ gánh chơi giữa người và máy với các mức độ khác nhau
- Đồ họa bắt mắt, các thao tác đơn giản, tiện dụng
- Tối ưu khả năng suy nghĩ của máy
Trang 13Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
IV Nội dung của đề tài
Toàn bộ khóa luận bao gồm 3 phần:
Trang 14Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
PHẦN 1:
CƠ SỞ LÝ THUYẾT
Android là một hệ thống điều hành, middleware và các ứng dụng di động chủ chốt Android là hệ điều hành trên điện thoại di động (và hiện nay là cả trên một số đầu phát HD, HD Player, TV…) phát triển bởi Google và dựa trên nền tảng Linux Trước đây, Android được phát triển bởi công ty liên hợp Android (sau đó được Google mua lại vào năm 2005)
Các nhà phát triển viết ứng dụng cho Android dựa trên ngôn ngữ java Sự ra mắt
của Android vào ngày 5 tháng 11 năm 2007 gắn với sự thành lập của liên minh thiết bị cầm tay mã nguồn mở, bao gồm 78 công ty phần cứng, phần mềm và viễn thông nhằm mục đích tạo nên một chuẩn mở cho điện thoại di động trong tương lai
Tính năng mở của hệ điều hành Android là gì? Android được xây dựng cho
phép các nhà phát triển để tạo ra các ứng dụng di động hấp dẫn tận dụng tất cả một chiếc điện thoại đã cung cấp Nó được xây dựng để được thực sự mở Android được
Hình 1.1: Hình ảnh về Android
Trang 15Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
xây dựng trên mở Linux Kernel Hơn nữa, nó sử dụng một máy ảo tùy chỉnh được thiết
kế để tối ưu hóa bộ nhớ và tài nguyên phần cứng trong môi trường di động Nền tảng này sẽ tiếp tục tiến triển như cộng đồng nhà phát triển công việc cùng nhau để xây dựng các ứng dụng di động sáng tạo
Tất cả ứng dụng có thể được tạo ra cho Android? Android không phân biệt giữa
các ứng dụng lõi của điện thoại và các ứng dụng của bên thứ ba Họ tất cả có thể được xây dựng để có thể truy cập bằng khả năng của một người cung cấp cho người sử dụng điện thoại với một dải rộng các ứng dụng và dịch vụ Với các thiết bị xây dựng trên Hệ điều hành Android, người dùng có thể hoàn toàn thích ứng với điện thoại đến lợi ích của họ Họ có thể trao đổi trên màn hình của điện thoại những phong cách của dialer,
hoặc bất kỳ ứng dụng
Phá bỏ các rào cản ứng dụng của Android? Android phá bỏ rào cản để xây
dựng các ứng dụng mới và sáng tạo Ví dụ như địa chỉ liên hệ của người dùng, lịch, hoặc vị trí địa lý - để cung cấp một trải nghiệm người dùng có liên quan hơn Với Android, một nhà phát triển có thể xây dựng một ứng dụng cho phép người dùng xem
vị trí của bạn bè của họ và được cảnh báo khi họ đang có trong vùng phù cận cho họ một cơ hội để kết nối
Trang 16Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Android 1.1 (Petit Four): Ra mắt ngày 9-2-2009 Không bao gồm nhiều tính
năng, phiên bản này bổ sung một số chức năng mới cho Google Maps hiển thị chi tiết hơn, bàn phím ảo gọi điện thoại đã có thể hiển thị hoặc ẩn khi gọi, chương trình SMS cho phép người dùng lưu tập tin đính kèm Petit Four sửa một số lỗi trong Android 1.0
Android 1.5 (Cupcake): Ra mắt ngày 30-4-2009 Cupcake, tên mã đầu tiên áp dụng cho phiên bản Android Cupcake mang nhiều tính năng mới như bàn phím ảo có
khả năng dự đoán từ đang gõ, từ điển từ ngữ do người dùng đặt ra, hỗ trợ widget trên giao diện chủ, quay phim và phát lại video clip, lược sử thời gian cuộc gọi, chế độ tự động xoay màn hình theo hướng sử dụng (screen rotation)
Android 1.6 (Donut): Ra mắt ngày 30-9-2009 Donut khắc phục các chức năng
"lỏng lẻo" trong Cupcake, mở rộng chức năng tìm kiếm bằng giọng nói và ký tự đến
bookmark và danh bạ Android Market trở thành "chợ đầu mối" để người dùng tìm
kiếm và xem các ứng dụng Android Ứng dụng chụp ảnh và quay phim trong Donut
nhanh hơn Hệ điều hành hỗ trợ màn hình có độ phân giải lớn hơn, hướng đến các thế
hệ smartphone màn hình lớn
Android 2.0 (Eclair): Ra mắt ngày 26-10-2009 Chỉ sau gần một tháng ra mắt Donut, Google tung ra Eclair, phiên bản được nhận định là "bước đi lớn" của hệ điều hành này Eclair cải tiến rất nhiều, từ giao diện đến ứng dụng bên trong hệ thống Ứng
dụng chụp ảnh tăng cường thêm chức năng zoom số (phóng to), cân bằng trắng, hỗ trợ
đèn flash và các hiệu ứng màu sắc Eclair là phiên bản Android đầu tiên hỗ trợ ảnh
nền động (live wallpaper) dù tùy chọn này tiêu tốn khá nhiều pin
Android 2.2 (Froyo): Ra mắt ngày 20-5-2010 Từ phiên bản 2.0 trở đi, Android dần hoàn thiện hơn Froyo mang Adobe Flash đến Android, kéo theo hàng loạt ứng
dụng và game trên nền Flash Người dùng cũng có thể xem video clip nền Flash như
YouTube và "ra lệnh" thực hiện cuộc gọi qua Bluetooth
Trang 17Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Android 2.3 (Gingerbread): Ra mắt ngày 6-12-2010 Đến cuối năm 2012, Gingerbread vẫn đang "phủ sóng" trên rất nhiều thiết bị dùng Android, chiếm đến hơn
phân nửa (54%) Google hợp tác Samsung trình làng dòng smartphone đầu tiên sử
dụng Gingerbread mang tên Nexus S, hỗ trợ công nghệ giao tiếp tầm gần NFC
Android 3.0 (Honeycomb): Ra mắt ngày 22-2-2011 Đây không chỉ là một
phiên bản, mà có thể xem là một thế hệ Android đầu tiên dành riêng cho máy tính bảng (tablet), ra mắt cùng tablet Motorola XOOM Honeycomb đặt nền móng quan trọng
cho thế hệ Android 4.x hợp nhất, khắc phục sự phân mảng của Android
Android 4.0 (Ice Cream Sandwich) Ra mắt: ngày 19-10-2011 "Bánh kem
sandwich" (ICS) là thế hệ Android được mong đợi nhất đến nay, ra đời cùng dòng smartphone "bom tấn" Samsung Galaxy Nexus, thế hệ smartphone đầu tiên trang bị
ICS Ice Cream Sandwich hoạt động mượt mà, nhanh và đẹp hơn
Android 4.1 (Jelly Bean): Ra mắt: 9-7-2012 Máy tính bảng Nexus 7, sản phẩm hợp tác giữa Google và Asus, là thiết bị dùng Jelly Bean đầu tiên ra mắt Android 4.1
nâng tầm hoạt động cho hệ điều hành của Google, trở thành hệ điều hành cho thiết bị di động hàng đầu hiện nay, đe dọa cả "ông lớn" Windows
Android 4.2 (vẫn là Jelly Bean) Ra mắt: tháng 11-2012 Chỉ sau gần năm tháng
ra mắt Android 4.1, Google tiếp tục bồi thêm sức nặng cho Android với phiên bản 4.2
và vẫn mang tên mã Jelly Bean
Android 4.3 (vẫn là Jelly Bean) Ra mắt: tháng 24-7-2012
Android 4.4 (KitKat): ra mắt cuối tháng 10 đầu tháng 11 năm 2013 Kitkat
mới nhanh chóng chiếm được cảm tình người dùng Các số liệu sau có thể cho thấy điều này
Trang 18Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Bản báo cáo mới nhất của Google về tình hình các phiên bản hệ điều hành Android trong tháng 3 cho thấy sự gia tăng đều đặn của các phiên bản Android mới,
trong đó có Android 4.4 KitKat
Hình 1.3: Bản báo cáo mới nhất của Google về tình hình các phiên bản Android
Android 2.2 Froyo giảm 0,1% so với tháng trước và hiệu chiếm 1,1% thị phần Android, phiên bản 3.2 Honeycomb vẫn giữ nguyên mức 0,1% của tháng 2
Gingerbread tiếp tục giảm từ 19% xuống cón 17,8% Trong khi đó, những phiên bản Android 4.x như 4.0 , 4.1 và 4.3 riêng Android 4.2 và 4.4 lại có sự tăng trưởng đáng kể Cụ thể, Android 4.2 tăng 1% chiếm 18,1% thị phần, đặc biệt Android 4.4 KitKat tăng trưởng gần như gấp đôi từ 2,5% trong tháng 2 lên 5,3% trong tháng 3 Thống kê được Google lấy sô liệu từ những thiết bị chạy Android có truy cập vào kho ứng dụng của Google Play, bao gồm cả việc những ứng dụng tự động kết nối và tải về
bản cập nhập từ Google Play (Theo http://www.thongtincongnghe.com/ )
I.3.1 Activity là gì?
Activity là một thành phần cơ bản của ứng dụng Android Mỗi activity thực hiện một chức năng của ứng dụng, trong mỗi ứng dụng Android luôn có một MainActivity,
Trang 19Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
khi ta chạy ứng dụng thì Activity này sẽ được gọi thực thi trước và thể hiện những giao diện hay control lên màn hình để người dùng có thể tương tác
Một ứng dụng thường bao gồm nhiều Activity có mối liên quan với nhau, và các activity này hoạt động theo cơ chế hàng đợi, có nghĩa khi một activity đang hoạt động nhưng một activity khác được kích hoạt hoặc activity đó có độ ưu tiên lớn hơn thì activity trước đó sẽ chuyển sang trạng thái Stop hoặc Pause để activity này thực hiện
Tạo một Activity
Để tạo một Activity bạn cần phải tạo một lớp con kế thừa từ lớp Activity Trong lớp con bạn cần thực hiện các phương thức callback mà hệ thống sẽ thực hiện khi chuyển đổi giữa các activity trong vòng đời của nó, bao gồm các trạng thái như khởi tạo, dừng, chạy, hay ngừng hẳn
Thực hiện một giao diện người dùng
Giao diện người dùng cho một hoạt động được cung cấp bởi một hệ thống các quan điểm, đối tượng dẫn xuất từ lớp View Mỗi đối tượng View được trình bày trên không gian hình chữ nhật (Màn hình mobile) và ta có thể xử lý những sự kiện thông qua các câu lệnh trên các đối tượng View đó
Khai báo activity trong Manifest
Bạn cần khai báo Activity trong tập tin AndroidManifest để nó có thể truy cập vào hệ thống Để có thể khai báo bạn cần phải mở tập tin AndroidManifest trong Project của bạn rồi thêm một thẻ <activity> ở bên trong cặp thẻ <application> như sau:
Trang 20Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Ngoài ra, bạn còn có thể thêm một số thuộc tính khác cho activity như label, icon, theme style
Sử dụng intent filters
Một Activity cũng có thể chỉ định những bộ lọc khác nhau tùy mục đích sử dụng, các yếu tố lọc được để trong thẻ <intent-filter> bao gồm các yếu tố để có thể kích hoạt activity đó
Các phần tử trong thẻ tab <action> xác định thực hiện hành động của ứng dụng đối với activity đó Còn các phần tử trong thẻ <category> xác định activity này nên được liệt kê khi khởi tạo ứng dụng hệ thống (cho phép người dùng gọi activity đó)
Bắt đầu một Activity
Bạn có thể gọi một activity bằng phương thức startActivity(), thông qua Intent
mà bạn đã miêu tả về activity đó khi bạn muốn bắt đầu
Trang 21Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
bị mà có thể thực hiện action đó cho bạn Nếu có nhiều hoạt động có thể xử lý các intent, thì người dùng có thể cọn bất kỳ một trong các intent để sử dụng Ví dụ bạn muốn cho người dùng gửi mail, bạn có thể tạo ra các intent sau đây:
Các EXTRA_MAIL được thêm vào intent là một mảng các chuỗi địa chỉ email
mà sẽ được gửi Khi một ứng dụng mail hồi đáp intent này, nó sẽ đọc mảng chuỗi được cung cấp bên trong extra và thay thế chúng trong trường “To” của Form gửi mail Trong trường hợp này activity của ứng dụng sẽ được gọi khi người dùng đã thực hiện
và activity đó sẽ được resume lại
Trang 22Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Hình 1.4: Activity Lifecycle
Trang 23Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Trong đó:
onCreate: Khởi tạo activity
onStart: thực hiện activity
onResume: Thực hiện tiếp tục một activity
onPause: Tạm dừng một activity
onStop: Dừng hẳn một activity
onRestart: Thực hiện lại activity
Android có cơ chế quản lý các tiến trình theo chế độ ưu tiên Các tiến trình có
độ ưu tiên thấp sẽ bị Android giải phóng mà không hề cảnh báo nhằm đảm bảo tài nguyên
Một Activity bao gồm 4 trạng thái
Active (running): Activity đang hiển thị lên màn hình (foreground)
Paused: Activity vẫn hiển thị (visible) nhưng không thể tương tác (lost focus)
Stop: Một activity được thay thế hoàn toàn bở một activity khác sẽ chuyển sang trạng thái stop
Killed: Khi hệ thống thiếu bộ nhớ nó sẽ giải phóng các tiến trình theo nguyên tắc độ ưu tiên Các activity ở trạng thái stop hoặc pause cũng có thể
bị giải phóng và khi nó được hiển thị lại thì các Activity này phải khởi động lại hoàn toàn và phục hồi lại trạng thái trước đó
Vậy ta có thể hiểu vòng đời của Activity nhƣ sau:
Entire lifetime: Bắt đầu phương thức onCreate() cho tới phương thức
onDestroy()
Visible lifetime: Từ phương thức onStart() cho tới phương thức onStop()
Trang 24Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Foreground lifetime: Từ phương thức onResume() đến phương thức
onPause()
I.3.2 Services
Services là những thành phần chạy ẩn trong ứng dụng Android Service
sử dụng để cập nhật thông tin, dữ liệu hay đưa ra các cảnh cáo, nhắc nhở Một service
có thể chạy nền và có thể tiếp tục chạy khi người dùng chuyển sang một Activity khác
Để bắt đầu một service bạn cần gọi phương thức startService() khi một thành phần của ứng dụng được bắt đầu, ví dụ như một Activity Service cần được khai báo trong file AndroidManifest.xml của ứng dụng:
Hình 1.5: Service Lifecycle
Trang 25Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
I.3.3 Content Providers
Content Providers giúp lưu trữ và lấy dữ liệu và làm cho nó có thể truy cập đến tất cả các ứng dụng khác Đây là cách duy nhất để chia sẻ dữ liệu qua các ứng dụng
Dữ liệu thường được lưu trữ ở file hệ thống hoặc trong một Sqlite Database Content Provider thực hiện một tập phương thức chuẩn mà các ứng dụng khác có thể truy xuất và lưu dữ liệu của loại nó điều khiển Tuy nhiên những ứng dụng không thể gọi các phương thức trực tiếp Hơn thế chúng dùng content resolver và gọi những phương thức đó Một content resolver có thể giao tiếp đến nhiều content provider; nó cộng tác với các provider để quản lý bất kỳ giao tiếp nào liên quan
Mỗi ứng dụng Android chạy trên Process của nó Bất cứ lúc nào Content Provider cũng có thể quản lý được các thành phần bên trong nó
Android phải đảm bảo các process thành phần phải đang chạy
Khởi tạo nếu cần thiết
Một trường hợp tương thích của các thành phần là có giá trị hoặc đang
khởi tạo trong trường hợp cần thiết
I.3.4 Intent
Intent là gì?
Intent là một cấu trúc dữ liệu mô tả cách thức, đối tượng thực hiện của một Activity Intent còn là cầu nối giữa các Activity: ứng dụng Android thường bao gồm nhiều Activity, mỗi Activity hoạt động độc lập với nhau và thực hiện những công việc khác nhau
Trang 26Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Intent chính là người đưa thư, giúp chúng ta triệu gọi cũng như truyền các dữ liệu cần thiết để thực hiện một Activity từ một Activity khác
Intent là một khái niệm then chốt và đặc trưng của Android Platform Có thể nói lập trình Android chính là lập trình Intent base
Các thuộc tính của đối tƣợng Intent
Intent về cơ bản là một cấu trúc dữ liệu được mô tả trong lớp
android.content.Intent
Action: Tên (string) của action mà Intent sẽ yêu cầu thực hiện, có thể
là action được android định nghĩa sẵn (built-in standard action) hoặc
do người lập trình tự định nghĩa
Data: Dữ liệu mà activity được gọi sẽ xử lý, định dạng URI thông qua
hàm Uri.parse(data)
Category: thông tin về nhóm của action
định
Component: chỉ định cụ thể lớp sẽ thực thi Activity, khi được xác
định các thuộc tính khác trở thành không bắt buộc (optional)
Extras: chứa tất cả các cặp (key, value) do ứng dụng thêm vào để
truyền qua Intent(cấu trúc Bundle)
I.3.5 Broadcast receivers
Là một thành phần của ứng dụng có chức năng thu nhận và phản ứng lại những thông báo được broadcast Nhiều broadcast gốc trong mã hệ thống và các ứng dụng cũng có thể khởi tạo broadcast
Trang 27Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Broadcast receivers không hiển thị giao diện người dùng Tuy nhiên chúng có thể khởi tạo một Activity phản hồi lại những thông tin được nhận Chúng cũng có thể dùng Notification Manager để thông báo đến người dùng
II.1 Thiết lập môi trường phát triển ứng dụng
Môi trường được thiết lập trên các hệ điều hành Windows và cụ thể ở đây tôi dùng Windows 8 bản 64 bit Để thực hiện việc này bạn cần có các gói cài đặt sau:
JDK Java for windows
II.2 Các thành phần trong Android Project
II.2.1 Tạo mới Android Project
Mở eclipse, chọn File New Android Application Project (trường hợp không có Android Application Project thì ta bấm vào Orther)
Trang 28Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Hình 1.7: Tạo mới 1 ứng dụng Android
- Application Name: Tên ứng dụng mà bạn mong muốn
- Project Name: Tự động cập nhập khi chúng ta điền Application Name
- Package Name: Tên package, bạn đặt sao cũng được nhưng sao cho dễ nhớ và
không có các ký tự đặc biệt (chỉ gồm chữ thường và các chữ số từ 0 ~ 9)
- Minimum Required SDK: Phiên bản Android thấp nhất chạy ứng dụng này
- Target SDK: Phiên bản hiện tại của ứng dụng
- Compile With: Phiên dịch sang phiên bản khác
Sau khi tạo mới xong 1 Android Application Project ta sẽ tìm hiểu cấu trúc của một Android Project Một Android Project gồm:
- /src folder: chứa các mã nguồn (source code) là các file Java
- /gen: Chứa file R.java dùng để quản lý các tài nguyên được tạo ra từ các tập tin
nguồn, file này tự tạo nên không được chỉnh sửa, thay đổi
Trang 29Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- /Android 4.4: bao gồm các API 4.4 tương ứng với hệ điều hành Android 4.4,
các thư viện này được Import khi ta khởi tạo Project bằng cách chọn Target ở
trên
- /assets: chứa các file tài nguyên như database sẽ đi
kèm với Project khi ta đóng gói ứng dụng
- /res/drawable-hdpi: nơi lưu hình ảnh sử dụng cho
ứng dụng hdpi (High dpi: độ phân giải cao) tương thích với điện thoại có màn hình WVGA800 (480x800), WVGA854 (480x854)
- /res/drawable-ldpi: cũng là thư mục để chứa các
file ảnh có độ phân giải thấp hơn Low dpi: QVGA (240x320), WQVGA400 (240x400), WQVGA432 (240x432)
- /res/drawable-mdpi: chứa các file ảnh có độ phân
giải trung bình Medium dpi: HVGA (320x480), WVGA800 (480x800), WVGA854 (480x854)
- /res/layout/main.xml: file thiết kế giao diện cho ứng dụng, có thể tạo thêm
nhiều file khác cho nhưng màn hình khác nhau
- /res/values/strings.xml: định nghĩa giá trị cho các tài nguyên trong project,
giúp tối ưu hóa trong việc quản lý giá trị mặc định các đối tượng String trên mỗi layout
- /AndroidManifest.xml: file cấu hình cho ứng dụng
Ngoài ra còn có một số folder và file do người lập trình tự định nghĩa
II.2.2 Thiết kế giao diện trong Android
Không giống như lập trình java thông thường, lập trình android ngoài các lớp
Hình 1.8: Cấu trúc 1 Project
Trang 30Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
dòng XML nào, nhưng sử dụng XML sẽ đơn giản công việc đi rất nhiều Đồng thời sử dụng XML sẽ giúp việc chỉnh sửa ứng dụng sau này trở nên dễ dàng
Về nguyên tắc, khi lập trình ứng dụng ta thiết kế giao diện bằng XML và cài đặt các xử lý khi tương tác với giao diện trong code
Các Layout
Layout được dùng để quản lý các thành phần giao diện khác theo 1 trật tự nhất định Layout được sử dụng nhằm mục đích thiết kế giao diện cho nhiều độ phân giải Thường khi lập trình nên kết hợp nhiều layout với nhau để tạo ra giao diện bạn mong muốn
FrameLayout: Layout đơn giản nhất, thêm các thành phần con vào
góc trên bên trái của màn hình
LinearLayout: thêm các thành phần con theo 1 chiều nhất định
(ngang hoặc dọc) Đây là layout được sử dụng nhiều nhất
RelativeLayout: thêm các thành phần con dựa trên mối quan hệ với
các thành phần khác hoặc với biên của layout
TableLayout: thêm các thành phần con dựa trên 1 lưới các ô ngang và
dọc
AbsoluteLayout: thêm các thành phần con dựa theo tọa độ x, y
Một số thuộc tính cơ bản
Layout_width, layout_height: chiều rộng của view fill_parent là to
bằng kích thước của layout chứa view này, wrap_content là vừa đủ nội dung cần hiển thị của view)
Orientation: với LinearLayout, việc sắp xếp các view là nằm kề nhau
theo hàng ngang hoặc hàng dọc, ta khai báo orientation để chọn sắp theo kiểu nào (horizontal/vertical)
Trang 31Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Gravity: thuộc tính này qui định các view nằm bên trong layout sẽ đặt
theo vị trí nào so với layout(trung tâm, trái , phải, trên dưới…)
Weight: để các view phần chia tỉ lệ diện tích hiển thị trên màn hình (tỉ
lệ tính theo weight của từng view trên tổng số weight, các view ko khai báo weight thì sẽ xem qua width và height)
Đồ họa trên Android
Android cung cấp cho chúng ta một thư viện đồ họa đầy đủ, đó chính là gói
android.graphics Bên trong nó chứa các lớp đồ họa như Color, Canvas
- Color: Color được thể hiện bởi 4 giá trị, đầu tiên là alpha, red, green and blue
(AGRB) Mỗi thể hiện gồm 256 giá trị(8 bit) do đó một màu có giá trị cao nhất lên tới 32 bit integer Với android thuận tiện hơn khi cho phép chúng ta thể hiện giá trị màu bằng một số nguyên thay vì thể hiện theo cách của lớp Color hay dùng
Để khởi tạo một giá trị màu ta có thể khai báo:
Nếu ta có thể biết độ alpha, thì ta có thể khai báo:
Nhưng trong Android, người ta thường định nghĩa trong file XML, chẳng hạn
color.xml để sau này thuận tiện hơn cho việc sửa chữa
Khi đó ta sử dụng màu trong code của mình bằng cách:
Trang 32Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
- Paint: Paint là một lớp quan trọng trong Android, một ứng dụng android chẳng
khi nào thiếu lớp này Nó bao gồm các kiểu style, color và những thông tin cần thiết để vẽ bất cứ dạng đồ họa nào như bitmap, text,
Ví dụ: ta paint cái gì lên screen, muốn vẽ nó với solid color Ta set nó như sau:
cPaint.setColor(Color.LTGRAY);
- Canvas: Là một lớp quan trọng trong quá trình xây dựng ứng dụng, đặc bệt
trong Game Nếu như lớp Paint cung cấp cho bạn những dụng cụ như color, đường nét, độ to nhỏ của nét để vẽ, thì Canvas cung cấp cho bạn những phương thức để vẽ nên những gì bạn muốn, đường thẳng, đường tròn, hình chữ nhật,
Để sử dụng Canvas để vẽ, ta cần override lại phương thức View.onDraw()
@Override Protected void onDraw(Canvas canvas) { // Drawing commands go here
} Lúc này ta có thể đưa những phương thức vẽ vào onDraw()
- Bitmap: Đối tượng Bitmap là một kiểu tổ chức bộ nhớ hoặc định dạng tập tin
để lưu trữ ảnh số Đối tượng Bitmap đơn giản là một mảng hai chiều, trong đó mỗi phần tử chứa một giá trị màu RGB tương ứng với một điểm màu trên bức ảnh số hoặc điểm màu được vẽ lên màn hình
Ta dùng BitmapFactory.decodeResource( ) để đối tượng Bitmap từ một tập tin hình ảnh lưu trong thư mục drawable
@Override
protected void onDraw(Canvas canvas) {
Paint bPaint=new Paint();
Bitmap bitmap =
BitmapFactory.decodeResource(getResource(),
Trang 33Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
R.drawable.image);
Canvas.drawBitmap(bitmap,0,0,bPaint); }
Âm thanh trên Android
Android cung cấp cho chúng ta một thư viện đa phương tiện đầy đủ (audio và video), đó là gói android.media Phần chính của gói này là lớp MediaPlayer
Trong một ứng dụng game ta cần sử dụng lớp MediaPlayer để phát âm thanh cho game những lúc cần thiết Android hổ trợ một số định dạng âm thanh như OGG, MP3, WAV Để phát được âm thanh trước hết ta phải tạo đối tượng MediaPlayer bằng phương thức MediaPlayer.create( ) Sau đó gọi phương thức start() để bắt đầu phát âm thanh
MediaPlayer media = MediaPlayer.create(this, R.raw.amthanh); Media.start();
Phương thức seedTo( ) được gọi với tham số là playbackPosition được truyền vào, khi ta gọi phương thức start() thì mediaPlayer sẽ bắt đầu chơi tại vị trí playbackPosition
Media.seedTo(5000);
Media.start(); // bat đau phát tu giây thu 5
Ngoài ra lớp MediaPlayer còn chứa phương thức stop() để dừng âm thanh khi cần thiết Nếu đã gọi phương thức stop() để dừng âm thanh, khi nào muốn phát lại âm thanh thì phải gọi phương thức prepare() trước khi gọi lại start() một lần nữa Nhưng nếu gọi pause() thì ta có thể gọi start() ngay mà không cần gọi prepare()
media.stop(); //dừng âm thanh lại media.prepare();
Trang 34Xây dựng game cờ Gánh dân gian GVHD: PGS.TSKH Trần Quốc Chiến
Ngoài ra khi đã sử dụng xong đối tượng MediaPlayer ta gọi phương thức release() để giải phóng đối tượng MediaPlayer
III.1 Giới thiệu về Cờ Gánh
Văn hóa dân gian nói chung, trò chơi dân gian nói riêng là nơi nuôi dưỡng tâm hồn con người Việt Nam từ xưa và vẫn còn nguyên giá trị cho đến ngày hôm nay Trò chơi dân gian không chỉ là hoạt động giải trí những lúc nhàn rỗi mà còn thể hiện bản lĩnh, trí tuệ và lòng tự hào dân tộc của cha ông ta Cũng như bao miền quê khác trên mảnh đất Việt Nam, người xứ Quảng cũng góp phần làm nên những hương sắc riêng trong văn hóa dân gian Trong những giá trị văn hóa ấy, cờ Gánh là một trong những trò chơi thể hiện trí tuệ và tính nhân văn sâu sắc của mảnh đất và con người nơi đây Cho đến nay không ai biết chắc chắn cờ Gánh xứ Quảng được ra đời từ khi nào Một giả thiết nguồn gốc của trò chơi này được nghĩ đến đó là từ môn cờ Vây, cờ Tướng của người Trung Hoa, cờ Vua của người phương Tây, người dân xứ Quảng đã được giản cách chơi, kết hợp với các môn cờ dân tộc để làm nên cờ Gánh cho riêng mình chăng? Bởi lẽ trước đây Hội An – Quảng Nam là một thương cảng tấp nập, trên bến dưới thuyền, với sự xuất hiện của cả người Hoa lẫn người phương Tây đã mang theo các môn cờ vào nước ta Tuy nhiên đây chỉ là những giả thiết và cần được tiếp tục chứng minh qua thời gian và tâm sức của những con người yêu mảnh đất xứ Quảng Tạm gác lại nguồn gốc của trò chơi, chúng ta có thể thấy thông qua bộ môn cờ Gánh người Quảng đã gửi gắm vào đây sự sáng tạo và cả những bài học nhân văn đầy ý nghĩa