Báo cáo Lập trình hệ thống nhúng - Đề tài: Xây dựng ứng dụng Game Fun Math trên Android

BỘ CÔNG THƯƠNG  
TRƯỜNG ĐẠI HỌC SAO ĐỎ  
BÁO CÁO ĐỀ TÀI MÔN HỌC  
LẬP TRÌNH HỆ THỐNG NHÚNG  
Đề tài:  
XÂY DỰNG ỨNG DỤNG GAME FUN MATH  
TRÊN ANDROID  
Nhóm thực hiện:  
Sv. Nguyễn Thị Trang  
Sv. Vũ Thị Thủy  
CNTT - DK04  
Lớp:  
Hải Dương, tháng 09/2017  
1
LỜI MỞ ĐẦU  
Hiện nay, toán học được coi là nền tảng của sự phát triển. Hàng triệu người từ  
các nền văn hóa khác nhau đều nỗ lực trong môn học này. Ở Việt Nam toán học cũng  
đã thể hiện được vị trí quan trọng kể từ khi đất nước bắt đầu phát triển. Tất cả mọi lĩnh  
vực đều cần có trình độ toán. Vì đó toán học là một môn rất quan trọng mà chúng ta  
nên học và rèn luyện hàng ngày đặc biệt là trẻ nhỏ. Khi còn nhỏ, trẻ sẽ dễ dàng tiếp thu  
toán nhanh nhất để thúc đẩy sự suy tư của trẻ thay vì học thụ động như khi trưởng  
thành. Độ tuổi này các em có khả năng tự mình tìm ra các quy tắc riêng cho bản thân  
theo một cách hoàn toàn bản năng. Nhờ đó, trẻ sẽ học nhanh và dễ dàng tiếp thu kiến  
thức mà giáo viên truyền đạt.  
Cùng với đó sự phát triển của công nghệ di động đã bùng nổ trong vài năm qua.  
Các thiết bị cầm tay đã trở nên rất mạnh mẽ và phổ biến. Trong vài năm trở lại đây, hệ  
điều hành Android ra đời và trở thành nền tảng điện thoại thông minh phổ biến nhất  
thế giới. Những ưu điểm dễ thấy nhất của Android chính là khả năng tùy biến nhanh  
chóng, dễ làm quen, ứng dụng hỗ trợ phong phú, tương thích với đa cấu hình phần  
cứng của các nhà sản xuất. Hầu như tất cả những smartphone sử dụng hệ điều hành  
Android đều dễ sử dụng, đơn giản tùy biến theo sở thích cá nhân. Với sự phát triển  
mạnh mẽ như vậy của Android, và lập trình game trên Android, cơ hội cho lập trình  
viên là rất lớn. Vì vậy, nhóm đã chọn đề tài “Lập trình ứng dụng game Fun Math  
trên Android”. Trong đề tài này, nhóm sẽ trình bày cái nhìn cơ bản về lập trình game  
trên Android và demo ứng dụng game trong đó.  
2
 
MỤC LỤC  
3
 
DANH MỤC HÌNH  
5
 
MỞ ĐẦU  
1. Lý do chọn đề tài  
Hiện nay, toán học được coi là nền tảng của sự phát triển. Hàng triệu người từ  
các nền văn hóa khác nhau đều nỗ lực trong môn học này. Ở Việt Nam toán học cũng  
đã thể hiện được vị trí quan trọng kể từ khi đất nước bắt đầu phát triển. Tất cả mọi lĩnh  
vực đều cần có trình độ toán. Vì đó toán học là một môn rất quan trọng mà chúng ta  
nên học và rèn luyện hàng ngày đặc biệt là trẻ nhỏ. Khi còn nhỏ, trẻ sẽ dễ dàng tiếp thu  
toán nhanh nhất để thúc đẩy sự suy tư của trẻ thay vì học thụ động như khi trưởng  
thành. Độ tuổi này các em có khả năng tự mình tìm ra các quy tắc riêng cho bản thân  
theo một cách hoàn toàn bản năng. Nhờ đó, trẻ sẽ học nhanh và dễ dàng tiếp thu kiến  
thức mà giáo viên truyền đạt.  
Nhận thấy tầm quan trọng đó nhóm em quyết định tìm hiểu và thực hiện đề tài:  
“Lập trình ứng dụng game Funsmath trên Android”.  
2. Mục đích nghiên cứu  
Việc xây dựng game Funsmath sẽ giúp trẻ ôn tập những phép toán , cải thiện  
bộ nhớ, phát triển tư duy logic, phát triển tư duy kết hợp.  
3. Đối tượng của đề tài  
Trò chơi phù hợp cho học sinh tiểu học.  
4. Phạm vi nhiên cứu  
- Tìm hiểu kĩ thuật lập trình bằng Unity.  
- Các phép toán trong bảng cửu chương.  
5. Phương pháp nghiên cứu  
- Nghiên cứu lỹ thuyết  
- Khảo sát thực tế  
- Xây dựng chương trình theo mục tiêu đã đặt ra  
- Phân tích, thiết kế hệ thống chương trình sao cho phù hợp  
6. Bố cục đề tài  
Nội dung đồ án gồm các thành phần sau:  
MỞ ĐẦU  
- Chương 1. Cơ sở lý thuyết  
- Chương 2. Thiết kế ứng dụng  
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN  
TÀI LIỆU THAM KHẢO  
6
             
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT  
1.1.Tổng quan về Android  
Android là một hệ điều hành dựa trên nền tảng Linux ,được chạy trên các thiết  
bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng. Ban  
đầu, được phát triển bởi Tổng công ty Android, với nguồn vốn từ Google và sau này  
được chính Google mua lại vào năm 2005.Năm 2007 android ra mắt cùng với tuyên  
bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần mềm,  
phần cứng, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn cho các thiết bị di  
động . Tháng 10 năm 2008 chiếc điện thoại đầu tiên chạy Android được bán trên thị  
trường.  
Kiến trúc hệ điều hành Android có 4 tầng từ dưới lên trên là tầng hạt nhân  
Linux (phiên bản 2.6), tầng Libraries & Android runtime, tầng Application Framework  
và trên cùng là tầng Application.  
1.1.1.Tầng hạt nhân Linux  
Hệ điều hành Android được phát triển dựa trên hạt nhân Linux, cụ thể là hạt  
nhân Linux phiên bản 2.6, điều đó được thể hiện ở lớp dưới cùng này. Tất cả mọi hoạt  
động của điện thoại muốn thi hành được thì đều thực hiện ở mức cấp thấp. Ở lớp này  
bao gồm quản lý bộ nhớ (memory management), giao tiếp với phần cứng (driver  
model), thực hiện bảo mật (security), quản lý tiến trình (process).  
Tuy được phát triển dựa vào nhân Linux nhưng thực ra nhân Linux đã được  
nâng cấp và chỉnh sửa rất nhiều để phù hợp với tính chất của những thiết bị cầm tay,  
như hạn chế về bộ vi xử lý, dung lượng bộ nhớ, kích thước màn hình, nhu cầu kết nối  
mạng không dây.  
Tầng này có các thành phần chủ yếu:  
- Display Driver: Điều khiển việc hiển thị lên màn hình cũng như thu nhận  
những điều khiển của người dùng trên màn hình (di chuyển, cảm ứng…).  
- Camera Driver: Điều khiển hoạt động của camera, nhận luồng dữ liệu từ  
camera trả về.  
- Bluetooth Driver: Điều khiển thiết bị thu và phát sóng Bluetooth.  
- USB driver: Quản lý hoạt động của các cổng giao tiếp USB.  
- Keypad driver: Điều khiển bàn phím.  
- Wifi driver: Chịu trách nhiệm về việc thu phát sóng wifi.  
- Audio Driver: Điều khiển các bộ thu phát âm thanh, giải mã các tín hiệu dạng  
audio thành tín hiệu số và ngược lại.  
7
     
- Binder IPC Driver: Chịu trách nhiệm về việc kết nối và liên lạc với mạng vô  
tuyến như CDMA, GSM, 3G, 4G, E để đảm bảo những chức năng truyền thông được  
thực hiện.  
- M-System Driver: Quản lý việc đọc ghi lên các thiết bị như thẻ nhớ SD, flash  
- Power Management: Giám sát việc tiêu thụ điện năng.  
1.1.2.Tầng Library  
Phần này có nhiều thư viện được viết bằng C/C++ để các phần mềm có thể sử  
dụng, các thư viện đó được tập hợp thành một số nhóm như:  
- Thư viện hệ thống (System C library): thư viện dựa trên chuẩn C, được sử  
dụng chỉ bởi hệ điều hành.  
- Thư viện Media (Media Libraries): Có nhiều codec để hỗ trợ việc phát và ghi  
các loại định dạng âm thanh, hình ảnh, video thông dụng.  
- Thư viện web (LibWebCore): đây là thành phần để xem nội dung trên web,  
được sử dụng để xây dựng phần mềm duyệt web (Android Browse) cũng như để các  
ứng dụng khác có thể nhúng vào. Nó cực kỳ mạnh, hỗ trợ được nhiều công nghệ mạnh  
mẽ như HTML5, JavaScript, CSS, DOM, AJAX…  
- Thư viện SQLite: Hệ cơ sở dữ liệu để các ứng dụng có thể sử dụng  
1.1.3. Phần Android runtime  
Phần này chứa các thư viện mà một chương trình viết bằng ngôn ngữ Java có  
thể hoạt động. Runtime có 2 bộ phận tương tự như mô hình chạy Java trên máy tính  
thường. Thứ nhất là các thư viện lõi (Core Library), chứa các lớp như Java IO,  
Collection, File Access. Thứ hai là một máy ảo Java (Dalvik Virtual Machine). Mặc  
dù cũng được viết từ ngôn ngữ Java nhưng một ứng dụng Java của Android không  
được chạy trên JRE của Sun mà là chạy bằng máy ảo Dalvik do Google phát triển.  
1.1.4. Tầng Application Framework  
Tầng này xây dựng bộ công cụ – các phần tử ở mức cao để các lập trình viên có  
thể nhanh chóng xây dựng ứng dụng. Nó được viết bằng Java, có khả năng sử dụng  
chung để tiết kiệm tài nguyên.  
Đây là một nền tảng mở, điều đó có 2 điều lợi:  
- Với các hãng điện thoại: Có thể tùy biến để phù hợp với cấu hình điện thoại  
mà họ sản xuất cũng như để có thể có nhiều mẫu mã, style hợp thị hiếu người dùng. Vì  
thế nên tuy cùng chung nền tảng Android mà điện thoại của Google có thể khác với  
Motorola, HTC, T-Mobile, Samsung…  
Với lập trình viên: Cho phép lập trình viên có thể sử dụng các API ở tầng trên  
mà không cần phải hiểu rõ cấu trúc bên dưới, tạo điều kiện cho lập trình viên tự do  
sáng tạo bởi vì chỉ cần quan tâm đến nội dung mà ứng dụng họ làm việc. Một tập hợp  
8
     
API rất hữu ích được xây dựng sẵn như hệ thống định vị, các dịch vụ chạy nền, liên lạc  
giữa các ứng dụng, các thành phần giao diện cấp cao…  
1.1.5. Tầng Application  
Đây là tầng ứng dụng giao tiếp với người sử dụng, bao gồm các ứng dụng như:  
- Các ứng dụng cơ bản, được cài đặt đi liền với hệ diều hành: gọi diện, quản lý  
danh bạ, duyệt web, nhắn tin, lịch làm việc, đọc email, quay phim chụp ảnh,…  
- Các ứng dụng cài thêm như các trò chơi, từ điển, các phần mềm học tiếng anh.  
Các chương trình có đặc điểm là:  
- Viết bằng Java có phần mở rộng là apk.  
- Khi mỗi ứng dụng được chạy, nó có một phiên bản Virtual Machine được  
dựng lên để phục vụ cho nó.  
- Android là hệ diều hành đa nhiệm, điều đó có nghĩa là trong cùng một thời  
điểm, có thể có nhiều chương trình chạy cùng một lúc, tuy nhiên với mỗi ứng dụng thì  
có duy nhất một thực thể (instance) được phép chạy mà thôi. Điều đó có tác dụng hạn  
chế sự lạm dụng tài nguyên, giúp hệ thống hoạt động tốt hơn.  
- Các ứng dụng được gán số ID của người sử dụng nhằm phân định quyền hạn  
khi sử dụng tài nguyên, cấu hình phần cứng và hệ thống.  
- Android là một hệ điều hành có tính mở, khác với nhiều hệ điều hành di động  
khác, Android cho phép một ứng dụng của bên thứ 3 chạy nền. Các ứng dụng đó chỉ  
có một hạn chế là không được phép sử dụng quá 5% công suất CPU. Điều đó nhằm  
tránh độc quyền trong sử dụng CPU.  
- Ứng dụng không có điểm vào cố định, không có phương thức main để bắt đầu.  
1.2. Tổng quan về Game ENGINE  
1.2.1.Khái niệm  
Một Game Engine (hay công cụ tạo Game / động cơ Game) là một phần mềm  
được viết cho mục đích thiết kế và phát triển video Game. Có rất nhiều loại Game  
Engine dùng để thiết kế Game cho các hệ máy như hệ Consoles hay máy tính cá nhân  
(PC). Chức năng cốt lõi của Game Engine phần lớn nằm trong công cụ dựng hình (kết  
xuất đồ họa) cho các hình ảnh 2 chiều (2D) hay 3 chiều (3D), công cụ vật lý (hay công  
cụ tính toán và phát hiện va chạm), âm thanh, mã nguồn, hình ảnh động (Animation),  
trí tuệ nhân tạo, phân luồng, tạo dòng dữ liệu xử lý, quản lý bộ nhớ, dựng ảnh đồ thị,  
và kết nối mạng. Quá trình phát triển Game tiết kiệm được rất nhiều thời gian và kinh  
phí vào việc tái sử dụng và tái thích ứng một Engine để tạo nhiều Game khác nhau.  
1.2.2.Mục đích  
Game Engine cung cấp một bộ các công cụ phát triển trực quan và có thể tái sử  
dụng từng thành phần trong đó. Nói chung các bộ công cụ này cung cấp một môi  
9
       
trường phát triển tích hợp được đơn giản hóa. Phát triển ứng dụng nhanh (Rapid  
Application Development) cho Game theo cách lập trình hướng dữ liệu. Những Game  
Engine này đôi khi còn được gọi là các "phần mềm trung gian cho Game" (Game  
Middleware), như ý nghĩa của thuật ngữ, chúng cung cấp một nền tảng phần mềm linh  
hoạt và dễ dàng sử dụng lại với mọi chức năng cốt lõi cần thiết ngay trong nó để có thể  
phát triển một ứng dụng Game đồng thời giảm giá thành, độ phức tạp, và kịp thời hạn  
phát hành - tất cả các yếu tố quan trọng trong ngành công nghiệp Game đầy cạnh  
tranh. Giống như các phần mềm trung gian khác, Game Engine thường cung cấp một  
nền tảng trừu tượng hóa, cho phép một Game có thể chạy trên nhiều hệ máy bao gồm  
các hệ console hoặc máy tính cá nhân với một vài thay đổi (nếu cần) trong mã nguồn  
của Game đó. Thông thường, phần mềm trung gian cho Game được thiết kế với một  
nền tảng kiến trúc dựa trên các thành phần khác, cho phép các hệ thống khác nhau  
trong Engine có thể thay thế hoặc mở rộng với các phần mềm trung gian khác chuyên  
biệt hơn như là Havok cho hệ thống vật lý trong Game, Miles Sound System cho âm  
thanh, hay Bink cho các đoạn video. Một số Game Engine chỉ cung cấp khả năng dựng  
hình (kết xuất) 3D thời gian thực hay một khả năng riêng biệt nào khác thay vì rất  
nhiều chức năng trong phạm vi rộng mà Game yêu cầu. Loại Engine này thường được  
gọi là: "Graphics Engine", "Rendering Engine," hay "3D Engine" thay vì thuật ngữ  
bao quát hơn là "Game Engine”.  
1.2.3.Ảo hóa phần cứng (Hardware Abstraction)  
Thông thường, Engine 3D hay hệ thống kết xuất đồ họa trong Game Engine  
thường được xây dựng trên một nền tảng giao diện lập trình ứng dụng đồ họa như  
Direct3D hay OpenGL cung cấp sẵn một hệ ảo hóa cho GPU hay card đồ họa. Thư  
viện mã nguồn cấp thấp (cấp cơ bản) như DirectX, SDL, và OpenAL (thư viện âm  
thanh mã nguồn mở) cũng thường được sử dụng trong các Game khi chúng cung cấp  
khả năng truy cập phần cứng độc lập.  
1.2.4.Phần mềm trung gian  
Một số hãng hiện nay chuyên tập trung vào phát triển các bộ phần mềm gọi là  
phần mềm trung gian (Middleware). Các nhà phát triển Middleware cố gắng phát triển  
một bộ phần mềm mạnh mẽ bao gồm hầu hết các yếu tố mà một nhà phát triển Game  
cần đến để xây dựng một Game. Phần lớn các Middleware cung cấp các cơ sở để phát  
triển game một cách dễ dàng, như hình ảnh, âm thanh, hệ thống vật lý và chức năng  
AI. Gamebryo và RenderWare là hai phần mềm trung gian được sử dụng khá rộng rãi.  
Một số Middleware chỉ làm một chức năng nhưng nó còn hiệu quả hơn cả toàn bộ  
Engine.  
Phân loại Game Engine theo mức độ chuyên biệt  
10  
   
- Roll-your-own Game Engine  
- Mostly-ready Game Engine  
- Point-and-click Game Engine  
1.2.5.Kiến trúc tổng quan  
Engine Unity hỗ trợ cho chúng ta UnityAPI để viết script game. UnityAPI là API lập  
trình game trong Unity rất mạnh. UnityAPI chứa các đối tượng và phương thức hỗ trợ  
hầu hết các đối tượng và các loại thành phần trong Unity.Trong một scene thường có  
nhiều đối tượng game. Mỗi đối tượng này có thể có hoặc không có đoạn script nào  
gắn lên đó. Nếu muốn gắn script vào đối tượng, ta bắt buộc phải kế thừa class đó từ  
lớp MonoBehaviour của UnityAPI và tên class phải trùng với tên file script. Mỗi  
script khi gắn lên đối tượng game đều được đối tượng game xem như một thành phần  
bên trong và được cấp phát vùng nhớ khi chạy game.  
Hình 1.1.Tổng quan kiến trúc Unity  
Bên trong UnityAPI chứa rất nhiều lớp hỗ trợ lập trình game, trong đó có một số lớp  
quan trọng như :  
MonoBehaviour: tất cả các script muốn gắn vào một đối tượng game bắt buộc  
phải kế thừa từ lớp này.  
GameObject: lớp cha của tất cả các thực thể trong scene.  
Component: lớp cha của tất cả các thành phần có thể gắn vào đối tượng.  
Transform: giúp thay đổi vị trí, xoay, biến đổi tỉ lệ mô hình.  
Input: hỗ trợ lập trình với chuột, cảm ứng đa điểm, cảm biến gia tốc.  
11  
   
Camera: giúp lập trình camera.  
Light: giúp tạo ánh sáng trong game.  
Projector: giúp chiếu texture lên bề mặt vật thể.  
ParticleEmitter: hỗ trợ tạo các hiệu ứng particle đẹp mắt.  
Audio: hỗ trợ lập trình với âm thanh.  
Animation: chạy chuyển động của mô hình nhân vật.  
Rigidbody: giúp tạo hiệu ứng vật lý liên quan đến trọng lực như bóng nẩy, lăn.  
CharacterController: giúp điều khiển nhân vật di chuyển theo độ cao địa  
hình.  
Collider: hỗ trợ lập trình va chạm giữa các vật thể.  
GUI: giúp lập trình giao diện người dùng trên Unity.  
1.3.Tổng quan về Unity  
1.3.1.Tổng quan về Unity  
- Unity3D là một môi trường phát triển tích hợp, mạnh mẽ, hỗ trợ thao tác kéo  
thả, tuỳ biến giao diện nhanh chóng, trực quan.  
- Cung cấp các công cụ xử lý đồ hoạ, tích hợp sẵn thư viện vật lý, tính toán va  
chạm...  
- Hỗ trợ phát triển cả game 2D và 3D.  
- Hỗ trợ nhiều nền tảng thông dụng như OSX, Linux, Window, Web, iOS,  
Window Phone 8, Android, PS3, BB…  
- Cộng đồng người dùng, hỗ trợ rộng lớn.  
- Có phiên bản miễn phí có thể chạy được trên Window và Mac OSX.  
Unity3D hướng tới người sử dụng chuyên nghiệp và cả nghiệp dư, nên khá dễ  
để sử dụng. Với ngôn ngữ lập trình bằng C#, JavaScript hoặc BOO.  
Ngày nay rất nhiều nhà phát triển game lựa chọn Unity3D để phát triển bởi khả  
năng hỗ trợ đa nền tảng và sự mạnh mẽ tiện dụng của Unity3D.  
Đến với Unity, các bạn sẽ không cần phải băng khoăn về các vấn đề xử lý, các khái  
niệm đồ hoạ phức tạp... tất cả đều trở nên dễ dàng và nhanh chóng với Unity.  
Một số game được phát triển trên Unity như AngryBird, Elegy of War,…  
1.3.2.Các thành phần trong Unity  
- Assets: Assets là tài nguyên xây dựng nên một dự án trên Unity. Những tài  
nguyên có thể là hình ảnh, âm thanh, mô hình 3D, chất liệu (material), texture, …  
hoặc cả một project hoàn chỉnh.  
Các asset do chính những nhà phát triển game tạo ra và có thể được download miễn  
phí hoặc trả phí trên Unity Asset Store. Đây là một trong những tính năng rất hay của  
12  
     
Unity. Các asset này sẽ giúp giảm thiểu rất nhiều thời gian cho việc thiết kế và lập  
trình game.  
- Scenes: là một cảnh chơi (hoặc một phân đoạn) là những màn chơi riêng biệt,  
một khu vực trong game hoặc thành phần có trong nội dung của trò chơi (các menu).  
Các thành phần này được gọi là Scene. Bằng cách tạo ra nhiều Scenes, chúng ta có thể  
phân phối thời gian và tối ưu tài nguyên, kiểm tra các phân đoạn trong game một cách  
độc lập.  
- Game Objects: Khi Asset được sử dụng trong các Scene, Unity định nghĩa đó  
là Game Object. Đây là một thuật ngữ thông dụng, đặc biệt trong mảng lập trình. Tất  
cả các Game Object đều chứa ít nhất một thành phần cơ bản là Transform, lưu trữ  
thông tin về vị trí, góc xoay và tỉ lệ của Game Object. Thành phần Transform có thể  
được tuỳ biến và chỉnh sửa trong quá trình lập trình.  
- Components: Components là các thành phần trong game, bổ sung tính năng  
cho các Game Object. Mỗi Component có chức năng riêng biệt. Đa phần các  
Component phụ thuộc vào Transform, vì nó lưu trữ các thông số cơ bản của Game  
Object. Bản chất của Game Object là không có gì cả, các đặc tính và khả năng của  
Game Object nằm hoàn toàn trong các Component. Do đó chúng ta có thể xây dựng  
nên bất kỳ Game Object nào trong game mà chúng ta có thể tưởng tượng được.  
Hình 1.2.Khung Inspector  
- Scripts: Scripts được Unity xem như một Component. Đây là thành phần thiết  
yếu trong quá trình phát triển game. Bất kỳ một game nào, dù đơn giản nhất đều cần  
13  
 
đến Scripts để tương tác với các thao tác của người chơi, hoặc quản lý các sự kiện để  
thay đổi chiều hướng của game tương ứng với kịch bản game.  
Unity cung cấp cho lập trình viên khả năng viết Script bằng các ngôn ngữ:  
JavaScript, C#. Unity không đòi hỏi lập trình viên phải học cách lập trình trong Unity,  
nhưng trong nhiều tình huống, chúng ta cần sử dụng Script trong mỗi phần của kịch  
bản game.  
Để viết Script, chúng ta có thể làm việc với một trình biên tập Script độc lập  
của Unity, hoặc làm việc trên Mono Developer được tích hợp vào Unity trong những  
phiên bản gần đây. Mono Developer là một IDE khá tốt, cung cấp nhiều chức năng  
tương tự Visual Studio. Mã nguồn viết trên Mono Developer sẽ đươc cập nhật và lưu  
trữ trong dự án trên Unity.  
- Prefabs: Prefabs thực chất là Game Object được lưu trữ lại để tái sử dụng.  
Các Game Object được nhân bản từ một prefab sẽ giống nhau hoàn toàn, ngoại trừ  
thành phần Transform để phân biệt và quản lý được tốt hơn.  
Để tạo ra một prefab, ta đơn giản chỉ cần kéo một Game Object vào cửa sổ Project.  
Hình 1.3.Giao diện Prefabs  
14  
 
CHƯƠNG 2. THIẾT KẾ ỨNG DỤNG GAME  
2.1.Thiết kế game  
Ý tưởng thiết kế game  
Đặc trưng của dòng game mà em đã xây dựng tại 1 thời điểm chỉ có một người  
chơi, trò chơi sẽ có 1 màn hình chơi, người chơi sẽ chọn đúng hoặc sai thông qua hai  
nút tên màn hình game. Nếu người chơi chọn sai đán án thì màn hình GameOver sẽ  
xuất hiên thông báo cho người chơi số điểm. Màn hình sẽ có tính thời gian, vì vậy ta  
phải nhìn nhanh và tính kỹ trước khi ấn chọn nút đáp án đúng để nâng cao điểm số.  
2.1.1.Tạo và cấu hình game 2D  
* Tạo dự án  
- Bật Unity lên, vào menu File/New Project  
Hình 2.1.Tạo project mới  
Chọn loại project là 2D sau đó gõ tên project xong nhấn Create Project. Kết quả như  
sau:  
Hình 2.2.Giao diện First look  
15  
         
* Cấu hình dự án 2D  
Sau khi tạo dự án xong, ở Hierarchy sẽ có một đối tượng là Main Camera.  
Chúng ta cần điều chỉnh kiểu hiển thị Scene là 2D .  
Ở cửa sổ Hierarchy chọn Main Camera. Ở cửa sổ Inspector sẽ hiển thị các thông số  
của camera, ta sẽ chọn lại giá trị Projection hay phép chiếu là phép chiếu vuông  
gócthay cho phép chiếu phối cảnh.  
Hình 2.3.Giao diện Chọn phép chiếu vuông góc  
Tiếp theo, ở cửa sổ Project, ta sẽ tạo sẵn các thư mục để chứa tất cả các tài nguyên có  
sử dụng trong game sau này lần lượt là: Animations, Prefabs, Scripts, Sprites, Sounds,  
Scenes.R-Click vào thư mục Assets ở cửa sổ Project, ta chọn Create, chọn Folder.  
16  
 
Hình 2.4.Giao diện tạo folder  
Kết quả như hình sau:  
Hình 2.5.Giao diện Assets  
2.1.2. Load Back ground  
Game 2D được xây dựng từ nhiều mô hình 2D được đặt lên không gian 2 chiều  
sao cho hài hòa với nhau để tạo thành cảnh vật trong game. Do đó việc nạp và hiển thị  
được mô hình 2D trong game là vô cùng quan trọng.  
Engine Unity hỗ trợ rất nhiều định dạng mô hình 2D, 3D khác nhau như: PNG,  
JPG... khi mô hình được load vào project ta sẽ chuyển mô hình sang mục Prefab để có  
thể tái sử dụng nhiều lần.  
17  
   
Unity có hỗ trợ load mô hình bằng cách kéo thả Prefab vào vị trí bất kỳ trong Scene.  
Tuy nhiên, để linh hoạt hơn thì chúng ta có thể xử lý bằng code.  
Trước tiên, ta tạo ra một file script và gắn nó vào đối tượng Back ground để đoạn  
script có thể thức thi. Trong file script này, ta khai báo để khởi tạo Back ground này  
để có thể đổ màu tự động nên back ground.  
private Camera cam;  
void Awake ()  
{
cam = gameObject.GetComponent<Camera> ();}  
void Start ()  
{
RandomColor ();  
public void RandomColor ()  
}
{
cam.backgroundColor = new Color(Random.value,Random.value, Random.value);}  
2.1.3.Sự kiện thực hiện phép toán  
Một số xử lý cơ bản:  
Phép toán có 3 phần phép toán bên trái, bên phải, toán tử của phép toán. Trong  
file script ta khai báo 3 biến này:  
private int leftNumber; // so ben trai phep toan  
private int rightNumber; // so ben phai phep toan  
private int mathOperator; // toan tu cua phep toan (+,-,*)  
Khi người chơi bắt đầu vào màn hình chơi thì các biến này sẽ tự động hiển thị các số  
một các ngẫu nhiên trong khoảng các số đã giới hạn từ 1 đến 9:  
leftNumber = Random.Range (1, 10); // Random so 1-> 9  
rightNumber = Random .Range (1,10);  
mathOperator = Random.Range(0, 3);//Randomtoán tử 1 trong 3 phéptoán(+,-,*)  
Phần kết quả của phép toán thì ta có 2 biến kết quả: kết quả đúng của phép toán và kết  
quả hiển thị ra ngoài màn hình của phép toán:  
private int trueResult; // dan an dung cua phep toan  
private int falseResult; // dan an se hien ra man hinh  
Để thực hiện phép toán ta thực thi trong cấu lệnh như sau:  
switch (mathOperator) {  
// +  
case 0:  
// ket qua dung  
trueResult = leftNumber + rightNumber;  
// ket qua da bi thay doi  
falseResult = trueResult + Random.Range (-2, 3);  
Đối với phép toán trừ và nhân ta làm tương tự như với phép cộng ở trên. Để hiển thị  
phép toán ra ngoài màn hình game, ta sử dụng UI.Text. Trước khi thao tác với UI, ta  
cầm import thư viện như sau:  
18  
 
using UnityEngine.UI;  
resultText.GetComponent <Text > ().text = falseResult.ToString ();  
Hình 2.6.Giao diện Scene game  
2.1.4.Sự kiện kích nút Button  
Trong sự kiện này ta phải gắn cho button sự kiện On Click.Đâu tiên, ta tạo ra  
một file script và gắn nó vào đối tượng để đoạn script có thể thức thi lệnh click:  
public void onTrueButtonClick(){  
// ket qua show ra trung voi dap an dung --> D  
if (trueResult == falseResult) {  
currentTime = 0;  
createMath (); // Tao lai phep toan moi  
}
else {  
// neu tinh sai  
LoseGame();  
}
}
Hình 2.6.Giao diện On Click Button  
19  
   
2.1.5.Điêm số và hiển thị  
Điểm số trong game được sử dụng duy nhất trong Fun Math, do game không hỗ  
trợ các tính năng như Leaderboard (bảng xếp hạng), hay Statistic (bảng thống kê các  
số liệu người chơi đạt được), … nên bạn hoàn toàn có thể lưu trữ điểm số ở  
GameController.cs. Để hiện thực tổng quát, tôi đặt biến lưu trữ điểm số tại lớp:  
public static int currentScore  
Ta thấy, với mỗi button đều có hai trường hợp xảy ra. Nếu currentScore được cập nhật  
trực tiếp ở mỗi button.Nếu để ý, bạn sẽ thấy với mỗi trường hợp trả lời đúng,  
hàm createMath sẽ được gọi để tạo thử thách tiếp theo, bất kể là với phím hay button  
nào. Do đó, tôi thêm đoạn code xử lý currentScore vào hàm như sau  
currentScore += 1  
Trong trường hợp chọn sai kết quả trò chơi kết thúc điểm số trò chơi sẽ được cập nhật  
lại trong một file class lưu trữ GameValues.cs. Điểm số sẽ được so sách với nhau để  
lấy điểm số cao nhất tro trò chơi.  
GameValues.currentScore = currentScore;  
int highScore = PlayerPrefs.GetInt ("HIGH_SCORE", 0);  
if (currentScore > highScore) {  
PlayerPrefs.SetInt ("HIGH_SCORE", currentScore);  
2.1.6.Thời gian trong game  
Progress Timer trong game được biểu diễn dưới dạng Panle (cả màn hình là một thanh  
thời gian). Khoảng thời gian đã trôi qua của một level được thể hiện bằng tỉ lệ phần  
màn hình bị mờ đi.  
Hình 2.7.Giao diện thanh time  
Đồng bộ Progress Timer với thời gian thực của game  
20  
     
Tải về để xem bản đầy đủ
doc 30 trang yennguyen 24580 Free
Bạn đang xem 20 trang mẫu của tài liệu "Báo cáo Lập trình hệ thống nhúng - Đề tài: Xây dựng ứng dụng Game Fun Math trên Android", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docbao_cao_lap_trinh_he_thong_nhung_de_tai_xay_dung_ung_dung_ga.doc