Về nền tảng chính game, game sử dụng engine Unity2D, về map, lúc này chỉ hỗ trợ việc tạo bằng file txt, sau có thể mở rộng tạo trong chính game, về database, game sử dụng firebase để lưu
Trang 2Trần Quốc Huy
Trang 32
MỤC LỤC
Chương 1: GIỚI THIỆU ĐỀ TÀI 6
1.1 Mô tả đề tài 6
1.2 Lý do chọn đề tài 6
1.3 Tìm hiểu 6
1.3.1 Youtube 6
1.3.2 Udemy 6
1.3.3 Discord 7
1.3.4 ChatGPT 7
1.4 Video showcase 7
Chương 2: KIẾN THỨC VÀ CÔNG NGHỆ SỬ DỤNG 8
2.1 Unity 8
2.2 Firebase: 9
2.3 Photon: 9
2.4 Github 11
2.5 Figma: 12
Chương 3: XÂY DỰNG ỨNG DỤNG 13
3.1 Luồng màn hình 13
3.1.1 Menu : ( ảnh 4.1, 4.2, 4.3 ) 13
3.1.2 Select song scene: ( ảnh 4.3, 4.4 ) 14
3.1.3 Gameplay scene: ( ảnh 4.5, 4.6, 4.7 ) 14
3.1.4 Score screen: ( ảnh 4.8, 4.9 ) 15
3.1.5 Lobby: ( ảnh 4.10 ) 15
3.1.6 Waiting room: ( ảnh 4.11 ) 15
Trang 43
3.2 Logic game 15
3.2.1 Map folder: 15
3.2.2 Map data: 16
3.2.3 Map.txt: 16
3.2.4 Note rating: ( Cơ chế tính điểm note ) 19
3.2.5 Approach rate: ( thời gian xuất hiện ) 20
3.2.6 Offset: ( Độ trễ ) 20
3.2.7 HP: ( Máu ) 20
3.2.8 Database: ( Firebase ) 20
Chương 4: GIAO DIỆN GAME 22
4.1 Màn hình menu 22
4.2 Màn hình chọn map 23
4.3 Màn hình gameplay 24
4.4 Màn hình kết quả 26
4.5 Màn hình tạo/join phòng 27
4.6 Màn hình lobby 27
Chương 5: KẾT LUẬN 28
5.1 Bảng tiến độ công việc 28
5.2 Đánh giá 29
5.2.1 Ưu điểm đồ án: 29
5.2.2 Nhược điểm đồ án: 29
5.2.3 Thuận lợi 29
5.2.4 Khó khăn 30
5.3 Hướng phát triển đồ án 30
Trang 54
TÓM TẮT ĐỒ ÁN
Đồ án bao gồm tìm hiểu, phân tích cơ chế vận hành game, làm map,
xây dựng database, cũng như kết nối cho nhiều người chơi, điểm chính của
game là có thể tự làm map và tự chơi offline, nhưng cũng có thể chơi nhiều
người bằng tài khoản Về nền tảng chính game, game sử dụng engine
Unity2D, về map, lúc này chỉ hỗ trợ việc tạo bằng file txt, sau có thể mở
rộng tạo trong chính game, về database, game sử dụng firebase để lưu trữ
thông tin đăng nhập người dùng phục vụ nhiều người chơi, để kết nối nhiều
người chơi, game sử dụng Photon để kết nối
-Chương 1: Giới thiệu đề tài: trình bày lí do chọn đề tài, đối tượng
sử dụng, mục tiêu hướng đến
-Chương 2: Kiến thức và công nghệ sử dụng: giới thiệu các công
nghệ, lí thuyết, các nguồn học và các công nghệ đóng góp vào đồ án
-Chương 3: Xây dựng game: Giới thiệu ý tưởng, phác thảo giao diện,
các logic game, cách vận hành game
-Chương 4: Giao diện game: các hình ảnh giao diện game và chú
thích
-Chương 5: Kết luận: Bàn luận về những gì vạch ra và kết quả đạt
được, kết luận, đánh giá, mục tiêu trong tương lại
Trang 71.2 Lý do chọn đề tài
Ban đầu, khi suy nghĩ về thể loại làm, bản thân em nhận ra trường mình quá hướng sinh viên làm app quản lí sử dụng database, nên bản thân muốn học làm cái
gì mới mẻ hơn, từ đó em quyết định chọn đề tài làm game, và với vốn kiến thức sẵn
có về cách game âm nhạc hoạt động, em đã chọn làm game âm nhạc, đồng thời làm nhiều người chơi để tìm hiểu cách thức hoạt động game nhiều người chơi
1.3.2 Udemy
Là trang web khóa học online, chuyên cung cấp các khóa học, trước khithanh toán có thể xem review cũng như nội dung để cho người dùng nhận biết có nên mua hay không
Trang 87
1.3.3 Discord
Khi tham gia Discord của cộng đồng unity, có thể đăng hỏi các câu hỏi và người dùng sẽ nhiệt tình trả lời Ngoài ra có thể cung cấp các tài nguyên cũng như chia sẽ project của mình cho mọi người
1.3.4 ChatGPT
Không thể phủ nhận việc tìm kiếm các giải pháp tối ưu cũng như hỗ trợ người dùng check code của mình và tìm hiểu những lỗi một cách dễ dàng mà không phải đọc hẳn một document về cách vận hành
- Join room và list các thành viên ( ở 1:27 )
- Chọn bài và các người chơi đều được chọn bài này
- Cuối game có list các điểm của các người chơi ( ở 4:07 )
[2] Video
https://drive.google.com/file/d/14Zmje3WWmixeDLOf9O5jEpJaSw033BjP/view?usp=sharing
Video này show chức năng lưu điểm ( cũng có ở video 1 ), các level, đồng thời cũng show một số tính năng mới cũng như trải nghiệm người dùng
Trang 98
Chương 2: KIẾN THỨC VÀ CÔNG NGHỆ SỬ DỤNG
2.1 Unity
Hình 2.1: Biểu tượng Unity
Unity là một công cụ phát triển trò chơi đa nền tảng mạnh mẽ và phổ biến, được phát triển bởi công ty Unity Technologies, Unity cho phép nhà phát triển tạo
ra các trò chơi 2D và 3D chất lượng cao cho các nền tảng như máy tính, điện thoại
di động, máy chơi game và thực tế ảo
Unity cung cấp một môi trường làm việc dễ sử dụng và linh hoạt, giúp nhà phát triển xây dựng các trò chơi và ứng dụng một cách nhanh chóng và hiệu quả Nó
Trang 102.2 Firebase:
Firebase cung cấp một loạt các dịch vụ cho phép quản lý dữ liệu, xây dựng
hệ thống xác thực và quản lý người dùng, lưu trữ và đồng bộ dữ liệu thời gian thực, phân tích và theo dõi hiệu suất ứng dụng, và thậm chí cả việc tích hợp các tính năng của trí tuệ nhân tạo
Với Firebase, nhà phát triển không cần phải lo lắng về việc xây dựng và quản
lý hạ tầng cơ sở dữ liệu, máy chủ và việc triển khai ứng dụng Firebase đã tự động quản lý và mở rộng cơ sở hạ tầng để đảm bảo hiệu suất và sự ổn định của ứng dụng
Ngoài ra, Firebase cũng cung cấp các công cụ phát triển và tài liệu phong phú, giúp nhà phát triển nhanh chóng tiếp cận và tận dụng tối đa các tính năng của nền tảng
2.3 Photon:
Hình 2.2:Biểu tượng Photon
Trang 1110
Photon là một plugin và dịch vụ mạng phổ biến trong ngữ cảnh của Unity, giúp nhà phát triển xây dựng và triển khai các trò chơi đa người chơi thời gian thực trên nền tảng đa nền tảng
Photon cung cấp các giải pháp mạng mạnh mẽ cho việc kết nối và đồng bộ hóa giữa các người chơi trong trò chơi Nó cho phép gửi và nhận dữ liệu qua mạng nhanh chóng và ổn định, tạo ra trải nghiệm đồng bộ và tương tác chất lượng cao giữa các người chơi
Với Photon, nhà phát triển không cần phải xây dựng cơ sở hạ tầng mạng phức tạp từ đầu Photon đã xây dựng và quản lý một mạng lưới phân tán để đảm bảo sự kết nối ổn định và giảm thiểu độ trễ
Ngoài ra, Photon cũng cung cấp các tính năng quản lý phòng chơi, matchmaking (tìm đối thủ phù hợp), chat và nhiều tính năng khác để hỗ trợ việc phát triển trò chơi đa người chơi một cách thuận tiện
Với tính tương thích đa nền tảng, Photon có thể được sử dụng trên nhiều nền tảng như máy tính, điện thoại di động và các máy chơi game Điều này giúp nhà phát triển tạo ra các trò chơi đa người chơi đa nền tảng một cách dễ dàng và tiện lợi
Với tích hợp dễ dàng vào Unity và khả năng cung cấp kết nối mạng ổn định, Photon đã trở thành một công cụ phổ biến cho việc phát triển trò chơi đa người chơi thời gian thực trong cộng đồng Unity
Trang 1211
2.4 Github
Hình 2.3: Biểu tượng Github
GitHub là một nền tảng lưu trữ mã nguồn và quản lý phiên bản phổ biến trong lĩnh vực phát triển phần mềm Nó cung cấp một môi trường linh hoạt và mạnh mẽ cho các nhà phát triển để làm việc và chia sẻ mã nguồn dự án
GitHub cho phép nhà phát triển lưu trữ mã nguồn của dự án trực tiếp trên nền tảng, tạo ra một kho chứa (repository) để lưu trữ và quản lý mã nguồn Điều này giúp nhà phát triển theo dõi các phiên bản và sự thay đổi trong mã nguồn, và dễ dàng làm việc theo nhóm
Trang 1312
2.5 Figma:
Hình 2.4: Biểu tượng Figma
Là nền tảng web/ứng dụng giúp tạo các mẫu prototype cho ứng dụng của mình, để có thể hiểu rõ hơn về kích thước align cũng như các luồng tiến trình, với Unity, việc phần lớn các assest được tạo từ figma cho thấy tầm quan trọng của nó
Trang 14- ExitCanvas: canvas để người chơi chọn việc thoát game
Hình 3.2: Hình ảnh thanh exit
- Canvas: chức các gameobject linh tinh như đăng nhập, nút game, …
- FirebaseController: để kết nối với database, lúc này chỉ để dùng để đăng nhập
- OptionCanvas: dùng để phục vụ cho option
- LoadMultiplayer: object phục vụ logic liên quan tới việc đăng nhập và kết nối tới server
Trang 1514
3.1.2 Select song scene: ( ảnh 4.3, 4.4 )
Màn hình sẽ load list các song ( load theo đường dẫn được ghi trong tip ), khi bấm vào sẽ load thông tin map đó và truyền vào scene gameplay
o Map preview: cấu trúc gồm tên nhạc, tên tác giả nhạc đó, độ khó, hình ảnh, người làm map, bpm
Hình 3.3: Hình ảnh cấu trúc hiển thị của một map
o Pause canvas: hiện tại chỗ này được coi là quick setting để chỉnh những thứ liên quan đến gameplay như AR ( approach rate ), offset ( độ trễ ), BG Opacity ( đậm nhạt background )
3.1.3 Gameplay scene: ( ảnh 4.5, 4.6, 4.7 )
Khi vào màn hình gameplay, sẽ load folder của map chọn từ màn hình select song scene, truyền vào:
Trang 1615
- Khi bắt đầu, sẽ load bg của file map ( bg.jpg )
- Load beat đập theo BPM của file txt để người dùng có thể cảm nhận trước tốc độ của nhạc
- Chạy nhạc của map đó ( file song.mp3 )
- Load các note được ghi trong file txt
- Hiển thị từ từ các note và bắt đầu vào logic game ( Ghi rõ ở mục sau )
- Sau khi xong hết toàn bộ note, tiếng nhạc sẽ nhỏ dần và load vào màn hình Score screen
3.2 Logic game
3.2.1 Map folder:
Đặt tên default: Game_data ( không có ngoại lệ )
Chỗ để default: Assests->Game_data->Beatmaps ( không có ngoại lệ )
Khi vào game, nếu người chơi không biết/không load được map sẽ có chỉ dẫn
Trang 1716
Hình 3.4: Hình ảnh Cấu trúc folder để map
3.2.2 Map data:
Một map folder sẽ có mặc định những file sau:
- song.mp3 : dùng để chứa nhạc sẽ chạy trong ván chơi
- bg.jpg : background của bài nhạc ( chỉ cần là đuôi jpg )
- map.txt : chứa các thông tin của map ( sẽ nói rõ trong mục sau )
- score.txt : chứa thông tin số điểm của người chơi đã được mã hóa
Hình 3.5: Hình ảnh Cấu trúc folder để map
3.2.3 Map.txt:
Cấu trúc của Map.txt sẽ bao gồm các phần:
Trang 1817
[MAP INFO]: chứa thông tin sơ bộ của map bao gồm diff ( độ khó ), hp ( máu, set từ 0->10, càng cao máu giảm trên từng giây càng nhiều ), artist ( tên nhạc sĩ của nhạc đó ), bpm ( dùng để cho người chơi định hình được tốc độ của map ), creator ( tên người làm map )
[MAP VISUAL]: Phục vụ việc làm đẹp và tô điểm game play, cấu trúc sẽ gồm [time][r,g,b,o], khi tới một thời gian nào đó sẽ thay đổi màu sắc của BG theo
hệ số r,g,b,o đã liệt kê
[MAP DATA]: chứa thông tin của map, cấu trúc của map sẽ là [time][keytopress]
o Time: thời gian mà người chơi sẽ phải nhấn, thông thường sẽ không phản ánh đúng mà sẽ phải cộng thêm một khoảng offset từ bpm,
o Keytopress: phím mà người chơi phải bấm, chạy trên khoảng 26 chữ cái latin trên bàn phím, có 2 loại phím là in thường và in hoa, với phím in hoa buộc người chơi phải nhấn giữ phím shift để bấm
VD:
[3][t]: ở giây thứ 3, người chơi phải bấm phím t [5][T]: ở giây thứ 5, người chơi phải bấm shift + t [6][a,b]: ở giây thứ 6, người chơi phải nhấn đồng thời 2 phím a và b [7][A,B]: ở giây thứ 7, người chơi phải nhấn đồng thời 2 phím shift + a b
Trang 1918
Hình 3.6: Hình ảnh cấu trúc trong file map.txt, map được chia thành 3 phần ( MAP INFO,
MAP DATA, MAP VISUAL )
Trang 2019
3.2.4 Note rating: ( Cơ chế tính điểm note )
Hình 3.7: Hình ảnh thể hiện cơ chế tính điểm của một note
Một note được tạo tại thời gian t sẽ có khoảng thời gian t+-0.1s để người chơi có thể bấm, khi bấm, lập tức nốt sẽ ghi nhận và biến mất
+ vạch xanh lá cây: người chơi sẽ nhận được kết quả là good + vạch đỏ: người chơi nhận kết quả là great
+ vạch vàng: người chơi nhận kết quả là perfect + vạch cam: người chơi nhận kết quả là critical perfect VD: một note có cấu trúc [5][a]
- Nếu người chơi nhất a ở khoảng thời gian 4.9 -> 4.93 hoặc 5.071 -> 5.1 sẽ nhận được good
- Nếu người chơi nhất a ở khoảng thời gian 4.931 -> 4.96 hoặc 5.041 -> 5.07
Trang 2120
- Nếu người chơi nhất a ở khoảng thời gian >5.02 sẽ bị coi là miss
Tính điểm
Số điểm nhận được khi bấm được good là (100/tổng số note)*0.5
Số điểm nhận được khi bấm được great là (100/tổng số note)*0.75
Số điểm nhận được khi bấm perfect/critical perfect = (100/tổng số note)*1
3.2.5 Approach rate: ( thời gian xuất hiện )
Người chơi có thể chỉnh mục này trong setting, nó biểu thị cho thời gian từ lúc phóng to một dấu hiệu để nhận biết rằng có note cần bấm cho đến lúc kết thúc
+ Ví dụ: một note được tạo ra ở thời điểm t, thì thời gian nó sẽ xuất hiện trên màn hình và phóng to vào lúc t-approach rate và kết thúc tại lúc t
3.2.6 Offset: ( Độ trễ )
Độ trễ sẽ được áp dụng để dịch chuyển thời gian tạo note và thời gian tính điểm + Ví dụ: một note được tạo ra ở thời điểm t có offset là o thì thời gian hiển thị hình ảnh là t-approach rate + offset và kết thúc tại t+offset, sẽ có thời gian khả thi cho việc bấm là t+offset-0.1 -> t+offset+0.1
3.2.7 HP: ( Máu )
Khi bắt đầu game, sẽ có mặc định 1000 đơn vị máu
Trong file beatmap.txt sẽ có đề cập mức độ khó của máu ( từ 0>10 ) (hpvalue)
+ Trong 1s, số đơn vị máu sẽ bị trừ bằng hpvalue*10 + Khi bấm good, đơn vị máu sẽ cộng bằng (11-hpvalue)*3 + Khi bấm great, đơn vị máu sẽ cộng bằng (11-hpvalue)*5 + Khi bấm perfect/critical perfect, đơn vị máu sẽ cộng bằng (11-hpvalue)*10
3.2.8 Database: ( Firebase )
Trang 2322
Chương 4: GIAO DIỆN GAME
4.1 Màn hình menu
Hình 4.1: Giao diện menu ( màn hình default )
Hình 4.2: Giao diện các lựa chọn
Trang 2625
Hình 4.7: Giao diện pause
Hình 4.8: Giao diện Game over
Trang 2726
4.4 Màn hình kết quả
Hình 4.9: Giao diện màn hình kết quả điểm
Hình 4.10: Giao diện màn hình kết quả điểm nếu chơi multiplayer
Trang 2928
Chương 5: KẾT LUẬN
5.1 Bảng tiến độ công việc
kế các assest thông qua figma
phác thảo mang vào (UI game)
Hoàn thành
thể hoạt động như phác thảo ý
tưởng
Hoàn thành ( demo )
tài khoản ( việc quản lí điểm của map cần liên quan tới vấn
đề không thể thay đổ map )
Bảng 5.1.1: Bảng tiến độ công việc
Trang 30Phục vụ nhiều người chơi: Game đã áp dụng nhiều người chơi để ngoài việc chơi một mình, người dùng có thể mở room, tạo phòng, đón chờ bạn bè/người lạ ghé room để cùng chơi một map nào đó, share nhau kết quả để so tài, giải trí
5.2.2 Nhược điểm đồ án:
Xây map còn nhiều khó khăn: bản thân người tạo map phải tạo map bằng tay, canh từng milisecond, dù có thể sử dụng nhiều tool hỗ trợ như osu editor hay convert osu delay ( do chính bản thân người làm app tạo ) để phục vụ việc làm map nhưng về căn bản thì việc làm map vẫn khá mệt và thách thức
Server nhiều người chơi: bản thân app sử dụng công nghệ photon phiên bản miễn phí, nên hiện tại, app không thể công khai cũng như cung cấp cho người dùng tạo tài khoản vì như thế người chơi sẽ vào multiplayer và làm hao tổn kinh phí của người làm app
NoteBlock: Một định nghĩa trong game âm nhạc mà rất khó để giải quyết là note block khi mà nhiều note cùng xuất hiện tại một chỗ trong thời gian ngắn, khi nhấn 1 phím, 1/nhiều note sẽ cùng bị ảnh hưởng và tính điểm ( không đúng với bản chất phải bấm nhiều lần ) bản thân người làm app đã cố gắng fix nhưng không thể
5.2.3 Thuận lợi
Là một người chơi rhythm game lâu năm, từ osu, maimai, arcaea, bản thân đã tích lũy/biết được cơ chế tính điểm, delay, … từ đó có thể vẽ ra ý tưởng dựa trên những thứ đó, kết hợp với việc gõ bàn phím như monkeytype,…
Trang 3130
5.2.4 Khó khăn
Làm một mình: bản thân em không tin tưởng và không quen làm với bất cứ sinh viên nào trong trường, phần vì khó kiếm người có chung suy nghĩ và đam mê, hai là rủi ro người đồng hành không làm dẫn đến chậm tiến độ, nên mọi việc từ tìm hiểu, phác thảo, xây UI, logic bản thân đều phải tự làm, rất nhiều công việc
Chưa tìm hiểu sâu về database hay kết nối: bằng việc sử dụng kiến thức cơ bản, bản thân đã tự áp dụng vào game, nhưng nếu có thể biết rõ hơn về cơ chế thì có thể hoàn thiện đồ án hơn