1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nghiên cứu xây dựng game đa nền tảng trên Monogame engine

61 7 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên cứu xây dựng game đa nền tảng trên Monogame engine
Tác giả Bùi Đăng Quang
Người hướng dẫn TS. Đỗ Thị Liên
Trường học Học viện Công nghệ Bưu chính Viễn thông
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án tốt nghiệp đại học
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 61
Dung lượng 13,67 MB

Nội dung

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 3

SVTH: 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 4

SVTH: 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 5

SVTH: 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 6

SVTH: 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 7

SVTH: 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 8

SVTH: 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 9

SVTH: 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 10

SVTH: 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 11

SVTH: 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 12

SVTH: 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 13

SVTH: 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 14

SVTH: 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 15

SVTH: 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 16

SVTH: 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 17

SVTH: 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 18

SVTH: 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 19

SVTH: 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 20

SVTH: 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 21

SVTH: 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 22

SVTH: 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 23

SVTH: 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 24

SVTH: 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 25

SVTH: 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 26

SVTH: 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 27

SVTH: Bùi Đăng Quang Đồ án tốt nghiệp

thành chim con nếu qua đủ số lượt.

Trang 28

SVTH: 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 29

SVTH: 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 30

SVTH: 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

Ngày đăng: 28/03/2024, 09:42

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN