BỘ LAO ĐỘNG THƯƠNG BINH VÀ XÃ HỘI
TRƯỜNG CAO ĐẲNG NGHỀ ISPACE
KHOA : CÔNG NGHỆ THÔNG TIN
NGÀNH: LẬP TRÌNH MOBILE
---------ĐỒ ÁN TỐT NGHIỆP
PHÁ GẠCH
GVHD: LÊ HỒNG KỲ
SVTH : ĐỖ QUANG VINH
-
97510230009
NGUYỄN MINH TRIẾT
-
97510230011
VÕ TẤN ĐẠT
-
99510230118
TP. Hồ Chí Minh, Năm 2015
2
Đồ án tốt nghiệp, Game Breakout
LỜI CẢM ƠN
Trước tiên, em xin được gửi lời cảm ơn đến tất cả quý thầy cô đã tham
giagiảng dạy trong chương trình cao đẳng ngành công nghệ thông tin Trường Cao
Đẳng nghề ISPACE vì đã truyền đạt những kiến thức hữu ích làm cơ sở cho em
thực hiện đồ án.
Em cũng xin chân thành cảm ơn đến thầy Lê Hồng Kỳ, người đã tận tình
hướng dẫn, tạo mọi điều kiện thuận lợi để em hoàn thành tốt đồ án.
Sau cùng em xin gửi lời biết ơn sâu sắc đến gia đình vì đã luôn tạo điều kiện
cho em trong suốt quá trình học tập cũng như thực hiện đồ án.
Do thời gian có hạn và kinh nghiệm chưa nhiều nên đồ án còn nhiều thiếu
sót, rất mong nhận được ý kiến góp ý của quý Thầy/Cô các anh chị và các bạn.
3
Đồ án tốt nghiệp, Game Breakout
TÓM TẮT ĐỒ ÁN
Trò chơi Phá Gạch là 1 thể loại game cổ điển thuộc thể loại game Break-Out
đã được thịnh hành từ lâu với nhiều phiên bản và thể loại khác nhau. Nay nhóm em
đã viết lại và phát triển thêm các chi tiết mới mẻ và thú vị cho game trên hệ điều
hành Android.
Luật chơi rất đơn giản nhưng đòi hỏi sự khéo léo, nhanh nhẹn và độ tập trung
vào game khá cao của người chơi.
Mục tiêu của đồ án này là đúc kết tất cả kiến thức mà nhóm đã được giảng
dạy để xây dựng 1 trò chơi trên thiết bị di động chạy hệ điều hành Android.
4
Đồ án tốt nghiệp, Game Breakout
MỤC LỤC
CHƯƠNG 1 : TỔNG QUAN
1.1 LỊCH SỬ PHÁT TRIỂN5
1.2 GIỚI THIỆU...........................................................................................5
1.2.1 Luật Chơi......................................................................................5
1.2.2 Bố Cục Trò Chơi..........................................................................5
CHƯƠNG 2 : PHÂN TÍCH VÀ THIẾT KẾ
2.1 PHÂN TÍCH.............................................................................................
2.1.1 Cấu Trúc Chương Trình.............................................................6
2.1.2 Nhiệm Vụ Các Lớp......................................................................7
2.2 THIẾT KẾ..............................................................................................8
2.2.1 Giao Diện......................................................................................8
2.2.2 Sơ Đồ Liên Kết.............................................................................9
CHƯƠNG 3 : XÂY DỰNG CHƯƠNG TRÌNH
3.1 CÀI ĐẶT MÔI TRƯỜNG...................................................................10
3.1.1 Giới Thiệu LibGDX...................................................................10
3.1.2 Cài Đặt LibGDX........................................................................11
3.2 VIẾT
XỬ
LÝ
TỪNGLỚP
3.2.1 Lớp Lưu Trữ..............................................................................12
3.2.2 Các LớpGiao Diện......................................................................13
3.2.2.1 Màn Hình Chuyển & Màn Hình Menu Chính.............13
3.2.2.2 Màn Hình Tuy Chọn......................................................15
3.2.2.3Màn Hình Hiển Thị Điểm................................................15
3.2.2.4Màn Hình Hướng Dẫn....................................................16
3.2.2.5Màn Hình Menu Tạm Dừng............................................17
5
Đồ án tốt nghiệp, Game Breakout
3.2.3 Các Lớp Khác.............................................................................18
3.2.3.1Banh.................................................................................18
3.2.3.2Thanh Trượt.....................................................................18
3.2.3.3Gạch.................................................................................19
3.2.3.4Vật Phẩm..........................................................................20
3.2.3.5 Banh Phụ........................................................................21
3.2.4 Các Lớp Sự Kiện .......................................................................22
3.2.4.1Va Chạm...........................................................................22
3.2.4.2Hiệu Ứng..........................................................................26
3.2.4.3Điểm Số............................................................................27
3.2.4.4Nút Bấm Cơ Bản..............................................................28
3.3 KẾT
QUẢ
VÀ
HƯỚNG
PHÁT
TRIỂN29
3.3.1 Kết Quả Đạt Được.........................................................................
3.3.2 Hướng Phát Triển..........................................................................
6
Đồ án tốt nghiệp, Game Breakout
CHƯƠNG 1 : TỔNG QUAN
1.1
LỊCH SỬ PHÁT TRIỂN
Game Breakout được phát triển Atati Incvaf giới thiệu từ năm 1976. Nó
được chế tạo bởi Nolan Bushnell và Steve Bristow, Breakout chịu ảnh hưởng lớn
của game Pong phổ biến được phát hành năm 1972. Trong cuối những năm 70, máy
tính cá nhân chỉ có thể truy cập cho các viện nghiên cứu và chỉ dành cho thí nghiệm
do đó các trò chơi Breakout đầu tiên chỉ phát triển như một trò chơi điện tử.
Nhờ sự bùng nổ xuất hiện, ngay lập tức Breakout đã trở nên nổi tiếng phát
hành hơn 20 trò chơi Breakout. Bản sao của Breakout thực sự đã được phát hành
cho mỗi nền tảng, có thể từ trò giao diện điều khiển máy vào năm 1976 đến PS3 vào
năm 2009.Và trong năm 2007 đã có một sự thay đổi lớn khi Breakout được phát
hành. Breakout là trò chơi đầu tiên được tạo ra cho các điện thoại di động nền tảng
BlackBerry. Breakout đã phá kỷ luật về doanh số và tái thành lập các thể loại phong
cách Breakout. Ngày nay internet phát triển, nhiều trò chơi phong cách Breakout
được tải lên mạng và thành công nhanh chóng của Breakout thúc đẩy sự phát triển
tốt của game này.
1.2 GIỚI THIỆU
1.2.1 Luật Chơi
Người chơi sẽ điều khiển 1 thanh trượt ở phía dưới cửa sổ sang trái hoặc
sang phải để đỡ bóng thay đổi hướng di chuyển phá các viên gạch xuất hiện trong
màn chơi. Nhiệm vụ của người chơi là phải phá vỡ được hết những viên gạch để
chiến thắng.
Người chơi có 3 lượt cơ hội chơi, mỗi lần để bóng qua khỏi thanh trượt hoặc
ăn phải các vật phẩm xấu trong màn chơi thì một lượt chơi sẽ bị mất. Nếu chưa phá
hết gạch mà hết 3 lượt chơi thì thua cuộc và trò chơi kết thúc. Ngược lại phá hết tất
cả số gạch có trong màn chơi thì chiến thắng màn đó.
1.2.2 Bố Cục Trò Chơi
Khi mở trò chơi, người chơi sẽ thấy màn hình chuyển. Game (SplashScreen)
7
Đồ án
tốt nghiệp,
trong khoảng thời gian qui định, sau đó sẽ được chuyển tới màn
hình
Menu.Game Breakout
Trong Menu chính sẽ có các nút bấm chuyển tới các màn hình khác
baogồm:
-Bắt đầu: bắt đầu lượt chơi mới.
-Điểm : xem top 3 điểm cao nhất.
-Thoát: thoát game.
-Tùy chỉnh : bật tắt nhạc nền và các hiệu ứng của game.
-Hướng dẫn : giới thiệu về cách chơi
CHƯƠNG 2 : PHÂN TÍCH VÀ THIẾT KẾ
2.1 PHÂN TÍCH
2.1.1 Cấu Trúc Chương Trình
- Để quản lý các lớp thành phần thực thi những nhiệm vụ khác nhau trong
game ta cần tạo và chia ra các Package riêng biệt. Mỗi Package chứa các
Class xây dựng các đối tượng hay các thành phần chứa những thuộc tính
hoặc chức năng tương tự nhau. Điều này giúp ta dễ dàng truy xuất hay tìm
kiếm,chỉnh sửa các Class game.
- Cấu trúc game cần xây dựng :
Package com.mygdx.objects (chứa các đối tượng trong chương trình)
Class Ball_Main
Class Paddle_Main
8
Đồ án tốt nghiệp, Game Breakout
Class Brick_Main
Class Items
Class Ball_Item
Package com.mygdx.assets (lưu trữ tất cả dữ liệu xuyên suốt chương trình)
Class Assets
Package com.mygdx.event (các sự kiện, trạng thái của đối tượng sẽ xảy ra)
Class Collision,
Class Effect_Item
Class Game_Score
Class SimpleButton
Package com.mygdx. my_break_out (các lớp chủ yếu sử dụng LibGDX để
chạy chương trình)
Class Main_my_break_out
Class GameScreen
Class Game_Render
Package com.mygdx.screen (các màn hình được tạo trong chương trình, có
sự liên kết,chuyển đổi nhau theo sự lựa chọn của người dùng)
Class HelperScreen
Class MenuPause
ClassMenuScreen
Class OptionScreen
Class ScoreScreen
Class SplashScreen
2.1.2 Nhiệm Vụ Các Lớp
Các Class chính trong game có nhiệm vụ:
Gói com.mygdx.objects gồm có:
- Class Ball_Main:khởi tạo các giá trị cho trái bóng, vẽ và thực thi các trạng thái,
hành động mà trái bóng sẽ xảy ra.
- Class Paddle_Main: Khởi tạo các giá trị cho thanh trượt, vẽ và thực thi các trạng
thái, hành động mà thanh trượt sẽ xảy ra.
- Class Brick_Main: Khởi tạo các giá trị cho mảng gạch, vẽ và thực thi các trạng
thái, hành động của từng đối tượng gạch sẽ xảy ra theo cấp độ.
- Class Items: Khởi tạo các giá trị cho vật phẩm, vẽ và thực thi các trạng thái, hành
động mà vật phẩm sẽ xảy ra(nếu có xuất hiện).
- Class Ball_Item: Khởi tạo các giá trị cho trái bóng phụ sinh ra do vật phẩm, vẽ và
thực thi các trạng thái, hành động mà trái bóng phụ sẽ xảy ra(nếu có).
Gói com.mygdx.assets gồm có :
- Class Asset: Lưu các hằng số chung và các trạng thái trong game.
- Class Game_Score: Vẽ và xử lý các thành phần liên quan điểm trong game.
Gói com.mygdx.event gồm có :
9
Đồ án
tốt nghiệp,
Breakout
- Class Colision: Xét và trả về các trạng thái để phát sinh các
hành
động,Game
sự kiện
hay phát sinh đối tượng mới khi xảy ra va chạm giữa các đối tượng trong game như
trái bóng, thanh trượt, gạch, vật phẩm, trái bóng phụ.
- Class Simplebutton: Tạo các nút bấm riêng tùy thích bằng Texture.
- Class Effect_items: Xét và trả về các trạng thái để phát sinh các hành động, sự
kiện hay đối tượng mới khi xảy ra va chạm giữa thanh trượt và các vật phẩm tương
ứng.
Gói com.mygdx.screen gồm có :
- Class SplashScreen: Màn hình chuyển vào game.
- Class MenuScreen: Màn hình menu chính.
- Class OptionScreen: Màn hình tùy chỉnh như âm thanh, hiệu ứng.
- Class ScoreScreen: Màn hình xem điểm.
- Class HelperScreen: Màn hình hướng dẫn cách chơi game.
- Class MenuPause: Màn hình menu khi đang chơi game.
Gói com.mygdx.my_break_out gồm có :
- Class Main_my_break_out: Là lớp đầu tiên thừa kế Game và lớp quan trọng nhất
được gọi để chạy game.
- Class GameSceen: Là lớp quan trọng không kém lớp Main_my_break_out thừa kế
các chức năng và thuộc tính được xây dựng sẵn trong LibGDX để thực hiện mọi sự
thay đổi trong game.
- Class Game_render: Vẽ tất cả mọi thứ trong game theo từng đối tượng, trạng thái,
hành động, sự kiện xảy ra tại thời điểm đó.
2.2 THIẾT KẾ
2.2.1 Giao Diện
- Các giao diện màn hình trong game được chứa trong gói com.mygdx.screen
- Mỗi giao diện như đã phân tích ở trên thì có một chức năng riêng và các giao
diên này có sự liện kết chặt chẽ để người chơi có thể chuyển từ màn hình này sang
màn hình khác với từng loại chức năng theo nhu cầu của người chơi.
10
Đồ án tốt nghiệp, Game Breakout
Hình 2.1 Các lớp giao diện màn hình trong Game
2.2.2 Sơ Đồ Liên Kết
11
Đồ án của
tốt nghiệp,
Game
Breakout
- Các giao diện màn hình liên kết với nhau và tùy theo lựa chọn
người
chơi
sẽ
hiển thị ra hoặc tắt đi.Có thể xem như life_cycle của game.
Hình 2.2 Sơ đồ liên kết giữa các màn hình
CHƯƠNG 3 : XÂY DỰNG CHƯƠNG TRÌNH
3.1 CÀI ĐẶT MÔI TRƯỜNG
3.1.1 Giới Thiệu LibGDX
- LibGDX là một FrameWork được phát triển trên nền OpenGL và được sử dụng
để phát triển các ứng dụng game và đồ họa cho Desktop, Android, iOS, HTML5.
-Một số ưu điểm của LibGDX như :
+ Đa nền tảng : Chúng ta chỉ cần viết code một lần nhưng có thể chạy trên được
nhiều nền tảng khác nhau.
12
Đồ LibGDX
án tốt nghiệp,
Breakout
+ Hiệu năng: Hiệu năng của LibGDX thực sự rất ấn tượng do
sửGame
dụng
cả
Java và mã nguồn C để tạo nên ứng dụng.
+ Mã nguồn: Mã nguồn mở với thiết kế rất rõ ràng và phù hợp với việc phát
triển ứng dụng cho di động. LibGDX cho phép người lập trình khả năng sử dụng
các API từ các lớp thấp đến cao, tùy theo yêu cầu của người sử dụng.
3.1.2 Cài Đặt LibGDX
Bước 1: Tải về file .jar cài đặt LibGDX mới nhất ở đường link sau:
/>- Sau khi tải xong, tìm file jar có tên là gdx-setup-ui và chạy nó, tiếp theo ta
đặt tên, package, class MainGame, chọn đường dẫn lưu trữ cho project, và đường
dẫn tới thư mục SDK. Các mục còn lại có thể để mặc định.
- Sau đó nhấn vào nút Ganerate để bắt đầu tạo project.
Hình 3.1 Cài đặt LibGDX từ file JAR
Bước 2: Sau khi cài đặt thành công, ta import project mới vào Eclipse.
- Từ Eclipse ta chọn File Import Existing Projects into Workspace
- Sau đó chọn đườngdẫn đến thư mục project của LibGDX mới tải về, rồi bấm
Finish để hoàn thành.
- Trong các Project ta Import vào sẽ có 1 Project chính (Core) và các Project còn
lại là các Project tương ứng với các nền tảng khác nhau. Khi chúng ta viết xử lý thì
sẽ viết xử lý ở Project Core và các Project khác sẽ liên kết đến Project Core này.
Còn phần Resource tức là các hình ảnh, âm thanh… thưởng thì chúng được đặt ở
thư mục Assets của Project Android.
13
Đồ án tốt nghiệp, Game Breakout
Hình 3.2 Import project vào Eclipse
3.2 VIẾT XỬ LÝ CHO TỪNG LỚP
3.2.1 Lớp Lưu Trữ
-
Trước hết ta cần tạo 1 hàm là nơi lưu trữ tất cả dữ liệu mà ta sẽ dùng xuyên
suốt các Package, đặt tên làAssets. Lớp này tạo các biến kiểu static chứa các thành
phần dữ liệu như hình ảnh, âm thanh hoặc các trạng thái, giá trị được lưu lại sau khi
thoát game như điểm số, âm thanh đang tắt/mở...
-
Lớp Assets này lưu trữ hoặc lấy dữ liệu từ data/assets trong Project android.
Hình 3.3 Dữ liệu được luu trong assets
14
-
tốtcác
nghiệp,
Game
Breakout
Tạo phương thức void stactic Load(), khởi tạo các giá Đồ
trị án
của
thành
phần
dữ liệu mà ta xác định sẽ dùng trong game. Để lấy dữ liệu ta có câu lệnh như sau.
vd: lấy 1 tấm hình đã được lưu trong thư mục assets trước đó.
Hình 3.4 Phương thức khởi tạo các giá trị lấy lên từ assets
-
Thông qua đó ta sẽ truy xuất dữ liệu dễ dàng từ bất cứ nơi nào bằng cú pháp
Assets.Ten_Thành_Phần.
Hìn
h 3.5 Sử dụng các giá trị lưu trong Assets
3.2.2 Các lớp tạo giao diện
- Các Screen được tạo đều implements từ của LibGDX và có tính chất như nhau.
Ta chuyển đổi qua lại giữa các screen này bằng câu lệnh :
Game.setScreen(new name_ScreenClass()):
hoặc
((Game)Gdx.app.getApplicationListener()).setScreen(new GameScreen());
3.2.2.1 Màn hình mở đầu và Màn hình Menu
- SplashScreen là màn hình mỗi khi bắt đầu 1 ứng dụng hay game dùng để trang
trí làm đẹp cho ứng dụng hoặc quảng cáo thông tin về ứng dụng hay game đó. Có
thể tạo hoặc bỏ qua cũng không sao.
- Tiếp đến là tạo menu trước khi vào chơi game. Ta tạo lớp MenuScreen và cũng
cho implements lớp Screen
- Ở MenuScreen, ta có thể vẽ các nút bấm chuyển game bằng nhiều cách. Ở đây
ta sẽ vẽ các nút này bằng Skin, ta load file.json đã có từ dữ liệu bằng lệnh
skin = new Skin(Gdx.files.internal("menuSkin.json") ,
new TextureAtlas("atlas.pack"));
-Sau đó khởi tạo các nút bấm và add vào Table, rồi add Table vào Stage trong
hàm show(). Gọi phương thức Stage.draw() trong render() để vẽ các nút.
15
Đồ án tốt nghiệp, Game Breakout
Hình 3.6 Phương thức tạo các nút bấm bằng file JSON
Hình 3.7 SplashScreen chuyển sang MenuScreen
- Trong màn hình Menu ta bắt sự kiện click_listener cho các nút và sử dụng
phương thức sau để chuyển đến màn hình tương ứng.
((Game)Gdx.app.getApplicationListener()).setScreen(new“name_classScreen”)
- Đồng thời ở màn hình Menu, ta tạo một phương thức luôn kiểm tra trạng thái
ban đầu của âm thanh trong game đang tắt hay mở, phương thức này được gọi trong
render().
Hình 3.8 Hàm kiểm tra trạng thái âm thanh lúc đầu
3.2.2.2 Màn hình tuy chọn (OptionScreen)
- OptionScreen là màn hình dùng để bật tắt âm thanh và các hiệu ứng của game.
Ở lớp này ta cài đặt Screen và GestureListener.
16
Đồ án
tốt nghiệp, Game Breakout
- Trong lớp OptionScreen ta vẽ các nút bật tắt âm thanh, hiệu
ứng
- Tạo hàm kiểm tra xác định tọa độ lúc người dùng chạm vào màn hình trong
phương thức tap(). Nếu trùng với tọa độ nút bấm thì thay đổi các trạng thái âm
thanh hoặc hiệu ứng bật/tắt.
Hình 3.9 Hàm thay đổi các giá trị trạng thái như tắt/mở âm thanh
Hình 3.10 Màn hình cài đặt
3.2.2.3 Màn hình hiển thị điểm (ScoreScreen)
- ScoreScreen là màn hình để hiển thị ba điểm cao nhất của người chơi.
- Trong lớp này ta vẽ lên 3 điểm số cao nhất của game dựa vào các phương
thức getScore_first(),getScore_second() và getScore_third() trong lớp Asset()
17
Đồ án tốt nghiệp, Game Breakout
Hình 3.11 Hàm hiển thị ba điểm cao nhất theo thứ tự giảm dần
Hình 3.12 Màn hình xem điểm
3.2.2.4 Màn hình hướng dẫn (HelperScreen)
- Màn hình hướng dẫn là màn hình giới thiệu tổng quan về cách thức mà chương
trình thực hiện. Cụ thể ở đây sẽ giới thiệu cho ta biết về các thành phần
trong game, cách chơi game và các luật lệ trong game.
Hình 3.13 Màn hình hướng dẫn
3.2.2.5 Màn hình menu tạm dừng
18
án người
tốt nghiệp,
Game
Breakout
- Màn hình menu Tạm Dừng xuất hiện khi đang chơi gameĐồmà
chơi
bấm
vào nút tạm dừng trên góc màn hình.
- Màn hình menu Tạm Dừng chứa các thành phần tương tự như màn hình cài đặt.
Gồm nút về Menu Chính, nút Tiếp Tục, nút tắt mở âm thanh…
Hình 3.14 Màn hình khi đang chơi và lúc bấm tạm dừng
- Màn hình menu Tạm Dừng được cài đặt Screen và GestureListener.
- Các nút trên menu Tạm Dừng xử lý các trạng thái tương tự màn hình tuy chọn.
Có nhiều cách khác nhau để tạo các nút.
- Ở đây ta sẽ tạo các nút bấm từ lớp simple_button tự xây dựng (kể cả nút tạm
dừng trên góc phải màn hình để hiện hoặc đóng menu Tạm Dừng).
- Ta tạo hàm kiểm tra xác định tọa độ lúc người dùng chạm vào màn hình trong
phương thức tap(). Nếu trùng với tọa độ nút bấm thì thay đổi các trạng thái âm
thanh hoặc hiệu ứng bật/tắt.
- Đồng thời, ta cũng xử lý trạng thái của các đối tượng đang di chuyển trên màn
hình chơi game lúc này theo nút Tạm Dừng. Nếu trạng thái nút Tạm Dừng là true
thì trạng thái Dừng qui định trong mỗi đối tượng cũng xét theo true,và ngược lại.
- Sau đó gọi lại các hàm cập nhật trạng thái, hình ảnh của âm thanh hoặc hiệu
ứng trong render().
19
Đồ án tốt nghiệp, Game Breakout
Hình 3.15 Hàm hiển thị menu tạm dừng khi đang chơi game
3.2.3 Các lớp khác
3.2.3.1 Lớp Banh :
- Tạo hàm vẽ Trái Banh có tọa độ (x,y) kích thước (w,h) và tốc độ speedX,
speedY.
public Ball_Main(Vector2 pos,Vector2 Siz,speedX,speedY);
- Sau khi vẽ xong ta cần tạo phương thức xác định khung bao quanh Trái Banh để
kiểm tra va chạm giữa Trái Banh với các đối tượng khác.
setbound_circle = new Circle(position.x+size.x/2,position.y+size.x/2,r);
- Tạo các hàm cập nhật thay đổi vị trí,kích cỡ, hiệu ứng, tốc độ di chuyển và hướng
di chuyển của Trái Banh khi xảy ra các sự kiện tương ứng. Vẽ lại Trái Banh sau khi
gọi các hàm cập nhật này.
Hình 3.16 Hàm vẽ trái banh
3.2.3.2 Lớp Thanh Trượt
-Tạo hàm vẽ thanh trượt có tọa độ(x, y) kích thước(w, h).
public Paddle_Main(Vector2 pos,Vector2 Size)
- Sau khi vẽ xong ta cần tạo phương thức xác định khung bao quanh thanh trươt để
có thể kiểm tra sự chạm giữa thanh trượt với các đối tượng khác.
setbound = new Rectangle(position.x,position.y,size.x,size.y);
20
Đồ án tốt nghiệp, Game Breakout
- Tạo các hàm cập nhật thay đổi vị trí, kích cỡ, hiệu ứng của thanh trượt khixảy ra
các sự kiện tương ứng. Vẽ lại thanh trượt sau khi gọi các hàm này.
Hình 3.17 Hàm vẽ thanh trượt
3.2.3.3 Lớp Gạch
- Hàm khởi tạo và vẽ 1 đối tượng gạch tương tự như các hàm của đối tượngbanh,
thanh trượt và vật phẩm, với các tham số vị trí (x,y) kich thước (w,h) và tham số
cấp độ để vẽ các đối tượng theo từng cấp độ khác nhau. Tạo hàm xác đĩnh khung
bao tương tự các đối tượng khác.
public Brick_Main(Vector2 pos,Vector2 Size,int type)
setbound = new Rectangle(position.x,position.y,size.x,size.y);
- Tạo hàm khởi tạo mảng gạch với các tham số (số lượng phần tử n, tọa độ x,y
bắt đầu, tọa độ x,y tiếp theo).
//Khoitao map Bricks(n,Xfirst,Xnext,Yfirst,Ynext) w =540 wbrick = 60
init_brick_list(30, 11, 76, h/2,60);
Hình 3.18 Hàm khởi tạo giá trị cho mảng gạch
21
Đồ ántatốtdùng
nghiệp,
Game Breakout
- Tạo hàm vẽ mảng gạch đã khởi tạo giá trị trước đó. Ở đây,
array_list
quản lý tất cả đối tượng gạch được tạo ra. Và muốn truy xuất hoặc xóa phần tử được
chỉ định nào đó ta dùng Iterrator để truy xuất trong mảng.
Hình 3.19 Phương thức vẽ mảng gạch đã khởi tạo
3.2.3.4 Lớp Vật Phẩm
- Hàm khởi tạo vật phẩm với các tham số tọa độ (x,y) kích thước (w,h) và
cấp độ được random theo cấp độ của gạch.
public Items(Vector2 pos,Vector2 size,int level_brick)
- Vật phẩm xuất hiện sau khi xảy ra va chạm giữa banh và các viên gạch.
- Để game tồn tại yếu tố may rủi, tạo hàm xuất hiện các vật phẩm theo tỉ lệ hên
xui từ 1 biến số random().
- Vd: cho random(5) và qui định số 0 thì được xuất hiện vật phẩm, tỉ lệ xuất hiện
sẽ là 1/6. Tương tự random(9) tỉ lệ xuất hiện là 1/10.
- Đồng thời qui định cấp độ của các vật phẩm tương ứng với cấp độ của viên
gạch va chạm. Nếu cấp độ càng cao, vật phẩm càng hữu dụng nhưng tỉ lệ xuất hiện
thấp hơn, và ngược lại.
Hình 3.20 Hàm khởi tạo giá trị cho vật phẩm
22
tốt nghiệp,
Breakout
- Sau đó tạo hàm vẽ từng phần tử trong mảng gạch đó (nếuĐồ
cóánxuất
hiện).Game
Với
các cấp độ khác nhau sẽ cho ta các trạng thái thay đổi hiệu ứng khác nhau.
Hình 3.21 Hàm khởi tạo mảng chứa vật phẩm xuất hiện
3.2.3.5 Lớp Banh Phụ
- Những quả banh phụ được sinh ra từ vật phẩm.Tương tự các lớp đối tượng
khác, ta xây dựng hàm khởi tạo giá trị cho banh vật phẩm với các tham số tọa
độ(x,y) kích cỡ(w,h) và tốc độ_X, tốc độ_Y.
- Tạo hàm xác định khung bao đối tượng để xử lý va chạm.
Hình 3.22 Hàm khởi tạo giá trị cho banh phụ
- Ở đây ta không dùng lại lớp vẽ trái banh đầu tiên là do tính chất game với nhiều
lý do khác nhau như:
+ Mục tiêu của game thắng hay thua xác định ở trái banh chính, banh phụ chỉ hỗ
trợ điểm số và phá gạch.
+ Lớp banh chính ta khởi tạo và thiết lập giá trị tốc độ di chuyển cho nó cố định
theo 1 số trường hợp.Còn banh phụ là 1 lớp actor để tạo 1 mảng banh vật phẩm xuất
hiện theo tùy theo sự kiện và có tốc độ cũng như hướng di chuyển là random(). Vì
thế ta tách riêng ra để xử lý theo một arrayList banh phụ được sinh ra.
23
án tốtthì
nghiệp,
Game
- Nếu người chơi ăn được vật phẩm X3 có tỉ lệ xuất hiện làĐồ1/10
sẽ sinh
raBreakout
thêm 3 trái banh di chuyển với tốc độ random().
- Những trái banh phụ này sau đó cũng được xử lý va chạm với các đối tượng
khác để thay đổi hướng di chuyển tương tự trái banh chính.
H
ình 3.23 Hàm khởi tạo giá trị “n” trái banh phụ được sinh ra.
3.2.4 Các lớp xử lý sự kiện
3.2.4.1 Va Chạm
-Để chuyển động của các đối tượng game thật và đa dạng, ta xét các tình huống va
chạm giữa các đối tượng với nhau chuẩn xác tại từng góc, cạnh cũng như phương,
hướng hoặc tình huống đối tượng đang di chuyển.
3.2.4.1.1 Banh(Banh Phụ) va chạm với Gạch
rx_banh: là tâm của trái banh với tọa độ x = ?
ry_banh: là tâm của trái banh với tọa độ y = ?
speedX_banh: tham số tốc độ di chuyển theo trục hoành của trái banh
speedY_banh: tham số tốc độ di chuyển theo trục tung của trái banh
w_banh: Chiều rộng banh ; h_banh : Chiều cao banh ;
w_gạch : Chiều rộng gạch ; h_gạch : Chiều cao gạch ;
Hướng vào :
Hướng ra :
Phạm vi banh di chuyển
24
Banh di chuyển với x+, y+
Đồ án tốt nghiệp, Game Breakout
TH 1:Nếu rx_banh >= x_gach và ry_banh < y_gach
speedY_banh = - (speedY_banh)
TH 2:Nếu rx_banh <= x_gach và ry_banh < y_gach
speedY_banh = - (speddY_banh) ;
speedX_banh = -(speedX_banh) ;
TH 3: Nếu rx_banh < x_gach và ry_banh > y_gach
speedX_banh = - (speddX_banh)
Banh di chuyển với x+,yTH 1: Nếu rx_banh >= x_gach và ry_banh > y_gach+h_gach
speedY_banh = (speddY_banh)
TH 2: Nếu rx_banh < x_gach và ry_banh >= y_gach+h_gạch
speedY_banh = (speddY_banh) ;
speedX_banh = -(speedX_banh) ;
25
Đồ án tốt nghiệp, Game Breakout
TH 3: Nếu rx_banh < x_gach và ry_banh < y_gach +h_gạch
speedX_banh = - (speddX_banh)
speedY_banh = - (speddY_banh) ;
Banh di chuyển với x-,yTH 1: Nếu rx_banh <= x_gach+w_gạch và ry_banh > y_gach+h_gach
speedY_banh = (speddY_banh)
TH 2: Nếu rx_banh > x_gach và ry_banh >= y_gach+h_gạch
speedY_banh = (speddY_banh) ;
speedX_banh = (speedX_banh) ;
TH 3: Nếu rx_banh > x_gach+w_gạch và ry_banh < y_gach+h_gach
speedX_banh = (speddX_banh)
speedY_banh = - (speddY_banh) ;