要讓遊戲達成連線當然要先搞定即時資料庫的設定,至於如何建立專案蠻容易可以GOOGLE到的
我就不打算另外紀錄了。接下來程式方面參考了其他人的做法後,
我先建立了一隻 firabase.js 的檔案,並將資料庫的資訊帶入。
// ../firabase.js
import firebase from "firebase/app";
import "firebase/database";
let config = {
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
authDomain: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
databaseURL: "<https://tictactoxxxxxxxxxxxxxxxsia-southeast1.firebasedatabase.app>",
projectId: "txxxxxxxxxxxxx77ca",
storageBucket: "tixxxxxxxxxxxxxxxpot.com",
messagingSenderId: "xxxx94xxxxxxxxx",
appId: "1:1xxxxxxxxxxxxxxxxxxxxxxx880f5",
measurementId: "xxx-ZxxxQx3"
};
firebase.initializeApp(config);
export default firebase.database();
這時候就可以在你的元件中引入這支檔案呼叫 database 的函式試著修改或新增資料。
我是有另外建立一支 servie檔案,方便引入跟操作方法。
// ../service/dataService.js
import firebase from "../firebase";
const db = firebase.ref("/playerList");
const gameDB = firebase.ref("/gameSet");
class dataService {
getAll() {
return db;
}
getAllGame() {
return gameDB;
}
create(data) {
return gameDB.push(data);
}
updateList(key, value) {
return db.child(key).update(value);
}
updateGame(key, value) {
return gameDB.child(key).update(value);
}
delete(key) {
return db.child(key).remove();
}
deleteAllList() {
return db.remove();
}
}
export default new dataService();
再來遊戲的邏輯與單人的方式一樣我就幾乎沒修改了,主要是要怎麼建立連線。
我的想法是在資料庫建立遊戲列表以及玩家列表,
玩家列表用來給予進入的玩家ID,並記錄 ID 是否被使用了,
遊戲列表則讓玩家進行配對( ID : 0 與 ID : 1 以此類推會配對在同一場遊戲),
進入遊戲後在 onMounted 建立與資料庫的連線,並在資料庫改變時執行對應的函式。
// ../views/Double.vue
// 建立與資料庫的連線以及監聽網頁即將關閉的事件,隨時取得最新資料。
// 如果將 on 改成 once 則只會取得一次資料
onMounted(() => {
DataService.getAll().on("value", confirmPlayer);
DataService.getAllGame().on("value", runGame);
window.addEventListener("beforeunload", (e) => beforeunloadHandler(e));
});
到這邊差不多就剩將原本的遊戲邏輯與資料庫結合了。
透過資料庫同步遊戲雙方的資料後再渲染畫面,這樣就已經能夠看出大概的樣子了。
最後再來第三篇再來講講我當時卡關的部分。