Hướng dẫn
Trò chơi đa người chơi với lời mời
Sao chép trang
Một phòng cho hai người chơi. Tạo nó trên máy chủ của bạn, mời một người bạn vào đó với bộ chọn bạn bè của Lia hoặc một liên kết, và đưa cả hai người chơi vào cùng một phòng.
Ý tưởng: một phòng có một id, và id đi vào lời mời's startParam. Người nào mở lời mời sẽ mở ứng dụng của bạn với startParam đó, và trang của bạn sẽ tham gia cùng họ vào phòng. Lia'riêng của họ Lia XO hoạt động theo cách này.
#1. Tạo một phòng trên máy chủ của bạn
app.post("/api/rooms", async (req, res) => {
const playerId = await playerFrom(req.body.session); // see Verify on your server
if (!playerId) return res.status(401).end();
const room = "room-" + crypto.randomUUID().replace(/-/g, "").slice(0, 10);
await db.createRoom(room, { host: playerId, players: [playerId] });
res.json({ room });
});
app.post("/api/rooms/join", async (req, res) => {
const playerId = await playerFrom(req.body.session);
if (!playerId) return res.status(401).end();
const room = await db.room(req.body.room);
if (!room) return res.status(404).json({ error: "no_room" });
if (room.players.length >= 2 && !room.players.includes(playerId)) return res.status(409).json({ error: "full" });
await db.addPlayer(req.body.room, playerId);
res.json({ room: req.body.room });
});ID phòng phải phù hợp với một startParam: 1 đến 64 chữ cái, chữ số, _ và -.
#2. Mời bạn bè
async function playWithAFriend() {
const { room } = await api("/api/rooms", {});
showWaiting(room);
const { invited } = await Lia.inviteFriend({ startParam: room });
if (!invited) Lia.toast("Share the link to invite someone");
}
// Or a link to send anywhere: opens your app in Lia, or the App Store without it.
async function shareRoom(room) {
await Lia.share("Play with me: " + Lia.inviteLink(room));
}Mỗi người bạn chọn sẽ nhận được một thẻ trong cuộc trò chuyện Lia của họ. Lia chỉ cho phép mọi người mời bạn bè của họ, và chỉ những người bạn có thể mở ứng dụng của bạn (trong khi nó'trong thử nghiệm, chỉ có các nhà kiểm thử của bạn).
#3. Đặt chân vào phòng
Đọc startParam khi ứng dụng của bạn mở ra, và lắng nghe khi một cái đến trong khi nó'mở (người đó chạm vào một lời mời thứ hai):
function route(startParam) {
if (startParam && startParam.startsWith("room-")) joinRoom(startParam);
}
Lia.init().then(function () {
route(Lia.startParam);
Lia.ready();
});
Lia.on("startParam", function (data) { route(data.startParam); });
async function joinRoom(room) {
try {
await api("/api/rooms/join", { room });
openTable(room);
} catch (error) {
Lia.toast(error.message === "full" ? "That game is full" : "That game has ended");
}
}Một startParam chỉ là một gợi ý: bất kỳ ai cũng có thể tạo một liên kết với bất kỳ startParam nào, vì vậy máy chủ của bạn quyết định xem phòng có tồn tại và người chơi có thể tham gia hay không.
#4. Chơi trực tiếp
Kết nối cả hai người chơi đến máy chủ của bạn (một WebSocket thường được sử dụng), và xác minh mỗi người chơi'phiên làm việc trước khi tham gia vào phòng. Trong khi trò chơi đang diễn ra:
Lia.enableClosingConfirmation(); // "Leave the game?" if they close
Lia.disableVerticalSwipes(); // a swipe down won't close the sheet mid move
Lia.onPause(function () { socket.send(JSON.stringify({ type: "away" })); });
Lia.onResume(function () { socket.send(JSON.stringify({ type: "back" })); });#5. Lượt của bạn, qua thông báo
Khi nó'người nào đó'di chuyển của họ và họ'đã rời khỏi ứng dụng của bạn, một thông báo với phòng như startParam mang chúng trở lại ngay lập tức:
{ "playerId": "p_3f9c0a6d1b2e4f5a6b7c", "text": "@kofi played. Your move.", "startParam": "room-a81c2e09f4" }#Bảng công khai
Mời bạn bè để họ tham gia. Để bất kỳ ai trên Lia có thể tham gia, hãy liệt kê phòng trong phòng chờ trong khi chờ đợi:
// When the room is made: list it (as the host, with one seat taken).
await lia("POST", "/lobby/tables", { tableId: room, hostPlayerId: playerId, seats: 2, taken: 1, title: "Quick game" });
// When someone joins from the lobby: seat them through Lia first (it refuses blocked players and full tables).
app.post("/api/rooms/sit", async (req, res) => {
const playerId = await playerFrom(req.body.session);
if (!playerId) return res.status(401).end();
try {
const { full } = await lia("POST", `/lobby/tables/${encodeURIComponent(req.body.room)}/sit`, { playerId });
await db.addPlayer(req.body.room, playerId);
if (full) startGame(req.body.room);
res.json({ room: req.body.room });
} catch (error) {
res.status(409).json({ error: error.data?.error ?? "failed" }); // full, not_found, own_table
}
});
// When the game starts or the room closes: take it out (safe to repeat).
await lia("DELETE", `/lobby/tables/${encodeURIComponent(room)}`);Trên trang của bạn, hiển thị các bảng mở, và xếp chỗ cho những người đã chọn bàn của bạn trong Lia'lobby riêng của họ (họ đến với startParam lobby-<table id>):
const { tables } = await Lia.lobby.tables();
renderTables(tables, (table) => api("/api/rooms/sit", { room: table.id }));
function route(startParam) {
if (startParam?.startsWith("lobby-")) return api("/api/rooms/sit", { room: startParam.slice(6) }).then(openTable);
if (startParam?.startsWith("room-")) return joinRoom(startParam);
}Người lạ có thể't trò chuyện qua Lia, các khối được tôn trọng, và người chơi có thể báo cáo với nhau.
#Những giới hạn cần biết
- Một người có thể mời 20 bạn bè vào ứng dụng của bạn mỗi ngày, vì vậy lời mời luôn là điều mọi người chào đón trong các cuộc trò chuyện của họ.
- Một chủ có thể có 3 bảng công khai mở trong ứng dụng của bạn cùng lúc, và một danh sách kéo dài tối đa một giờ.
Lia.inviteFriend()câu trả lời{ invited }, không bao giờ là người được mời: máy chủ của bạn sẽ biết ai tham gia khi họ tham gia.
Được dịch tự động. Tiếng Anh là nguồn tin cậy. Đọc bằng tiếng Anh