code style

1/12/2015

也來寫卡牌遊戲好了(二)

沒想到我也學富堅一樣拖稿拖超久!


咳! 好Der~ 今天我們來繼續談談怎麼寫卡牌遊戲。

什麼?! 你說卡牌遊戲已經過時了?!?! 現在都是什麼刀什麼塔的!

咳! 好Der~ 今天我們就來談談中國手遊什麼的如何砸錢買廣告。(喂)


呃....那今天要說什麼? (翻翻筆記、抓抓頭)

我覺得是這樣啦,我相信台北市民的智慧,應該是不會在乎要講什麼,這一路走來,不管面對再多的劣勢,我們始終堅持打一場正面的遊戲開發。(喂!!!!)



咳! 好Der~ 今天我們來討論做遊戲的時候要用什麼工具來管理數據資料。 對!就是SQLite、SQLite、SQLite,很重要,所以要講三次。


SQLite就是專門用於獨立單機架構的資料庫系統。輕便短小、沒有負擔、讓人幾乎忘了它的存在。你還在用csv檔案來儲存角色數值嗎?你還在為了資料排序而寫了一堆sorting algorithm嗎?


用了SQLite,馬上就能解決您過去的困擾 (然後多了更多要如何好好利用SQLite的煩惱)(登愣)

首先,效率問題!SQLite是將資料儲存在檔案系統,所以File IO可能會是個問題。幸好,SQLite有提供memory function,可以將SQLite搬到RAM上面做操作,因為現在記憶體夠大,小小的遊戲數值應該是佔不了多少空間。可以參考這邊的作法 link

通常遊戲中的動態數據,例如玩家資料、關卡進度、道具數量,是從遊戲server傳回client儲存。而靜態數據,例如卡片設定、關卡設定、道具設定...等等,往往變動幅度不大,如果每次玩家進行遊戲都得重複下載這些數據,就有點浪費大家的時間與頻寬。比較偷懶的作法就是在更新數據的時候讓server自動產生靜態數據db,然後再通知client下載這個db。
這邊提供一個mysql轉換成sqlite的script

因為靜態數據db會存在client,相信很多人不想讓別人看到你db裡面放了什麼鬼東西,所以我們就得加密db。免費的SQLite雖然有提供加密的界面,但是並沒有實作;官方的實作版本得花錢購買。幸好,wxSQLite3有提供加密的功能,省去我們自己DIY的功夫。

SQLite CLI的加密方式如下
$~/sqlite3secure source.sqlite
.backup /tmp/temp.txt
attach database "encrypted.sqlite" as x key "password";
.restore x /tmp/temp.txt
.quit

好了,到這邊SQLite的基礎建設差不多都搞定了。接下來就是讓開發人員開開心心地在client裡面下SQL指令去查詢遊戲數據囉~ 可喜可賀!
(真的有這麼輕鬆寫意嗎?  噓~~~ 不要傷了皇「城之內」的和氣)

至於用ORM方便物件導向操作什麼的,我只能說「真男人都是直接下SQL指令抓raw data來用Der」
(其實是我沒空研究啦)


時間也差不多了, 咱們下回再見 (天線寶寶說掰掰)