Vì vậy, em muốn lùi lại một bước dé nghiên cứu về cách xây dựng và hoạt động chung của nhiều framework và cách một phan mềm có thé triển khai trên nhiều nên tảng khác nhau thông qua fram
Trang 1\
i
HQC VIEN CONG NGHE BUU CHINH VIEN THONG
KHOA CONG NGHE THONG TIN
Đồ án tốt nghiệp dai học
Đề tài: Nghiên cứu xây dựng game đa nền tảng
trên Monogame engine
Giảng viên hướng dẫn : TS Đỗ Thị Liên
Sinh viên thực hiện : Bùi Đăng Quang
Mã sinh viên : BI9DCCNS17
Trang 2: Bùi Đăng Quang
=
)
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN
Đồ án tốt nghiệp đại học
Đề tài: Nghiên cứu xây dựng game đa nền tảng
trên Monogame engine
Giảng viên hướng dẫn : TS Đỗ Thị Liên
Sinh viên thực hiện : Bùi Đăng Quang
Mã sinh viên : BI9DCCNS17
Trang 3SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
LỜI CẢM ƠN
Em xin gửi lời cảm ơn đến trường Học Viện Bưu Chính Viễn Thông và cácthầy cô giáo đã luôn nhiệt huyết trong từng bài giảng, và chỉ cho em những ý tưởng
cũng như kiến thức mới và bé ích trong suốt thời gian học tập ở trường Dé án này sẽ
là minh chứng cho quá trình học tập và rèn luyện của em tại trường.
Em đồng thời cũng muốn cảm ơn trực tiếp cô Đỗ Thị Liên đã hướng dẫn tận
tình và tạo điều kiện cho em trong thời gian làm đồ án Em xin được chúc cô và gia
cô, bạn bẻ và các bạn sinh viên cùng khóa
Em xin chân thành cảm ơn!
Hà Nội, Tháng 12 Năm 2023
Sinh viên Bùi Đăng Quang
Trang 4SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
NHAN XÉT, ĐÁNH GIÁ, CHO DIEM
(Của giảng viên hướng dẫn)
Đồng ý/ Không đồng ý cho sinh viên bảo vệ trước hội đồng chấm đồ án tốt
nghiệp?
Hà Nội, ngày tháng năm 20
GIẢNG VIÊN HƯỚNG DẪN
(ký và ghi rõ họ tên)
Trang 5SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
NHAN XÉT, ĐÁNH GIÁ, CHO DIEM
(Của giảng viên phản biện)
Đồng ý/ Không đồng ý cho sinh viên bảo vệ trước hội đồng chấm đồ án tốt
nghiệp?
Hà Nội, ngày tháng năm 20
GIẢNG VIÊN PHẢN BIỆN
(ký và ghi rõ họ tên)
Trang 6SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
MỤC LỤC
LỜI CẢM ƠN 2
MỤC LỤC 5DANH MUC CAC BANG 7
DANH MUC CAC HINH ANH 8
MO DAU 9Chương 1: Tổng quan về công nghệ xây dựng 10game đa nền tảng Monogame engine 10
1.1 Khái niệm game đa nền tảng 101.2 Phân loại game đa nền tảng 10
1.3 Ưu điểm và nhược điểm của game đa nền tảng 111.4 Khao sát về các công nghệ hỗ trợ xây dựng game đa nền tang phô biến hiện nay
“Into the Dungeon” 20
2.1 Tién san xuat game “Into the Dungeon” 20
2.2.3 Công nghệ sử dung 32
5
Trang 7SVTH: Bùi Dang Quang
3.1.2.6 Module đổi âm thanh
3.2.1.4 Người chơi hoàn lại lượt đi
3.2.1.5 Người chơi thay đổi âm thanh
3.2.1.6 Người chơi thay déi độ khó
3.2.2 Biểu đồ lớp pha thiết kế3.2.3 Biéu đồ gói
3.2.4 Biểu đồ triển khai hệ thống3.3 Kết luận chương và hướng phát triển
Phụ lục 1: Các kỹ thuật phát triển game
đa nền tảng trên Monogame engine
Phụ lục 2: Cài đặt và triển khai
Tài liệu tham khảo
Đồ án tốt nghiệp
32 33
33
33 34 34 34 35 35 36 36
37
37 30 40 40
40
4
42 43
44
45
45 47
47 48
49
49 55
59
Trang 8SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
DANH MỤC CÁC BANG
Bang 1.1 So sánh giữa các framework 11
Bang 1.2 Thông tin từng nên tang của Monogame 17Bảng 3.1 Kịch bản người chơi di chuyển 33
Bảng 3.2 Kịch bản người chơi tắn công 34
Bảng 3.3 Kịch bản người chơi đỡ don 35
Bang 3.4 Kịch ban người chơi hoàn lại lượt di 36
Bang 3.5 Kịch ban thay doi âm thanh 37Bang 3.6 Kịch bản thay đối độ khó 38
Trang 9SVTH: Bùi Dang Quang
DANH MUC CAC HINH ANH
Anh 1.1 Kiến trúc của XNA framework
Anh 1.2 Kiến trúc da nên tang của Monogame
Anh 1.3 Config của thư viện trong Monogame
Anh 2.1 Vòng lặp trong một lượt chơi của hệ thong
Ảnh 2.2 Tương tác giữa các tộc
Anh 2.3 Mô họa tác động của ô lên đối tượng
Anh 2.4 Prototype màn mở dau
Anh 2.5 Prototype màn chơi khả thi
Ảnh 2.6 Prototype tương tác với động vật
Ảnh 2.7 Prototype tương tác khác tộc
Ảnh 2.8 Cấu trúc của dự án trong Visual Studio
Anh 2.9 Cách cài đặt của dự án trong file
Anh 2.10 Cấu trúc dự án
Ảnh 2.11 Vòng lặp chính trong main game engine
Ảnh 3.1 Biểu đồ usecase tổng quát
Ảnh 3.2 Biểu đồ lớp pha phân tích
Ảnh 3.3 Biểu đồ trạng thái
Anh 3.4 Biểu đồ tuân tự của người chơi di chuyển
Anh 3.5 Biéu đồ tuân tự của người chơi tan công
Anh 3.6 Biểu đồ tuần tự của người chơi đỡ đòn
Anh 3.7 Biểu đồ tuần tự của người chơi hoàn lại lượt đi
Anh 3.8 Biểu đồ tuần tự của thay đổi âm thanh
Anh 3.9 Biểu đồ tuần tự của thay đổi độ khó
Anh 3.10 Biểu đô lớp pha thiết kế
Ảnh 3.11 Biểu đồ gói
Anh 3.12 Biểu do triển khai
Đồ án tốt nghiệp
14 15 16
22 22
23 23 24 25
25 26 28 28
29
33
37 37
38 39 40 4I 42 43
45 45
46
Trang 10SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
MƠ ĐAU
Ngày nay, mỗi khi một lập trình viên hoặc một nhà phát triển muốn phát triểnmột hệ thống hoặc hoàn thành một công việc nào đó, họ thường tự hỏi những câu hỏichăng hạn như “công cụ nào sẽ giúp mình tốt nhất” và “công cụ nào giúp ta có thé
triển khai trên nhiều nền tảng” Điều này đặc biệt quan trọng trong thời gian khởi tạo
của một startup, bởi nó chi ra những những vân đề gặp phải của công ty khi công cụ họ
quyết định ngay từ đầu gặp vẫn đề hoặc thiếu sót tính năng do phiên bản
Đặc biệt trong hai câu hỏi này, câu hỏi sau thường ít xảy ra, bởi đa số khi làmvới web thì ta chỉ cần quan tâm tới trình duyệt, và khi lập trình android, ta cũng chỉquan tâm đến nén tang mà ta nhắm tới thư viện các trình duyệt nhắm tới có điểm khácbiệt lớn khi triển khai lên chúng Đối với câu hỏi thứ nhất, khi ta phát triển một hệthong trên một framework có san, ta thường quan sát rằng các API mà framework
cung cấp thường vừa đủ cho ta phát triên lên, nhưng cũng đồng thời phải không quá
hạn chế khả năng của chúng ta trong phát triển lên chúng Do đó, mặc dù các framework (trong cùng loại) đều có thé hoàn thành chung một công việc, một số trong
đó có những ưu điểm, nhược điểm mà những cái còn lại phát triển vượt lên han, viéc
tìm hiểu và xác định các yếu tố này trước khi chon stack công nghệ là yếu tố quan
trọng khi bắt đầu công việc
Do vậy, em thường tự hỏi về cách thức hoạt động của các framework đa nền
tảng, đặc biệt là của các game engine trong việc xuất bản và triển khai game lên nhiều
nền tảng Vì vậy, em muốn lùi lại một bước dé nghiên cứu về cách xây dựng và hoạt
động chung của nhiều framework và cách một phan mềm có thé triển khai trên nhiều
nên tảng khác nhau thông qua framework, do đó em xin được đề xuất ý tưởng “Nghiên
cứu xây dung game da nên tảng trên Monogame engine”
Đồ án này được tổ chức thành ba phần như sauChương 1: Tổng quan về công nghệ xây dựng game đa nền tảngMonogame engine
Chuong 2: Ung dụng xây dung công nghệ Monogame engine cho xây dựng
game đa nên tảng
Chương 3: Phân tích và thiết kế hệ thống
Trang 11SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Chương 1: Tông quan vê công nghệ xây dung
game đa nên tảng Monogame engine
1.1 Khái niệm game đa nền tảng.
Phần mềm đa nên tang là phan mềm máy tính có thé chạy trên nhiều nền tảng
máy tính, thông thường các phần mềm đa nên tảng có các phiên bản riêng biệt cho
từng nền tảng, song cũng có những phần mềm có thể cài đặt không phụ thuộc nền tang
mà chỉ yêu cầu nền tảng đó có thể cài đặt các phần mềm hỗ trợ, chang hạn như biêndịch thành bytecode hoặc có các thư viện chạy chung trên nhiều nên tảng
Trò chơi đa nền tảng (hay game đa nên tang) là phan mềm đa nền tang đồng
thời là trò chơi điện tử, với các nền tảng chủ yếu bao gồm PC (Window/Linux/Mac),
Android, iOS, Xbox, PlayStation, Nintendo và trên trình duyệt web Các nên tảng khác
có thể bao gồm Window Phone, Raspberry Pi, Stadia,
Một số engine đa nền tang cho trò chơi bao gồm: Unity, Unreal Engine,
Pygame, Love2D,
Luu ý rang một thuật ngữ khác liên quan tới đó thường áp dụng cho game đa
nên tảng đó là cross- play, thường ap dụng cho các game online cho phép nhiều người
chơi chung với nhau bat ké nền tảng.
1.2 Phân loại game đa nền tảng
Các trò chơi đa nền tảng, và tổng quát hơn là các phần mềm đa nền tảng được
phân loại thành ba loại chính như sau:
a) Phụ thuộc phần cứng
Các trò chơi được phát triển theo loại này không phụ thuộc vào kiến trúc của
máy tính mà nó sẽ chạy trên đó, cụ thé hơn là thường không phụ thuộc vào hệ
thống mã máy của máy tính Khi đó phần mềm phải phân biệt hệ điều hành
hoặc CPU ma chúng chạy trên Các trò chơi thuộc loại nay thường là game
trong arcade Đến ngày nay, bởi sự tiến bộ của máy tinh, rất ít trò chơi thuộc
loại này.
Các game nổi bật bao gồm những game những năm 1970-1990:
- Sargon là game cờ vua phát hành vào năm 1978 trên các máy tính dùng Z80
CPU, TRS-80, SharpMZ và Nascom
- Dizzy là game phiêu lưu phát hành vào năm 1987 trên Armstrad CPC/ZX
Spectrum va Commodore 64
- Prince of Persia sau khi xuất bản năm 1989 trên hệ Apple 2 tiếp tục được cài ở
trên các hệ điều hành khác (DOS, ) cũng như các máy tính khác (Z80,
GameBoy, )
- Va các dòng game trên arcade và tay cam
b) Phụ thuộc phan mềm
Các trò chơi này hoặc phụ thuộc vào các API mà hệ điều hành hoặc môi trường
tính toán cung cấp hoặc được biên dịch thành các mã mà một môi trường ảo khôngphụ thuộc hệ điều hành xử lý, chăng hạn như biên dịch bytecode bằng Java hoặc làm
10
Trang 12SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
game cho trình duyệt web Các framework đa nền tảng là một ví dụ điển hình, thường
có một lớp trừu tượng hóa các thư viện nền tảng năm dưới và cung cấp các API giaotiếp với chúng mà không cần phải gọi trực tiếp đến các thư viện Hiện nay hầu như tất
cả các game framework đều hướng tới đa nền tảng.
c) Phụ thuộc điện toán đám mây
Các trò chơi này được phát hành trên điện toán đám mây, sau đó người dung
chi cần kết nối với đám mây dé có thé chơi game Khi kết nối, điện toán đám mây sẽ
tự động xử lý đồ họa và logic game, sau đó gửi kết quả render về cho người chơi Cách làm này cho phép người chơi có thé chơi trên bat kỳ máy tinh nào bởi logic game cũng như hình ảnh đã được xử lý sẵn ở bên server Song, bởi vì kết quả render được gửi quả
mạng, điện toán đám mây bị giới hạn bởi dung lượng tải/upload và tốc độ băng thông
của người dùng.
Một số dịch vụ cloud nổi bật cho trò chơi điện tử bao gồm: Stadia (Google), GeForce Now (Nvidia), PlayStation Plus (Sony) và Xbox Cloud Gaming (Microsoft).
1.3 Ưu điểm và nhược điềm của game đa nên tảng
Các ưu/nhược điểm liệt kê dưới đây cũng có thé áp dụng cho phần mềm đa nền
tảng nói chung.
a) Ưu điểm
- Hiệu quả kinh tế
Bởi tính chất tái sử dụng code cũng như hình ảnh, âm thanh, chung một
base nhà phát triển có thé mở rộng cho nhiều nền tảng khác nhau và do đó các
nền tảng đều chia sẻ chi phí chung cho một codebase Bên cạnh đó thời gian
phát triển phát triển logic game nay cũng nam trong cùng một codebase.
- Tang lượng khán gia
Phát hành game đa nên tang đồng thời nghĩa là tiếp cận với nhiều thị
trường hơn, và tương ứng với đó là nhiều người chơi hơn.
- Nhất quan g1ữa các nền tảng
Bởi các engine và framework đều ít nhất cho phép tái sử dụng code rồi
gói đi kèm với sdk của từng nên tảng, các tính năng cũng như logic game có thé chia sẻ chung cho nhiều nên tang.
b) Nhược điểm
- Tăng thời gian phat triển và bảo trì
Với mỗi nên tảng mà game phát hành trên đó, nhà phát triển phải quan tâm tới không chỉ thông tin kỹ thuật của nên tảng mà còn thời gian phát triển
riêng tính năng và bảo trì cho nên tảng đó
- Khong đồng nhất phiên ban/tinh năng
Mặc dù code được chia sẻ cho các nên tảng, các tính năng riêng cho từng
nên tảng va giao diện vẫn được thiết kế và phát triển bằng từng đội ngũ riêng.
Do đó, có thê do sai lệch về thời gian phát triển hoặc trình độ hiệu biết của từng
đội ngũ nền tảng mà hệ thống mất đi tính nhất quán này Nghiễm nhiên là khi
không đồng nhất thì sẽ không có tính thống nhất giữa các chức năng trên mọi
phiên bản Điều này cũng phản ánh độ khó khi phát triển tính năng cross-play
khi nhiều nền tảng hợp lại chơi với nhau.
- Cross-play có thé gây ra tranh cãi giữa các người choi do sự khác biệt về
phần cứng
11
Trang 13SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Trong các game online, đặc biệt là trong các game cho phép đấu người
với người, sự khác biệt phần cứng có thé gây ảnh hưởng đến yếu tô cân bangtrong game Do đó nhà phát triển phải xem xét sự khác biệt về đầu vào và hình
ảnh khi thiết kế game
Lay vi dụ của game Apex Legends (hoặc bat kỳ game góc nhìn thứ
nhất/thứ ba) có tính năng tự động di tâm được cài ở trên mọi nền tảng Trong
trò chơi, khi có chiến dau giữa hai người chơi yếu tô quyết định thường là di
chuyên tâm khả năng theo kịp người còn lại Do người chơi tay cầm khó có thể
sử dụng thành thạo nút joystick dé di tâm vào kẻ địch, bên tay cầm thường có tựđộng di tâm tốt hơn nhiều so với các đầu vào khác và nghiễm nhiên là riêng chobên nền tảng với game tay cam (Xbox, PlayStation) Song đối với những người
sử dụng thành thạo (hoặc ít nhất là quen với di chuyên tay cầm trong game bansúng), bat lợi thé này trở thành ưu thé của người dùng tay cầm bởi khi đó chỉvới một chút điều khiển, tâm của người dùng tay cầm sẽ liên tục bám sát kẻđịch, gây bất lợi thế cho người dùng bàn phím và chuột
1.4 Khảo sát vê các công nghệ ho trợ xây dựng game đa nên tang phô biên hiện nay
Hiện nay hau như tat ca framework cho trò chơi đều hỗ trợ xây dựng game da
nên tảng, song môi công nghệ ho trợ các nên tảng khác nhau cũng như có logic xử ly
đa nên tảng riêng biệt Sau đây là danh sách một sô framework nôi bật:
RPG Maker PC-8801, MSX2,
PC-9801, Super Famicom,
Windows, PlayStation,
Game Boy Color,
PlayStation 2,
Game Boy Advance,
Nintendo DS,
Trang 14SVTH: Bùi Dang Quang
Nintendo Switch
Windows,
macOS, Linux,
UWP, iOS, Android, HTML
va WASM
Windows, macOS, OS X, BeOS, FreeBSD, IRIX, Linux
1OS, Android, Windows, Linux, macOS, NetBSD,
FreeBSD,
OpenBSD,
Solaris, va tat canền tang có hỗ trợ
Android, Playstation, Xbox, Nintendo
Switch
1.5 Công nghệ xây dựng game da nền tang Monogame engine
1.5.1 XNA Framework
Tiền than của Monogame là XNA framework, nó bao gồm một lớp các thư viện
dành riêng cho phát triên game và chạy trên một phiên bản của Common Language
Runtime cũng được tôi ưu riêng cho game, cho phép môi trường thời gian chạy có thê
13
Trang 15SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
nhận biết nên tảng trong quá trình chạy XNA được thiết kế và phát triển sao cho cácnhà phát triển trên nó có thê tập trung tối đa vào logic game thay vì phần cứng và công
nghệ, song bởi tính hạn hẹp của Microsoft lúc đó, XNA chỉ nhắm tới các nền tảng có
hỗ trợ của Microsoft (Windows Phone, Windows, XBOX) XNA ngừng phát triển vào
năm 2013, và mã nguôn gôc không còn mở cho cộng đồng nữa Song van còn một
phiên bản khác tên ENA, đã cài lại XNA với mục đích bảo tồn thư viện.
Về công nghệ, công nghệ XNA đóng gói hầu hết các logic giao tiép cấp thấp
voi phan cứng va ban thân no cũng tự “xử lý” sự khác biệt giữa các nên tang để nhà
phát triển có thể tập trung tối đa thời gian vào phát triển logic game Điểm quan trọng
này cũng được tận dụng bởi các framework khác, chăng hạn libGDX của Java sử dụng
thư viện OpenGL 2.0/3.0 để vẽ và cung cấp trực tiếp các hàm tương ứng với nền tảng cần dùng.
Công nghệ XNA sử dụng mô hình Application Model, mô hình này khác với
nhiêu game framework khác Dé quan sát rõ sự khác biệt, xét hai đoạn code sau:
pygame init() public class Gamel : Game
{
protected SpriteBatch _spriteBatch;
screen = pygame.display.set_mode((760, 760))
pygame.display.set_caption('Game title’) public Game1() {
//Assigning certain parameters
while True: }
mouseInput = None
protected override void Initialize() {
for ev in pygame.event.get(): //Wake up libraries
if ev.type == pygame.QUIT: }
pygame quit()
sys.exit() protected override void LoadContent() {
elif ev.type == pygame.MOUSEBUTTONUP : : //Load from ContentManager
mouseInput = pygame.mouse.get_pos()
//Then begin update-draw loop
#use event to update protected override void Update(GameTime gameTime)
if mouseInput != None: }
print(mouseInput )
protected override void Draw() {
#draw }
//When game close, auto call this function
#custom loop protected override void Unload() {}
if ev.type == pygame.KEYUP: }
#read and handle keyboard events
Anh so sánh mô hình Application Model
Đầu tiên, XNA định nghĩa sẵn vòng lặp Init->Load- ->(Update->Draw), trong
khi các framework khác chang |han nhu pygame dé nhà phát triển tự định nghĩa vòng
lặp của riêng từng game Một số framework chăng hạn như libGDX thực hiện tương tự như XNA.
Thứ hai, XNA cung cấp đọc trực tiếp thay đổi đầu vào của người dùng nhưng
chỉ ở vòng Update Trong khi các framework cung cấp đọc gián tiếp nhưng linh động
hơn băng cách tạo sự kiện khi có thay đôi đầu vào
Thứ ba, XNA giấu sẵn nhiều tính năng quan trọng bằng cách cho phép kế thừa
từ các lớp trong XNA nhưng cho phép thay đổi chúng sau khi được gọi, chăng hạn, ở
đây lớp Game trong XNA đã tự động lo sẵn một số quá trình dang sau nó như khởi
14
Trang 16SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
động thư viện, đọc đầu vào, Ở đây lớp Gamel của chúng ta được kết thừa từ lớp
Game của XNA Trong khi như của pygame, ta không thé kế thừa từ lớp pygame
Bên cạnh đó XNA còn sử dụng công nghệ ContentPipeline dé tối ưu hóa việc
nén hình ảnh và âm thanh cho từng nên tản ơ,
our Content
araphics
Platform
Anh 1.1 Kiến trúc của XNA framework
Như trong ảnh trên, XNA ban đầu chỉ sử dung các thư viện của Windows, do
đó XNA chỉ nhăm tới các nền tảng của Windows (Xbox 360, Windows và Windows Phone) Sau khi Microsoft dừng phát triển và bảo trì trong năm 2013, XNA được cộng
đồng mở rộng thêm cho các nền tảng khác thành các framework sau:
- Monogame: bản port mở rộng XNA cho nền tảng Linux, Mac, 1OS, Android và
Playstation
- FNA: là ban cài lại của thư viện XNA với mục đích bảo tồn thư viện gốc
- ANX: là ban cài lai của thư viện XNA sử dung stack SharpDX, với hỗ trợ thêm
cho Linux, Mac va PlayStation Vita
1.5.2 Monogame framework
Nhu đã nói trên, ban than Monogame cũng là ban cai lại cua XNA, bởi trước
đó, nó được lay từ hai dự án riêng: Silversprite là bản cai lại chạy trên frameworkSilverlight và Mono.XNA là bản cài lại của XNA trên framework đa nền tang Mono
sử dụng OpenGL thay vì DirectX Sau này XNA Touch được phát triển dựa trên hai
dự án đó với bổ sung thêm hỗ trợ cho Android/iOS Đến năm 2011, XNA Touch đượcđổi tên thành Monogame
Về kiến trúc, về căn bản vì Monogame cai lại các API của XNA, nên kiến trúc
của Monogame cũng giống với XNA, giữ nguyên mô hình Application Model lẫn
ContentPipeline v, chỉ thêm các thư viện OpenTK với Xamarin và 1 số sdk khác để
phục vụ cho các nên tang khác
15
Trang 17SVTH: Bùi Dang Quang Đồ án tốt nghiệp
Anh 1.2 Kiến trúc da nên tang của Monogame
Về kỹ thuật xử lý đa nền tảng, Monogame cũng như XNA lợi dụng tính chất
đặc biệt của C# trong cách câu trúc dự án và cách biên dịch dự án đê có thê nhăm tới một nên tảng nào đó.
Để tìm hiểu, lấy ví dụ khi ta muốn tạo game cho nền tảng PC trên
Windows/Linux/Mac Lúc tạo dự án nên tảng PC trên Visual Studio, thực chât cái ta đang làm đó là thêm
<PackageReference Include="MonoGame.Framework.DesktopGL"
Version="3.8.1.303" />
vào config của dự án Điều nay có nghĩa là dự án ta dang làm sẽ include thư viện
DesktopGL của Monogame, và dự án của ta sẽ được biên dịch sau khi DesktopGL
biên dịch xong Thứ tự này rat quan trọng, bởi vi thực tiên thư viện DesktopGL, hay nói đúng hơn, file csproj của DesktopGL hoạt động như sau:
16
Trang 18SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
<ItemGroup>
<PackageReference Incl "Microsoft NETFramework.ReferenceAssemblies" |
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Dòng <Compile Include= ”<dir> ”/> có nghĩa là biên dịch các file nam trong
<dir>, ngược lại <Compile Remove= ”<dir> ”/> nghĩa là không biên dich nằm trong
<dir> Dòng <None Remove=”<dir>”⁄> đơn thuan nghĩa là không copy file trong
<dir> từ dự án sang dự án mà nó được include khi đang xuất bản
Khi kết hợp này với tính chất lớp riêng phan và tín hiệu tiền xử lý được ké ởbên dưới, ta có thê hiểu cách thực hiện của Monogame như sau: khi một tính năng đặc
biệt cần phải được nhận biết nền tảng, Monogame thường sẽ phân chia lớp của tính
năng đó thành các lớp riêng phần nhỏ hơn, mỗi lớp riêng phần tương ứng với một nền
tang Vi dụ chăng hạn, lớp GraphicsDevice có thé phân tách thành 4 lớp
17
Trang 19SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
GraphicsDevice nhỏ hơn mà mỗi lớp riêng phần đó sẽ nằm trong file nền tảng tương
ứng của nó (thí du,GraphicsDevice cho DesktopGL sẽ nằm trong file
OpenGL.Common.cs trong thư mục Platform chăng hạn) Sau khi biên dịch từ trên xuống, đầu tiên các dòng Compile Remove và None Remove sẽ bỏ biên dịch các file có trong các thư mục nhắc tới, Tôi sau đó các dòng Compile Include sẽ được dùng để biên
dịch các file có nhắm tới nền tảng đang xét Kết quả nghiễm nhiên sau quá trình đó là
chỉ có các file phục vụ cho nền tảng nhắm tới mới được biên dịch Đôi với các file
hướng đến nhiều nền tảng trong thư viện thì sẽ có các tín hiệu tiền xử lý trong các file
đó.
Phương thức hoạt động này được áp dụng tương ứng với từng nền tảng hay từng thư viện nhắm tới và là lời giải thích vì sao Monogame khi biên địch cho một nền
tảng nhất định có thể “nhận biết và gọi đúng thư viện” khi chạy.
Hiện tại, Monogame hồ trợ xử lý các nên tảng như sau:
WindowsDX Windows 8.1 trở lên Su dung WinForms cho
window, DirectX cho dé
hoa va XAudio cho 4m
thanh, yéu cau ban
DirectX June 2010 cho ca xay va chay game
DesktopGL Windows, macOS, Linux Sử dung SDL cho
window, OpenGL cho dé
hoa va OpenAL-soft cho
am thanh
WindowsUniversal | Windows 10, Xbox (UWP) Chay trén nén UWP, sir
dụng thư viện tương tự với
iOS, iPadOS Sử dung thư viện
Xamarin.ioS, OpenGL
cho đồ họa và
OpenAL-soft cho âm thanh
Trang 20SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Bang 1.2 Thông tin từng nên tảng của Monogame
Riêng đối với PlayStation, Nintendo và Xbox (không UWP), nhà phát triển phảitiếp cận với bên nhà phát hành của tay cầm tương ứng đề có thể nhận tài liệu cũng như
sdk phát triển riêng cho nền tảng
1.6 Kết luận chương 1
Trong chương này, chúng ta năm được
- Khai niệm và phân loại game (phần mềm) đa nền tảng
- _ Ưu và nhược điểm khi phát trién game da nén tang
- Khao sát các công nghệ đa nên tảng tương tự với Monogame
- So lược lich sử phát triển của XNA, Monogame và kỹ thuật xử lý đa nền tảng
của chúng
- Thong tin nền tang của Monogame
19
Trang 21SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Chương 2: Ứng dụng công nghệ Monogame engine cho
xây dung game đa nên tang “Into the Dungeon”
Tương tự với các framework đa nên tảng khác, Monogame chỉ cung cấp các
API giao tiếp VỚI phần cứng như vẽ lên màn hình, đọc gõ phím, một bộ thư nhỏ viện
hỗ trợ phát triển và một khung nhỏ làm vòng lặp chính Các nhà phát triển vẫn cầnphải tự phát triển riêng cho mình một game engine xây dựng lên trên đó Bên cạnh đó,
ta cũng cần tìm hiểu rõ hơn quá trình làm game từ bước tiền sản xuất để có thé hiểu
được logic game Do đó, để làm ví dụ về game đa nên tang, cũng như khám phá kiến
trúc của một game engine, ta sẽ sử dung game “Into the Dungeon” dé nghiên cứu cách
xây dựng một game đa nên tảng.
2.1 Tiền sản xuất game “Into the Dungeon”
2.1.1 Ý tưởng
Trò chơi được xây dựng dựa trên ý tưởng của Into the Breach về một bàn cờ có
các quân cờ là nhân vật được điều khiến bởi người chơi đối đầu với các quân cờ của kẻ
địch Nhiệm vụ của kẻ địch là hoặc chiếm hoặc phá các mục tiêu quan trọng, hoặc tấn
công trực tiếp người chơi Bên cạnh đó, trong bàn cờ này, mỗi ô của bàn cờ có hiệu ứng hoặc môi trường đặc biệt ảnh hưởng đên quân cờ.
POWER a ] GAID w
(DER
End Turn 2 onus db jectives
Anh mét van choi trong Into the Breach
Trong ảnh trên, các con bọ là địch (trong game gọi là Vex) tấn công các mục tiêu bao gồm các mech điều khiến bởi người chơi Các 6 thành phố trên ban cờ là mục tiêu quan trong, 6 nước được dùng dé ngăn chặn hành động của đối tượng đứng trên
20
Trang 22SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
đó (nhưng không ngăn chặn di chuyền), còn các ô núi đóng vai trò cản trở và tạo địa
hình.
Trò chơi sẽ được xây dựng dựa trên cách thức hoạt động trên nhưng hợp với
phong thái đồ họa cũ của dòng game Rogue năm 1980 và bên cạnh đó thêm tương tác
giữa các đối tượng trong hệ thông
về gameplay, mỗi lần chơi là một hệ dungeon mới và khi kết hợp với hệ thong
mô phỏng trong game thì thành một trải nghiệm mới Hãy sử dụng mọi thứ có thé từmôi trường đến kẻ địch để tạo lợi thế Tiêu diệt con quái ngủ trong lâu đài và giải cứu
ngôi làng hỏi thảm họa diệt vong!
2.1.2 Concept
Dựa trên ý tưởng ở trên, trò chơi “Into the dungeon” có concept như sau:
Tên: Into the Dungeon
Thể loại: game chiến thuật theo lượt (Tactical RPG)
Bối cảnh: Trò chơi được đặt dưới thế giới giả tưởng thông thường, với làng, cánh
đồng và ham mục quen thuộc của dungeon-crawler
Nhân vật: Người chơi sẽ điều khiển một vị anh hùng không tên phiêu lưu qua các địađiểm từ đồng cỏ, làng cho đến lâu đài rồi ham ngục, chủ yếu trong trò choi là các kẻ
địch, có thể hoặc không có nhân vật phụ nào khác
Góc nhìn: Góc nhìn từ trên xuống (top-down)
Phương thức chơi: Trò chơi được chơi dưới dạng chiến thuật theo lượt, trong đó
người chơi va kẻ địch thay lượt di chuyền và tan công lẫn nhau, và chiếm các vị trí ưu
thé nếu có.
Thử thách: Người chơi phải vượt qua nhiều man, áp dụng các kiến thức cũng như các
dụng cụ trên người dé vượt ải
Phong cách đồ họa: Trò chơi được thé hiện dưới phong cách 1-bit, với âm nhạc 8-bit
Nền tảng: Window và Linux
2.1.3 Pitch
Đối tượng nhắm tới: Những người chơi dòng old-school, quen với đòng game
roguelike theo lượt, và đặc biệt là quan tâm tới các game mô phỏng
Thiết kế đồ họa: đồ họa I-bit, giản thé
Tính chất đặc biệt: Tương tác hệ thống giữa các đối tượng trong game phối hợp với
tính năng chơi theo lượt và tính giản thé khi dé dưới dang 6.
So sánh với các game hiện tại: Trò chơi tương tự với Into the Breach, trong đó người
chơi thay vì điều khiển 1 nhóm nhân vật thì chỉ điều khiển một nhân vật, đấu với lại
một hoặc nhiều kẻ địch Trò chơi thêm yếu tổ tương tác giữa các thực thé và tính độc
lập của từng thực thé dé tạo một môi trường linh động và liên tục biến đổi bất ké sựtồn tại của người chơi
Thị trường: Trò choi được tao ra với mục đích cho vui, do đó không có giá tri trong thị trường
Đội ngũ phát triển: Đội ngũ phát triển bao gồm duy nhất một người
21
Trang 23SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
2.1.4 Tài liệu thiết kế game GDD
2.1.4.1 Giới thiệu
Tên trò chơi:
Bởi trò chơi được lay cảm hứng từ trò “Into the breach” về cách di chuyên va
chiến đấu trong màn chơi, do đó trò chơi mới được lấy tên “Into the dungeon”
Concept:
Trong trò chơi, điều khiển nhân vật anh hùng qua các dungeon, khám phá và lợi dụng nhiều tinh chat trong hệ thong dé chiếm lấy lợi thé Bao gồm
- _ Nhiều màn chơi đa dạng
- _ Nhiều thực thé trong game, với tính tương tác đa dạng giữa chúng
- Mỗi lần chơi là một trải nghiệm riêng, với không lần chơi nào giống lần chơi
nào
- _ Nhiều dụng cụ giúp dẫn đến chiến thắng
Thể loại: Turn-based tactics, Old-school, Permadeath, RPG
Đối tượng nhắm tới:
Trò chơi nhắm tới những người quan tâm tới hệ thống trong game, đặc biệt là
những người ưa thích khám phá và xây dựng trong RPG Độ tudi nhăm tới là 13+ với mọi loại giới tính.
Điểm độc nhất:
Trò chơi mở rộng thêm từ Into the breach tính linh động giữa các thực thé trong
môi trường, tức là: kế cả không có sự có mặt của người chơi, các thực thé trong trò
chơi vân sẽ tiếp tục duy trì trạng thái hay nhiệm vụ của mình Bên cạnh đó trò chơi
cũng cé gắng day cao tính linh động bang cách gọi thêm tộc và nhiều hiệu ứng môi trường.
2.1.4.2 Thiết kế sản phẩm
Trải nghiệm người dùng:
- _ Người dùng đóng vai một vị anh hùng trong phong cảnh trung cô ngày xưa, tận
dụng các vũ khí cũng lấy từ thời đó, với các cliche và ý tưởng quen thuộc từ
dòng fantasy bao gồm zombie, skeleton, phủ thủy, lâu đài, V.V
- Tro chơi tận dụng tối đa yếu tố tương tác giữa các thực thé và yếu tố roguelike
trong game, điền hình từ những game như The Binding Of Isaac, Noita, v.v Trong đó người chơi liên tục chơi đi chơi lại nhiều màn, mỗi lần chơi là một trảinghiệm khác nhau giữa một môi trường luôn luôn thay đổi Do đó yếu tô “vui”của trò đến từ tính khám phá, mày mò của người chơi và tính sáng tạo củangười chơi trong vận dụng kiến thức của những lần chơi trước đó dé giải quyếtvân đề trong tay
Âm nhạc và đồ hoạ:
Vi trò chơi theo dong old-school, hình ảnh va âm thanh trong trò chơi cũng sẽ sử dụng
âm nhạc/đồ họa 8-bit hoặc 1-bit thời xưa
- Âm nhạc: Trò choi sử dụng dòng nhạc retro 8-bit trong RPG,
- Đồ họa: Asset duy nhất của trò chơi sẽ thuộc đồ họa 1 bit
Mô tả thế giới:
Lợi nhuận:
22
Trang 24SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Trò chơi sẽ được phát hành miễn phí, được dùng dé đánh giá và làm nền tang
kinh nghiệm cho các trò chơi sau về cả công nghệ lẫn kinh nghiệm khách hàng
Nền tảng, công nghệ và scope:
Trò chơi sử dụng custom engine viết trên Monogame và sẽ được phát hành trênnền tảng PC, cụ thé hơn là Window va Linux Với mục dich dé thăm dò cũng như là
dành riêng cho đồ án, trò chơi sẽ chỉ giới thiệu hai, ba màn chơi cũng như một lượng
giới hạn các thực thể và các dụng cụ trong game
2.1.4.3 Thiết kế hệ thống trong game
Vòng lặp chính:
Trong mỗi lần chơi, người chơi sẽ liên tục chạy qua các man chơi, trong đó
trong moi màn người chơi sẽ chơi theo lượt trong hệ thống, khi đến lượt người chơi,
người chơi sẽ phải lựa chọn vị trí di chuyền tiếp theo cũng như hành động tiếp theo bao gồm đỡ đòn và tấn công Vòng lặp của toàn bộ hệ thống nói chung sẽ được thực
hiên như sau
Anh 2.1 Vòng lặp trong một lượt choi của hệ thongNhiệm vụ và tiến bộ của người chơi:
Nhiệm vụ xuyên suốt trong mỗi màn chơi mà chưa gặp quái trùm (boss) về căn
bản là chạy đến đích, và giải quyết các vấn đề trong con đường đó Con đường đó có
thé bị chặn bởi các kẻ địch đang chặn ngang đường, khi đó người chơi phải vận dụng
những mình có dé giải quyết Trong trường hợp gặp boss, người chơi phải vận dụng
tối đa những gì đã có để hạ boss và kết thúc lần chơi này
Trò chơi có yếu tố permadeath, tức khi người chơi chết, họ sẽ phải chơi lại từ
màn đầu tiên, với các yếu tố trong game bị sinh lại từ đầu, do đó tiến bộ của người
chơi được thê hiện qua tốc độ chạy qua màn cũng như kiến thức của người chơi vê hệ
thống trong game Người chơi sẽ phải liên tục đánh giá rủi ro của mình trong mỗi màn
cũng như khám phá kỹ thuật mới, từ đó xây dựng lối chơi cho mỗi lần chơi
Hệ thống trong game:
23
Trang 25SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Ảnh 2.2 Tương tác giữa các tộc
Trò chơi sử dụng các mối quan hệ giữa các tộc để tạo một môi trường linh
động, như trong ảnh trên, nhân vật chính sẽ thuộc tộc con người (có thé thay đôi sau
này), và có những tương tác đặc biệt dựa trên mối quan hệ giữa các tộc
Trong ảnh trên, đường màu xanh nghĩa là thực thể A hòa bình với thực thê B,
đường màu đỏ nghĩa là thực thé A đối lập với thực thé B, còn nêu không có đường mũitên vẽ giữa chúng thì có nghĩa là thực thé A trung hòa với thực thé B Mối quan hệ tam
phân này cho phép ta tạo các tương tác riêng biệt.
Ngoài tính tương tác với các tộc ra, người chơi sẽ còn phải vận dụng tối đa môi
trường dé chiếm lấy ưu thế của mình, chăng hạn như vận dụng tốc độ của thực thể trên
những ô đặc biệt trong bàn cờ.
Anh 2.3 Mô họa tác động của ô lên đối tượng
Khi kết hợp yếu tố môi trường với các dụng cụ có trên tay, người chơi sẽ giải
quyết các bài toán được đặt ra trong màn chơi
Tính tương tác:
Phan lớn thời gian người dùng sẽ chuột dé chọn vị trí di chuyển, cũng như chọncác đối tượng và hành động tương tác tương ứng
24
Trang 26SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
2.1.5 Prototype
1 Màn mở đầu
Anh 2.4 Prototype màn mở dau
Boi kẻ địch chặn cửa ngay lập tức trong màn chơi, người chơi cũng sẽ tiếp cận
trực tiếp và ngay lập tức học vê cách đối phó sau này.
2 Ví dụ về màn rẽ nhánh, với nguy co/phan thưởng và các dung cụ hỗ trợ
Trong màn này, người chơi có hai lựa chọn: hoặc đi sang phải sang màn
tiếp theo hoặc thử thách đương đầu với bốn kẻ địch bên dưới (xung quanh lửa
trại), màn này cũng là ví dụ vê các đối tượng mà người chơi có thé tương tác
được, cũng như yếu tố quan trong rằng không phải mọi màn đều yêu cầu người chơi phải đánh bại kẻ địch
25
Trang 27SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
thành chim con nếu qua đủ số lượt.
Trang 28SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Trọng tâm của màn này đó là tính tác giữa người (màu xám) và zombie (màu của đồng), nếu như người chơi và zombie không đứng sát nhau gần thanh sắt, thì con zombie sẽ tập trung đuôi theo người trong ảnh này Nếu như người
chơi đứng sát thanh sắt và gần với con zombie, con Zombie có thể đôi mục tiêu
về phía người chơi trong vô ích (vì đã có thanh sắt chặn đường)
Ngoài ra, trong mản nảy, người chơi có thê tương tác với cuốn sách dé
trên bài cũng như tiêm hồi máu bên phải 6 giam.
EEEEEE EE EE l3 LE
EE =EE: EE:EE
EE
Anh 2.7 Prototype tương tác khác tộc
2.2 Phương pháp xây dựng trò chơi
Trò chơi sẽ sử dụng kiến trúc mô hình Model-View với phương pháp lập trình
hướng sự kiện.
2.2.1 Mô hình tông quát hệ thông
a) Cầu trúc của dự án Câu trúc của dự án sẽ được thực hiện như sau
27
Trang 29SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
Anh 2.8 Cau trúc dự án trong Visual Studio
Trong Monogame, hầu như moi asset đều được thực hiện qua content pipeline,
cho phép tối ưu tốc độ tải và lưu trữ các đối tượng nhị phân như file ảnh, file texture,
giúp các nhà phát triển chi tập trung với luồng logic của game Song Monogame về căn bản chỉ là cái khung của game engine và chỉ cung cấp một số API tương tác với
phần cứng, do đó ta vẫn cần phải tự viết phần game engine Ở đây SharedLibrary sẽ
đóng vai trò lam engine cho trò chơi.
Bởi vì Monogame sử dụng ngôn ngữ Cử, cau trúc này cũng sẽ lợi dụng cách tổ
chức dự án của C# với một số khác biệt của Monogame rằng Monogame sẽ chỉ cài sẵn
nuget package của riêng nó trong dự án tương ứng.
Dé giải thích rõ hơn: Trong C#, moi dự án thuộc | trong 4 loại sau:
Dự án nền tảng: đây là dự án thường gặp, chăng hạn như ASP.NET, MAUI, Xamarin, v.v , trong đó trong project đã có các dependency có
sẵn cho nền tảng đó
Dự án thư viện (library project) hay trong C# gọi tắt đi là PCL, cho
phép hướng đến một nên tảng nhất định hoặc không hướng đến nền tảng
nào, bản thân project này không thé tự chạy mà chỉ được dùng dé build
trước các dự án khác (tức xây thành một assembly trước, sau đó các dự
án khác sẽ gọi các phương pháp trong assembly này Trong C# có
keyword internal được dùng dé giấu một số phương thức riêng trong
assembly, phù hợp với các dự án dạng này
Dự án chia sẻ (shared project): Dự án này không thể tham chiếu đến các
dự án mà chỉ được dùng làm nơi lưu trữ code cũng như tải nguyên
chung Dự án này cũng không thé build chính nó và do đó cũng khôngthé chạy được Do vậy, các dự án khác khi import nó về căn bản sẽ copy
toàn bộ source code và một số file sang dự án đó (hành vi tương tự với
#include trong ngôn ngữ C) Bởi vì dự án này không thê tham chiếu các
package hay các dự án khác, nếu như nó có sử dụng dependency mà
project gói nó không sử dụng thì sẽ xảy ra lỗi dependency, do đó phải
cần thận khi sử dụng Một điều đáng lưu ý nữa là vì căn bản code trong
project sẽ được copy sang assembly đang chạy, nên phải cần thận dé gọi
đúng assembly chứa code của dự án chia sẻ: một số tính năng chang han
như lớp riêng phần không áp dung khi cố tao lớp riêng phan từ
dependency nhưng có áp dụng khi bản thân nó là dependency của dự án
khác.
28
Trang 30SVTH: Bùi Đăng Quang Đồ án tốt nghiệp
- Các dạng dự án khác (unit test, ): Tương tự với dự án nền tang, các
dự án phục vụ cho các mục đích khác có thê tập trung hoặc không tập
trung với nền tang, chang hạn như dự án UnitTest được dùng viết unit test cho code của dự án khác.
Tổng quan, cấu trúc của dự án sẽ bao gồm:
- SharedLibrary: day là phan game engine, và chứa không chỉ các ham thông
dụng mà còn quan lý nguồn logic chính, được thiết kế sao cho tạo cảm giác
chung với Unity, project này sử dụng dạng LibraryProject, do đó nếu muốn thì
có thể biến thành Nuget Package và tải lên mạng cho những người lập trình
khác sử dung engine
- SharedLibraryUTest: chứa các unit test kiếm thử logic của game engine
- IntoTheDungeon là nơi lưu code chính của game, bao gồm content là nơi lưu
asset của game Project này sử dụng dạng SharedProject
- Android/Desktop/ là nơi dé chạy cũng như gói code lại với nhau, trong từng
project riêng này, có thé chứa một số code khác hoặc có một số tính năng khác được thay đôi qua file config, hoặc tạo lớp riêng phần
Monog: xtended.Content.P1
Extended Tiled
e Framework DesktopGL e.Content.Builder Task
Anh 2.9 Cách cài đặt của dự án trong file
Trong bất kỳ project không phải dạng shared nào, ta đều có thé tham chiếu đến
các project C# khác sử dụng import đối với project dạng shared và reference nếu không phải shared, đặc biệt bất kê là trong hay ngoài solution của visual studio Lợi
dụng tính chất này, ta có thể hình dung cấu trúc toàn bộ kiến trúc game nói chung sẽ
như sau:
29