2012-04-17 67 views
5

我正在開發一個網站,這是一種遊戲。用戶的進度保存在MySQL數據庫中。如何在MySQL數據庫中保存遊戲進度

我想通過一個表保存一個列保存(ID)和一個列進度,其中進度是數據類型文本。當用戶開始時,進度被設置爲(例如)'0'。如果他進入第1級,進度設置爲'0#1',第2級設爲'0#1#2'。級別的順序是免費的,我想保存它。所以進展可以是'0#4#2#15'等等。

這是一個很好的方法嗎?我沒有使用SQL的經驗,我不想做一些非常愚蠢的事情。我已經讀了很多有關表格,外鍵和什麼的令人困惑的信息...

我想感謝您的閱讀時間,我期待着答覆。

瑞安

+0

請把它分成多個問題。 – 2012-04-17 13:31:03

+0

你可能是指「緩存」而不是「緩衝」? – Widor 2012-04-17 13:31:25

+0

@Jan你是對的。 – Ryan 2012-04-17 13:45:13

回答

2

回答你的問題1

我不會接近你的問題的這種方式。我將創建3個表格:一個Levels表格('levelKey'的主鍵),一個Users表格('userKey'的主鍵)和一個User_Levels表格,其中有一個組合鍵'levelKey'和'userKey'。當用戶完成一個級別時,只需插入User_Levels表。然後看用戶是否已經完成了水平是一個簡單的選擇:

SELECT 'a' FROM User_Levels WHERE userKey = ? AND levelKey = ? 

如果行數> 0,用戶已經完成了水平

+0

在我看來,這是一個很大的方法。如果您需要保持完成級別的順序,則可以在User_Levels中具有序號值的第三列。例如,如果用戶2以該順序完成級別1,4和2,則該表將具有'(userKey,levelKey,ordinalValue)'條目'(1,1,1),(1,4,2), (1,2,3)'。 – mdoyle 2012-04-17 16:08:37

+0

是的,我只列出了答案中必要的列(鍵)。您可以使用任何描述級別,用戶或兩者之間關係的信息(User_Levels)。 – 2012-04-17 16:19:34

+0

「這是一個很好的方法」=「觀察者是更好的方法」。嘖。 – mdoyle 2012-04-17 19:30:27

1

關於你的第一個問題,如果遊戲/水平是非線性的,我會採取不同的方法;我只需添加一個包含用戶ID列和已完成級別列的表。因此,如果用戶1完成水平0,4和7,我的表將有3行:

UID levels_completed 
1 0 
1 4 
1 7 

關於你的其他問題,您可以使用JavaScript事件和Ajax檢測頁面關閉,但我不會依靠那個;我會在需要時運行查詢。如果你的會話被破壞,你已經太晚了...

+0

那麼,水平更像是「部分」,這將是一堆。順序很重要,因爲玩家可以前後移動。 當玩家恢復遊戲時,我正在讀取數組的進度。 隨着大量用戶和每個用戶的大量部分,這仍然是一個好方法嗎? – Ryan 2012-04-17 13:51:29

+0

@Ryan這只是一個基本的例子,但如果你想添加更多的信息,你可以添加包含附加信息的列。無論哪種方式,在這樣的表格上操作都比在壓縮到一個字段中的大量信息的表格上更容易。 – jeroen 2012-04-17 13:54:51

2

至於問題2,我會說查詢量不是問題。畢竟,你是數據寫入數據庫,不能訪問它。就我個人而言,只要用戶實際完成一個級別,我就會向數據庫發送一個「保存」。

watcher已經發布了一個很好的方法,將關卡和用戶分成不同的表格。從進度登錄到User_Levels的順序可以看出進度的順序,所以不需要存儲像1#3#4#的東西#9

您可能想要用ajax發送保存在後臺,所以你不要打斷遊戲。例如,看看jQuery's $.post method。或者,如果您的遊戲處於Flash中,則可以使用URLRequest。

相關問題