## Mô tả sản phẩm Ứng dụng cho phép người sử dụng tự tạo game của mình bằng cách xử lý tranh vẽ. Người dùng chụp ảnh bức tranh của mình, sau đó ứng dụng chuyển đổi bức tranh thành một level có thể chơi được. Một số lưu ý: 1. Do bản chất bức tranh chỉ là một dữ liệu màn chơi, nên lối chơi của các bức tranh khác nhau sẽ giống nhau. 1. Vì thế, cần có cách hỗ trợ khả năng sáng tạo của người thiết kế. Ứng dụng sẽ được deploy trên 2 nền tảng: Web và Mobile. ## Quá trình vận hành ### Client Client có các chức năng chính: 1. Upload dữ liệu hình ảnh lên server 1. Cho phép người dùng chơi sản phẩm của mình sau khi nhận lại data từ BE 1. Cho phép người dùng tạo và thay đổi màn chơi qua game editor 1. Hỗ trợ local multiplayer qua mạng Wifi 1. Gửi request prompt cho AI lên server Để deploy trên mobile cần có tài khoản CH Play trên android (trả tiền 1 lần, 25$ ). Trên iOS, cần đăng ký hằng năm để đăng app lên AppStore với mức giá 99$/năm. Nhà phát hành chỉ được nhận 70% lợi nhuận thu được từ ứng dụng. Để deploy web và server cần mua dịch vụ hosting. Một số hướng chọn công cụ: #### HTML5/JS framework Có nhiều framework JavaScript tập trung vào gamedev, ví dụ như Phaser, libGDX, v.v. Hướng phát triển này phù hợp với dev thích làm mọi thứ từ đầu. * Ưu điểm: web siêu nhẹ, không lo về tốc độ. Quyền kiểm soát code cao, tùy biến được rất nhiều. **FREE**. Hợp với team do nhiều thành viên đã biết về JS. * Nhược điểm: Do phải xây nhiều tính năng từ đầu nên tốc độ phát triển chậm hơn các phương án khác. Hỗ trợ cộng đồng không tốt bằng game engine (nhưng vẫn rất tốt). Khó build app native trên điện thoại (do bản chất HTML/JS được dùng cho trình duyệt), nhưng vẫn có cách. #### Game Engine Game engine cung cấp cơ sở hạ tầng chuẩn 5 sao để build sản phẩm team đang hướng đến. Game engine có learning curve dốc hơn framework. Các game engine khả thi: * **Unity3d:** Dùng **C#**, nặng và đầy đủ tính năng nhất, export Web hơi kém so với app. **Không free** nếu team có lợi nhuận đủ nhiều (tầm 1k-2k $ / tháng). Năm ngoái có lùm xùm thu phí indie dev nên đang mất danh tiếng. Unity dễ học với người quen dev game hoặc Java/C#. Lượng tài liệu và cộng đồng khổng lồ, hầu hết mọi vấn đề người dùng gặp phải đều đã được hỏi và trả lời trước đây. * **Godot:** Dùng ngôn ngữ riêng của engine, có thể dùng C#/C++ nhưng không được hỗ trợ nhiều. Mới hơn Unity nên tính năng không đầy đủ bằng. Tuy nhiên godot rất nhẹ (cả game engine chỉ ~80MB) và do đó *rất* nhanh. * **Cocos2d-x**: Dùng **C++**. Tập trung vào 2D. Miễn phí. Nhiều tính năng do được phát triển từ lâu. Không nổi tiếng bằng Godot và Unity. Cả Cocos2d-x và Godot đều là phần mềm mã nguồn mở và không yêu cầu chia lợi nhuận. ### Server Nhiệm vụ của server: 1. Xử lý hình ảnh và trả về dữ liệu màn chơi 1. Lưu dữ liệu người dùng (profile và các màn chơi) 1. Login, O-Auth, ... 3. Truy vấn các màn chơi (của người dùng, người khác, thịnh hành,...) 4. Gửi request từ client lên API các AI, nhận dữ liệu, xử lý và đưa về cho client Techstack: 1. **OpenCV (bắt buộc):** thư viện xử lý hình ảnh 1. Python/C++/C#/Java đều được, nên để người dev backend chọn. 1. Phải hỗ trợ giao thức UDP/TCP/WebSocket (giao thức được dùng cho game server <-> client) (**Của client**) **Vấn đề:** Nên để việc xử lý dữ liệu cho client hay server? * Xử lý hình ảnh có thể tốn kha khá tài nguyên, mobile và web có tài nguyên giới hạn * Mặt khác, chạy request xử lý quá nhiều sẽ phải chịu kinh phí lớn. Tuy nhiên có thể tính phí khoản này :3 ## Các công cụ sẽ sử dụng: * Client: Godot * API xử lý hình ảnh: **host server** build bằng C++ (OpenCV) * API mọi thứ khác: no code platform - **rowy + firebase** ## Subtasks: