Template 10 mini game

Xem màn hình mẫu: templates/index.html. Component riêng cho game: components/game.css.

Nguồn: chuyển từ design/docs/05-mau-game.md ngày 2026-11-11.

Tổng quan

#GameMô hìnhThời lượng / lượtNgười / lượtĐầu vàoĐộ sẵn sàng
1Bứt tốc 10 giâyA · B10s1Chạm / nút bấm🟢 Sẵn sàng
2Chạm chớp nhoángA · B20–30s1Chạm / nút bấm🟢 Sẵn sàng
3FPT Signal HuntD30–45s1Webcam — bàn tay🟡 Cần kiểm thử
4Cáo GoalkeeperC5 cú sút ≈ 40s1Điện thoại — chọn/nghiêng 3 hướng🟡 Phụ thuộc mạng
5FPT Air KickD3–5 cú sút ≈ 60s1Webcam — toàn thân🔴 Thử nghiệm
6Cáo đối đầuC3 hiệp × 2 lượt ≈ 2 phút22 điện thoại — chọn hướng🟡 Phụ thuộc mạng
7Cáo gom lộcA (+TV bảng điểm)45–60sHàng trăm cùng lúcVuốt trái/phải🟢 Sẵn sàng
8Cáo bay bằng giọng nóiA30s1Micro🔴 Thử nghiệm
9Cây lời chúcC1–2 phútKhông giới hạnForm trên điện thoại🟢 Sẵn sàng
10PhotoboothD2–3 phút1–4 (1 nhóm)Đăng ký + nhân sự chụp🟢 Sẵn sàng

Bốn mô hình thiết bị

Mô hìnhThiết bịdata-platformHàng chờGame
A · Chỉ điện thoạiĐiện thoại người chơi (web / Zalo / app)zalo · app · webKhông1, 2, 7, 8
B · BoothMàn kiosk đứng / TV + nút arcade hoặc bàn phímkiosk hoặc tvCó1, 2
C · TV + điện thoại làm tay cầmTV hiển thị + điện thoại quét QR để điều khiểnTV: tv · ĐT: zalo/webCó (trừ game 9)4, 6, 9
D · TV + webcamTV + webcam/camera + máy tính đủ mạnhtvCó3, 5, 10

Luồng chung theo mô hình

BướcA · Chỉ điện thoạiB · BoothC · TV + tay cầmD · TV + webcam
1. VàoQuét QR / link / ZaloChạm màn attractQuét QR trên TVNhân sự gọi số
2. Đăng kýSĐT (Zalo tự lấy)SĐT trên bàn phím sốSĐT trên điện thoạiSĐT trên điện thoại khi xếp hàng
3. Chờ—Số thứ tựPhòng chờ, TV hiện tênSố thứ tự trên điện thoại
4. Chuẩn bịHướng dẫn 1 mànHướng dẫn 1 mànGhép thiết bị, "Sẵn sàng"Đứng vào vùng, kiểm tra ánh sáng
5. Đếm ngược3-2-1 trên điện thoại3-2-1 trên màn3-2-1 trên TV3-2-1 trên TV
6. ChơiĐiện thoạiMàn + nútTV hiển thị, điện thoại điều khiểnTV + cử động
7. Kết quảĐiện thoạiMànTV + điện thoại cùng lúcTV + điện thoại
8. Nhận quàVoucher trong víQR cho nhân sự quétVoucher trên điện thoạiVoucher trên điện thoại

Thành phần mới (game.css)

ComponentClassDùng ở game
Khung TV 1920×1080.ds-tv (__top __stage __ticker)3, 4, 5, 6, 7, 9, 10
QR tham gia.ds-join (--lg)4, 6, 7, 9, 10
Đếm ngược.ds-countdown (--go)1–8
Nút chạm khổng lồ.ds-tap1, 2
Tín hiệu phản xạ.ds-signal--wait / --go / --early / --hit2
Chọn 3 hướng.ds-dpad (--locked)4, 6
Xin quyền.ds-perm3, 5 (camera), 8 (micro)
Khung webcam.ds-cam (__zone __checks __hand __body)3, 5, 10
Vật phẩm.ds-item--wifi / --camera / --play / --lixi / --bad3, 7
Điểm bay.ds-floater (--minus)3, 7
Tỷ số đối đầu.ds-versus, .ds-rounds, .ds-secret6
Phòng chờ / số thứ tự.ds-lobby .ds-slot, .ds-queue3, 5, 6, 10
Thanh thời gian TV.ds-timebar (.is-low)3, 4, 7
Đo âm lượng.ds-meter (--dark)8
Gợi ý vuốt / làn.ds-swipe-hint, .ds-lanes7
Lời chúc.ds-wish, .ds-mod-status, .ds-insight9
Khung ảnh.ds-frames .ds-frame, .ds-photo10
Nhân vật Cáo.ds-fox + assets/mascot/cao-<tư-thế>.webp (30 tư thế, xem assets/mascot/README.md)Cả 10 game
Cảnh báo vận hành.ds-ops3, 4, 5, 6, 8 (chỉ hiện cho nhân sự)
Cáo lấy từ bộ sticker resources/cao/. Chỉ có một chú Cáo cam — game đối đầu phân đội bằng màu áo (đỏ / xanh), không đổi màu lông.
Lì xì dùng đỏ #E8202A + vàng #FFC400: màu mùa Tết, chỉ cho vật phẩm, không dùng cho UI.

Đặc tả từng game

1 · Bứt tốc 10 giây

MụcNội dung
Ý tưởngBấm/chạm liên tục 10 giây — tốc độ như đường truyền FPT
Tính điểmSố lần bấm hợp lệ. Chặn > 20 lần/giây (bot, auto-click)
Kết quảTheo ngưỡng (≥ 80 lần = quà A) hoặc xếp hạng trong ngày
Tham sốThời lượng · ngưỡng quà · số lượt/người/ngày · giới hạn lần/giây
Theme gợi ýorange
MànĐiện thoại (A)Booth (B)
Chuẩn bị"Chạm thật nhanh trong 10 giây" + nút Bắt đầuGiống, chữ cỡ kiosk; nút arcade sáng đèn
Chơi.ds-tap chiếm nửa dưới · số lần lớn .ds-score · .ds-timerSố lần ở giữa màn · thanh thời gian · không cần nút trên màn
Kết quảSố lần + hạng hôm nay + quàNhư ĐT + top 5 hôm nay
Rủi roXử lý
Chạm đa điểm để gian lậnChỉ đếm 1 điểm chạm; giới hạn lần/giây
Mỏi tay → bỏ ngangChỉ 10 giây, không cho tăng thời lượng
Máy yếu, giậtKhông dùng hiệu ứng nặng khi đang chơi; confetti chỉ ở màn kết quả

2 · Chạm chớp nhoáng

MụcNội dung
Ý tưởngĐo phản xạ — FPT phản hồi nhanh
Luật5 vòng. Mỗi vòng màn đen (--wait) 1–4s ngẫu nhiên → chuyển lime (--go) → bấm ngay
Tính điểmTrung bình thời gian phản xạ (ms) của các lần đúng; bấm sớm = phạt +300ms, hiện --early
Kết quảXếp hạng theo ms thấp nhất trong ngày
Tham sốSố vòng · khoảng chờ min/max · mức phạt · ngưỡng quà
MànĐiện thoại / Booth
Chơi — chờToàn màn đen "Đợi màu xanh…" — không có nút, cả màn là vùng chạm
Chơi — bấmToàn màn lime "CHẠM!"
Sau mỗi vòng--hit: "248 ms" + chuỗi .ds-bits 5 vòng
Kết quảTrung bình ms, lần nhanh nhất, số lần bấm sớm, hạng
Rủi roXử lý
Người bị nhạy cảm ánh sángKhông nhấp nháy liên tục; mỗi lần chuyển màu chỉ 1 lần; có cảnh báo ở hướng dẫn
Độ trễ màn hình khác nhau giữa máyXếp hạng tách theo kênh (booth riêng, điện thoại riêng)
Màu lime khó nhận với người mù màuKèm chữ "CHẠM!" + rung (điện thoại)

3 · FPT Signal Hunt — Săn sóng tốc độ

MụcNội dung
Ý tưởngDùng tay bắt biểu tượng sản phẩm FPT đang rơi
Vật phẩmWi-Fi (cam, +10) · Camera (xanh, +10) · FPT Play (lá, +10) · Vật cản (đen viền đỏ, −15)
Tính điểmTổng điểm trong 30–45s. Tốc độ rơi tăng mỗi 10s
Tham sốThời lượng · tỉ lệ từng vật phẩm · tốc độ · điểm
Thiết bịTV ≥ 55" · webcam 1080p · máy tính có GPU · khoảng trống 2×2 m
MànTV
ChờSố thứ tự đang chơi + QR đăng ký + top 5
Căn chỉnhHình người chơi từ webcam + .ds-cam__zone + .ds-cam__checks (Đủ sáng · Đúng khoảng cách · Thấy tay). Đủ 3 → tự đếm ngược
ChơiWebcam làm nền mờ · vật phẩm rơi · vòng tay .ds-cam__hand · .ds-floater · thanh thời gian
Kết quảĐiểm + số vật phẩm theo loại (giới thiệu lại 3 sản phẩm) + quà
Rủi roXử lý
Ánh sáng sự kiện thay đổiBước căn chỉnh bắt buộc; đèn bổ sung phía trước người chơi
Người đứng sau lọt khungChỉ nhận tay trong vùng; đánh dấu vùng đứng trên sàn
Máy quá tảiĐo FPS lúc khởi động; < 24 FPS → giảm số vật phẩm, hiện .ds-ops cho nhân sự

4 · Cáo Goalkeeper — Bắt trọn đam mê

MụcNội dung
Ý tưởngNgười chơi làm thủ môn Cáo, chặn 5 cú sút trên TV
Điều khiểnĐiện thoại: 3 nút Trái/Giữa/Phải (.ds-dpad) hoặc nghiêng máy. Mặc định nút bấm — nghiêng là tuỳ chọn
LuậtMỗi cú sút: cầu thủ chạy đà 2s → người chơi chọn trong cửa sổ 1,5s → khoá → bóng bay
Tính điểmSố cú cản được / 5
Tham sốSố cú sút · thời gian cửa sổ chọn · tỉ lệ hướng sút
Theme gợi ýgreen (sân cỏ, FPT Play)
MànTVĐiện thoại
ChờQR lớn + mã 4 số + "Quét để làm thủ môn"Nhập mã / tự ghép qua QR → "Đã kết nối"
ChơiSân bóng, Cáo thủ môn, cầu thủ, .ds-rounds 5 cú.ds-dpad toàn màn + gợi ý "Chọn hướng!" + rung khi bắt đầu cửa sổ
Mỗi cú"CẢN PHÁ!" / "VÀO!"Đồng bộ kết quả + .ds-dpad--locked
Kết quảTỷ lệ cản + top hôm nayQuà
Rủi roXử lý
Mạng sự kiện chập chờn → trễKiểm tra độ trễ khi ghép; > 300ms hiện .ds-ops; nên có Wi-Fi riêng cho booth
Mất kết nối giữa lượtTạm dừng, cho kết nối lại 15s; quá hạn → lượt không tính, trả lại lượt
Người khác quét QR chenMã ghép dùng 1 lần, hết hạn sau 60s

5 · FPT Air Kick — Sút là bùng nổ

MụcNội dung
Ý tưởngSút bóng thật bằng động tác, không cần bóng
LuậtXoay thân chọn góc (Trái/Giữa/Phải) → giữ 1s để khoá → vung chân để sút
Tính điểmVào lưới +100; góc chết +50; bị thủ môn bắt 0
Thiết bịTV ≥ 65" · camera góc rộng · máy tính GPU · khoảng trống 3×3 m · sàn đánh dấu vị trí
MànTV
Căn chỉnhKhung .ds-cam + bóng người .ds-cam__body + 3 điều kiện; hướng dẫn "Lùi lại 1 bước"
Chọn góc3 vùng khung thành sáng theo hướng thân; vòng khoá 1s
Sút"VUNG CHÂN!" lớn · hiệu ứng bóng bay theo hướng đã khoá
Kết quảĐiểm từng cú + tổng
Rủi roXử lý
Nhận sai động tácCó nút dự phòng cho nhân sự kích hoạt cú sút
Va chạm, ngãKhông có vật cứng trong 3 m; nhân sự đứng cạnh; cảnh báo ở hướng dẫn
Chưa ổn địnhThử nghiệm tại 1 điểm trước khi nhân rộng; đo tỉ lệ nhận đúng ≥ 90%

6 · Cáo đối đầu — Sút hay, bắt đỉnh

MụcNội dung
Ý tưởng2 người đấu penalty bằng 2 điện thoại
Luật3 hiệp. Mỗi hiệp: A sút – B bắt, rồi đổi vai. Cả hai chọn kín trong 5s → TV mở kết quả
ThắngNhiều bàn hơn sau 3 hiệp; hoà → sút luân lưu 1 lượt
QuàThắng: quà chính · Thua: quà động viên
Nhân vậtA = Cáo áo đỏ (sut-do, thu-mon-do) · B = Cáo áo xanh (sut-xanh, thu-mon-xanh) — màu áo giữ nguyên trên TV và điện thoại của từng người
MànTVĐiện thoại A / B
Phòng chờQR + 2 ô .ds-slot (áo đỏ / áo xanh), ô sáng khi có ngườiTên + màu đội + "Sẵn sàng"
ChọnSân + .ds-versus tỷ số + .ds-rounds + .ds-secret "Áo đỏ đã chọn".ds-dpad + vai hiện tại ("Bạn SÚT" / "Bạn BẮT") + đếm 5s
Mở kết quảHoạt cảnh sút/bắt + "VÀO!" / "CẢN!"Kết quả hiệp
Kết thúcNgười thắng, tỷ số chung cuộcThắng: quà chính · Thua: quà động viên
Rủi roXử lý
Nhìn trộm màn hình đối thủNút chọn không đổi màu đến khi khoá; chỉ hiện "Đã chọn"
Một người không chọn kịpHết 5s → chọn ngẫu nhiên, ghi chú "Tự động"
MạngNhư game 4

7 · Cáo gom lộc

MụcNội dung
Ý tưởngCáo chạy 3 làn, gom lì xì, tránh chướng ngại — chiến dịch Tết
Điều khiểnVuốt trái/phải đổi làn; chạm 2 bên màn cũng được (dễ cho người lớn tuổi)
Tính điểmLì xì +10 / lì xì vàng +50 / chạm chướng ngại −1 mạng (3 mạng)
Kết thúcHết giờ hoặc hết mạng → chốt điểm và quyền nhận quà
Quy môHàng trăm người chơi đồng thời trên điện thoại; TV chỉ hiện bảng điểm
MànĐiện thoạiTV (tuỳ chọn)
Chơi3 làn .ds-lanes · Cáo hung-loc · .ds-item--lixi / --bad · HUD điểm, mạng, thời gian · .ds-swipe-hint 3s đầu—
Kết quảĐiểm, số lì xì, quà—
Bảng điểm—Top 10 + "đang chơi: 248 người" + QR tham gia + ticker người vừa trúng
Rủi roXử lý
Nghẽn server lúc cao điểmChấm điểm phía máy + gửi kết quả có chữ ký; kiểm tra bất thường trên server
Gian lận điểmGiới hạn điểm tối đa theo thời lượng; ghi lại chuỗi sự kiện để đối soát top

8 · Cáo bay bằng giọng nói

MụcNội dung
Ý tưởngNói/hát càng to Cáo bay càng cao
Điều khiểnÂm lượng micro → độ cao. Im → Cáo hạ dần
LuậtVượt cổng chướng ngại để đến đích trong 30s
Tham sốNgưỡng âm lượng tối thiểu (hiệu chỉnh theo tiếng ồn nền) · độ nhạy
MànĐiện thoại
Xin quyền.ds-perm micro: lý do, "Không ghi âm, không lưu giọng nói"
Hiệu chỉnh"Giữ im 2 giây" → đo tiếng ồn nền; .ds-meter--dark
ChơiCáo + cổng + .ds-meter cạnh phải + thời gian
Kết quảQuãng đường / về đích + quà
Rủi roXử lý
Ồn sự kiệnBước hiệu chỉnh bắt buộc; khuyến nghị chơi online/tại nhà hơn là tại booth
Người dùng từ chối quyềnCó chế độ thay thế: giữ nút để bay
iOS chặn micro trong webview / ZaloKiểm thử trên từng nền tảng trước khi ra mắt

9 · Cây lời chúc — Tết này mong gì?

MụcNội dung
Ý tưởngGửi điều ước lên cây trên TV — đồng thời là khảo sát nhu cầu
FormTên (hiển thị) · nhóm tuổi (chọn) · lời chúc ≤ 80 ký tự · chọn 1 chủ đề mong muốn (chip)
Chủ đề (chip)Mạng nhanh hơn · Xem phim/bóng đá · An ninh nhà · Kết nối gia đình · Khác
Kiểm duyệtLọc từ cấm tự động → hàng chờ nhân sự duyệt → lên TV
Gợi ý sản phẩmTheo chủ đề: Mạng nhanh → Internet Wi-Fi 7 · Phim → FPT Play · An ninh → FPT Camera
MànĐiện thoạiTV
GửiForm + .ds-counter + chip chủ đề—
Sau gửi.ds-mod-status "Đang chờ duyệt" + gợi ý sản phẩm phù hợp + quà nhỏ—
Hiển thị—Cây bit-dot; .ds-wish treo trên cành; lời chúc mới .ds-wish--new phóng to 5s; QR góc phải
Thống kê—Cụm .ds-insight "Mong muốn Tết này" (cập nhật mỗi 5 phút)
Rủi roXử lý
Nội dung xấuKhông hiển thị tự động — luôn qua duyệt
Lộ thông tin cá nhânTV chỉ hiện tên + nhóm tuổi, không hiện SĐT

10 · Photobooth — Khoảnh khắc kết nối

MụcNội dung
Ý tưởngẢnh lưu niệm có khung FPT — ảnh chính là quà
LuồngĐăng ký 1 lần → chọn khung → nhận số thứ tự → nhân sự chụp → nhận ảnh qua link/Zalo → in tại chỗ (tuỳ chọn)
Khung3–6 khung: cam (mặc định), xanh, lá; có logo FPT Telecom âm bản + corner shape bit-dot + hashtag
Tham sốDanh sách khung · tỉ lệ (3:4 in, 9:16 story) · cho phép in hay không
MànĐiện thoạiTV / máy nhân sự
Chọn khung.ds-frames lưới 3 cột—
Chờ.ds-queue số thứ tự + "Còn 3 nhóm trước bạn"Danh sách hàng chờ, gọi số
Chụp—Xem trước có khung, đếm 3-2-1, chụp 3 tấm, chọn 1
Nhận ảnh.ds-photo + Tải về / Chia sẻ Zalo / Mã in—
Rủi roXử lý
Logo trong khung sai quy chuẩnKhung xuất từ file thiết kế đã duyệt; logo ≥ 150px trên ảnh xuất
Ảnh có người khácChỉ gửi ảnh cho SĐT đã đăng ký; xoá ảnh trên máy sau sự kiện

Thông số chung cần chốt cho mỗi chiến dịch

Tham sốVí dụ
Lượt / người / ngày3
Cách nhận thêm lượtChia sẻ Zalo +1, check-in booth +1
Kiểu trao quàTheo ngưỡng điểm · Theo xếp hạng · Quay ngẫu nhiên sau khi chơi
Kho quà & tỉ lệBảng riêng, có giới hạn theo ngày/giờ
Themeorange · blue · green
Kênh bậtKiosk · TV · Web · App · Zalo
Giờ chạy8:00–21:00
Tự reset kiosk/TV60s không thao tác

Lịch sử thay đổi

BảnNgàyNgười sửaNội dung
1.02026-11-11DesignerChuyển từ Markdown sang HTML