Góp chung vào công cuộc xây dưng một nơi lý tưởng như vậy, bên cạnh các công ty lớn hàng đầu ngành Game của Việt Nam khi lấy phát hành game làm chủ đạo thì ở những studio nhỏ như studio
Trang 1TP Hồ Chí Minh, tháng 6 năm 2022
Trang 2Không nằm ngoài xu thế của thế giới, Việt Nam nói chung và các nhà phát triển game ở Việt Nam nói riêng luôn muốn được góp tiếng nói của mình trong cộng đồng game thế giới khi
họ luôn cố gắng đem đến những sản phẩm chất lượng ra thị trường Do vẫn còn non trẻ, Việt Nam cần thiết có một tiếng nói đi đầu để đem đến một cái viễn cảnh tươi sáng hơn cho những những bạn trẻ đang mong ước được thực hiện một tựa game trong mơ của mình nhưng bị cản trở vì hiện thực phũ phàng của ngành game Việt Nam
Góp chung vào công cuộc xây dưng một nơi lý tưởng như vậy, bên cạnh các công ty lớn hàng đầu ngành Game của Việt Nam khi lấy phát hành game làm chủ đạo thì ở những studio nhỏ như studio CGK (Công ty Cổ phầnScaleMart) nơi số nhân viên không vượt quá con số 20 nhưng sự nhiệt huyết vượt xa trăm người, nơi những con người đặt ước mơ lên trên tham vọng tiền bạc đã và đang đóng góp sức mình và mong một ngày tiếng gọi nhỏ nhoi của mình sẽ được
ai đó nghe thấy Cảm phục sự cố gắng của họ, bản thân em đã quyết định sẽ tham gia, thử một lần nhìn tận mắt cách những con người ấy quyết tâm từng ngày ra sao
Trang 3Đặc biệt cảm ơn anh Nguyễn Công Lý đã hướng dẫn em tận tình mặc dù em còn thiếu rất
nhiều kinh nghiệm
Cũng xin cảm ơn thầy cô trong khoa Công nghệ phần mềm đã nhiệt tình hỗ trợ, tạo điều kiện em làm bài báo cáo này
Nguyễn Lương Kiên
TpHCM, ngày 16 tháng 6 năm 2022
Trang 44
NHẬN XÉT CỦA KHOA
Trang 5
5
Trang 6
6
MỤC LỤC
LỜI MỞ ĐẦU 2
LỜI CẢM ƠN 3
NHẬN XÉT CỦA KHOA 4
Chương 1 Giới thiêu công ty thực tập 8
1.1 Công ty Cổ phần SmartScale 8
1.2 Sản phẩm của công ty 8
Chương 2 Nội dung thực tập 9
2.1 Tìm hiểu công ty 9
2.2 Nghiên cứu kỹ thuật 10
2.2.1 Công cụ trao đổi thông tin 10
2.2.2 Tìm hiểu về Cocos Creator và Javascript 10
2.3 Thực hiện bài kiểm tra kiến thức Cocos Creator và khả năng tư duy lập trình 11
2.4 Dự án game bắn trứng 12
Chương 3 Chi tiết dự án game bắn trứng 13
3.1 Thông tin chung: 13
3.2 Tóm tắt luật chơi cơ bản: 14
3.3 Công thức tính điểm 16
3.4 Trứng đặc biệt 17
3.5 Các hệ thống quản lý cốt lõi 18
3.5.1 Resource Manager: 18
3.5.2 Egg Manager: 19
3.5.3 Board Manager: 20
Trang 77
3.5.4 Game Manager: 20
3.6 Thuật toán xác định trứng rơi 21
3.7 Một số hình ảnh hiện tại của game 23
3.8 Kết quả 26
TÀI LIỆU THAM KHẢO 27
TỔNG KẾT 28
Trang 8- Công ty chủ yếu thực hiện các sản phẩm và out-source cho ty mẹ
- Các sản phẩm gồm có Cánh cụt vui vẻ, Đảo tặc và một số các game casual và stimulation đang trong giai đoạn thực hiện và sắp được ra mắt trên thị trường
Trang 99
Chương 2 Nội dung thực tập
- Thực tập sinh được thực tập từ xa do sự cản trở của dịch Covid 19 hoành hành trong khoảng thời gian thực tập
- Các nội dung thực tập và kết quả được trao đổi giữa thực tập sinh và người phụ trách là anh Nguyễn Công Lý thông qua Telegrame hoặc Facebook Messenger
- Mỗi tuần sẽ có một ngày báo cáo lại quá trình tìm hiểu, học tập và thực hiện nội dung được trao đổi
- Thực tập sinh được hỏi người phụ trách những khuất mắt, khó khăn cần giải đáp trong quá trình học tập
- Trong quá trình thực tập tại nhà, thực tập sinh sẽ có những buổi gặp mặt trực tiếp cùng người hướng dẫn để trao đổi những khúc mắc trong quá trình thực tập
Hình thức: Đối thoại trực tiếp
Nội dung : Giới thiệu về công ty, cách tổ chức của công ty
Được nghe người phụ trách và chủ công ty giới thiệu về công ty bao gồm các thành viên, chỗ làm việc, tiểu sử quá trình thành lập, phát triển và những sản phẩm công
ty đã tham gia sản xuất
Được nghe giới thiệu về mục đích hoạt động và các nội dung sẽ hướng tới trong tương lai và cách tổ chức của công ty
Kết quả: Hiểu rõ những khó khăn, trắc trở từ những ngày đầu thành lập từ một studio với
cái tên CGK nhưng đã được thành công do sự chăm chỉ và cần cù của đội ngũ phát triển Nhắm bắt được cách vận hành và cách thức trao đổi với người phụ trách hướng dẫn
Trang 1010
2.2.1 Công cụ trao đổi thông tin
Nội dung : Tìm hiểu về Telegram: cách thức hoạt động, cài đặt và thực hiện một cuộc
gọi Telegram
Kết quả : Thực hiện thành công cuộc gọi nhóm giữa thực tập sinh, người phụ trách và
chủ công ty
2.2.2 Tìm hiểu về Cocos Creator và Javascript
Nội dung : Tìm hiểu các khái niệm cơ bản trong Cocos Creator và viết một báo cáo về
những gì tìm hiểu được và học kiến thức về Javascript
- Node: là đơn vị cơ bản nhất được quản lý trong Cocos Creator Các node tồn tại trong
một Scene sẽ được bố trí và biểu diễn theo dạng cây (quan hệ cha - con) Có thể theo dõi các node trên panel Node Tree Các Node cùng với các Component của chúng sẽ được render và thực thi theo thứ tự trên - xuống, cha – con
- Components: Component tạo nên ý nghĩa cho Node
▪ Render Component: Sprite, Light, Mask, MeshRenderer,… ➔ Thực hiện graphic render
▪ UI Component: Button, Label,… ➔ Hiện thị và thực hiện chức năng của một số loại UI
▪ Collider Component: BoxCollider, CircleCollider ➔ Xác định va chạm và phản hồi bằng các callback onCollisionEnter, onCollisionStay, onCollisionExit cho Script Component thuộc cùng một Node
▪ Physics Component: Collider, Joint, Rigidbody ➔ Bản chất là Physic Engine Box2D với 2D và cannon.js với 3D Mô phỏng, cài đặt các object chịu tác động của vật lý và phản hồi lại bằng các callback onBeginContact, onEndContact, onPreSolve, onPostSolve cho Script Component thuộc cùng một Node
Trang 1111
▪ Và một số Component khác như: Animation, Camera, ParticleSystem,
AudioSource… ➔ với chức năng đúng với tên gọi của mình
▪ Custom Component (Script): Cocos Creator 2.4.7 hỗ trợ ngôn ngữ viết Script là Javascript và Typescript Về cơ bản, ta sẽ định nghĩa một Javascript Object với một số Properties định sẵn của Cocos Creator (có thể lược bỏ nếu không cần thiết)
và truyền vào phương thức cc.Class()
▪ Các Lifecycle Callbacks và thứ tự thực thi: onLoad ➔ onEnable ➔ start ➔ update ➔ lateUpdate ➔ onDisable ➔ onDestroy
- Event System: Liên lạc giữa các Node hoặc các Component bằng EventHandler component (cc.Component.eventHandler) hoặc emit/launch một event (Event
Launcher)
Kết quả :
- Thực hiện và tìm hiểu đầy đủ các nội dụng chính của Cocos Creator như trên và hoàn
thành được một bài báo cáo đã được người phụ trách hướng dẫn kiểm duyệt
- Thuần thục được ngôn ngữ lập trình Javascript khi viết Script cho Cocos Creator
- Nắm bắt được những nội dung cơ bản và tự áp dụng những demo nhỏ cho những nội
dung tìm hiểu được
2.3 Thực hiện bài kiểm tra kiến thức Cocos Creator và khả năng tư duy lập trình
Nội dung: Thực hiện bản demo game bắn trứng rồng cổ điển (Endless Mode) và đảm
bảo những mechanic chính của game gốc như: Bắn trứng màu ngẫu nhiên theo góc đã được xác định; Nổ trứng khi bắn trứng vào cụm trứng cùng màu có số lượng từ 3 trở lên; Trứng rớt khi xảy ra hiện tượng nổ Chính sách ghi điểm khi nổ được trứng, rớt trứng cũng như các Assets của trứng, particles và âm thanh thực tập sinh tự chuẩn bị và
sẽ không nằm trong đánh giá
Đường dẫn demo thực hiện:
https://github.com/AdrianNguyen-UIT/DragonEggPopClone
Nhận xét, đánh giá:
Trang 1212
- Tổ chức các node trên editor vẫn còn lộn xộn khi không có cơ chế sinh trứng tự động
và sắp xếp các node không được tổ chức theo mong muốn của người đánh giá
- Gợi ý cách tổ chức các node sao cho dễ đọc và nhìn nhận
- Có các lỗi sau:
▪ Trứng được bắn ra khi giao tiếp với trứng trên bàn có hiện tượng đi xuyên
▪ Thuật toán xác định trứng rơi vẫn chưa biểu hiện theo đúng yêu cầu
Đường dẫn của game gốc:
https://play.google.com/store/apps/details?id=com.cua.egg.shoot&hl=en&gl=US
Hình ảnh của game gốc:
Trang 1313
Chi tiết dự án thực hiện: Xem chương 3.
Chương 3 Chi tiết dự án game bắn trứng
3.1 Thông tin chung:
- Là tựa game làm lại tựa game Egg Shoot của Crab Studio (Chương 2 – mục 2.4) với mục đích sẽ sử dụng game bắn trứng (đã qua sửa đổi) thành một mini game trong một tựa game đang phát triển của công ty
- Các Assets của trò chơi do công ty cung cấp
- Người thực hiện: Thực tập sinh Nguyễn Lương Kiên
Trang 1414 3.2 Tóm tắt luật chơi cơ bản:
- Khi tham gia màn chơi, người chơi điểu khiển trỏ chuột hoặc cảm ứng để điều
- Trứng để bắn sẽ có một mầu ngẫu nhiên tùy vào các màu trứng được phép có trên bàn
- Khi trứng được bắn đi: Va chạm vào hai bên tường sẽ bật ngược, thay đổi hướng x của vector di chuyển của trứng; Va chạm với trứng sẽ xác định điều kiện nổ là nếu cụm trứng sau khi va chạm xảy ra là cúm trứng cùng màu với số lượng từ 3 trở lên
sẽ xảy ra sự kiển nổ trứng)
Trang 1515
- Sự kiện nổ trứng sẽ giúp người chơi ghi điểm theo công thức tính điểm của trò chơi
- Khi các trứng trên bàn gặp phải dây chắn ngang, người chơi sẽ có 6 giây để làm rớt
Nếu sau 6 giây mà vẫn có trứng nằm trên dây chắn ngang, game sẽ kết thúc màn chơi và ghi nhận số điểm hiện tại
Trang 1616
tiếp theo (vàng) sẽ xuất hiện trên bàn nêu như người chơi không làm nổ quả trứng này Để làm nổ quả trứng bay người chơi chỉ cần bắn trứng hiện tại vào trứng bay thì sẽ nhận được 250 điểm Tuy nhiên quả trứng (vàng) tiếp theo sẽ bay nhanh hơn
và khó bắn trúng hơn
3.3 Công thức tính điểm
[Số trứng Nổ]: Số trứng trong cụm trứng cùng màu khi nổ
[Điểm]: Điểm số cơ bản gắn cho mỗi quả trứng (mặc định là 10)
[Tích các số nhân]: Trong trường hợp người chơi làm nổ những quả trứng đặc biệt giúp
nhân số điểm đạt được với số biểu thị (X2, X3, X4) và được nhân dồn Ví dụ người chơi ăn được 1 quả trứng X2 và 1 quả trứng X3 thì điểm số sẽ được nhân 6
Trang 1717
3.4 Trứng đặc biệt
- Trên bàn trứng sẽ có duy nhất một quả trứng tại một thời điểm trở thành trứng đặc
biệt với dấu hiệu nhận biết là trứng sẽ có animation nở ra vào ,
- Khi làm nổ quả trứng này sẽ kích hoạt hiệu ứng ngẫu nhiên đặc biệt cho quả trứng
hàng chờ tiếp theo
- Các hiệu ứng đặc biệt:
▪ Trứng bonus điểm (nhân với giá trị điểm mặc định của mỗi quả trứng):
Trang 1818 3.5 Các hệ thống quản lý cốt lõi
Trang 1919
Trang 2020
Trang 2121 Ngoài ra còn các Scene Manager (Quản lý chuyển cảnh), Audio Manager (Quản lý
Âm thanh chung), Score Manager (Quản lý điểm số)…
3.6 Thuật toán xác định trứng rơi
- Xác định những quả trứng nằm bên cạnh những quả trứng nổ (Trứng Rìa)
- Xác định những quả trứng nằm trên cùng của bàn
- Lần lượt kiểm qua từng những quả Trứng Rìa, nếu:
▪ quả trứng nào tìm được đường đến một trứng trên cùng ➔ Trứng Không Rớt
▪ quả trứng nào không tìm được đường đến một trứng trên cùng ➔ Trứng Rớt
- Tìm những quả trứng có liên quan đến Trứng Rớt ➔ Những quả Trứng Rớt
Trang 2222
- Ta áp dụng thuật toán A* Pathfinding để tìm đường và Heap để duyệt các phần tử
Trang 2323 3.7 Một số hình ảnh hiện tại của game
Trang 2424
Trang 2525
Trang 2626
3.8 Kết quả
Đã hoàn thành 80% game gốc
Các phần còn thiếu:
- UI hiển thị những người chơi số điểm cao
- Game Over Scene
- Chèn quảng cáo
Tính năng dự tính sẽ thêm vào trò chơi: Đăng nhập bằng tài khoản Google Play để lưu trữ dữ liệu trên Server Google (hiện tại, dữ liệu về setting người dùng và điểm đều được lưu trữ tại bộ nhớ thiết bị) cũng như thiết lập những thành tựu giúp người chơi có thêm mục đích khi chơi
Trang 27[2] Lauge, S [Sebastian Lauge] (2014, December 17) A* Pathfinding (E01:
algorithm explanation) [Video] YouTube
Trang 2828
TỔNG KẾT
Trong vòng hai tháng, thực tập sinh đã hoàn thành phần lớn các tính năng của game gốc Trong thời gian làm tựa game này, bản thân thực tập sinh đã học hỏi được rất nhiều cách về cách tổ chức thiết kế các hệ thống và tối ưu chúng một cách tốt nhất để đem lại trải nghiệm lập trình, phát triển và trải nghiệm game trở nên thú vị hơn
Chân thành cảm ơn sự giúp đỡ của anh hướng dẫn Nguyễn Công Lý vì đã tận tình giúp
đỡ, hỏi han trong suốt quá trình thực tập và thực hiện dự án này