跳到主要內容

發表文章

目前顯示的是有「Ini」標籤的文章

C++ INI 類別的設計

使用INI格式,底下有幾個優點。 格式簡單易懂 、容易使用 編輯器隨處可得,編輯維護相對容易 實作一個INI Parser不難 在程式裡,無論是作為程式設定儲存格式,或是作為小型的資料庫格式,使用INI資料格式對於以上需求,綽綽有餘。Good Game Editor的 資料格式 就是現成的實例。 ; INI的格式內容非常結構化,一個INI是由Section組成,每一個Section裡面可以包含Item,每一個Item是由一對Key和Value組成。 一個Section由字元'['及']'所構成,括號所包圍起來的字串為Section的名稱。如[Player]。 Item由Key及Value成對以字元'='隔開組成。如Name=Waync Cheng。 所有在字元';'後面到行尾的文字都視為註解而被忽略。 底下是一個簡單的範例。 [Player] Name=Waync Cheng Windows提供了 GetPrivateProfileString 系列的API可以讀寫INI的資料內容,使用Windows API寫入INI檔案的方式如下。 char StrName[] = "Waync Cheng" WritePrivateProfileString("Player","Name",StrName,"c:\\test.ini"); 從INI檔案讀出的方法如下。 char StrName[MAX_LEN]; GetPrivateProfileString("Player","Name","DefaultName", StrName, MAX_LEN, "c:\\test.ini"); ; Windows API使用起來稍微不方便,同時也不具跨平台,底下使用C++語言設計一個新的INI讀寫類別,主要的設計考量是更方便的讀寫INI。 C++語言提供了operator  overloading 的機制,正好可以被我們利用來作為一個介面,讓我們可以更直覺的讀寫INI的內容。 ...

good的資料格式

自從使用 Ini 之後我就不再碰 XML 了,在任何情況下,只要情況允許我都會儘可能的使用Ini作為資料格式或設定檔案。雖然Ini不像XML那樣天生就能表達結構化的資料,但也不是完全不行,至少應用在good上就沒什麼問題。 good專案資料格式使用Ini,再透過smallworld2的Ini模組就能很簡單的操作讀寫。 + + + 專案檔頭 每個good專案檔裡,至少會有個名稱叫作good的Section,這相當於檔案的Header。這個Section包含了整個專案的內容資訊,是個總表。底下是個典型的範例。 [good] version=0.3 name=mmc window=176 208 texs=1 maps=2 3 sprites=4 5 6 7 8 9 10 11 12 13 14 15 levels=18 如上。格式版本是0.3;專案名稱是mmc;視窗的大小或解析度是176X208;有一個ID為1的貼圖資源;有二個ID分別是2和3的地圖資源;有12個精靈資源;以及一個ID為18的關卡資源。 多麼簡單一目了然,這就是我喜歡使用Ini的原因。 Script資源 接著有個叫scripts的Section,這個Section的內容是Script資源列表,和其它類型的資源比較起來是比較特別的,因為它不是在Section good裡面的一個項目,而是獨立出來一個Section。底下是個範例。 [scripts] 16=./mmc.lua 在scripts Section裡,每一個項目表示一個Script資源,項目的Key值表示為這個Script資源的ID,而項目的Value值表示為Script資源的檔案路徑。在good裡面的所有牽涉到檔案路徑的欄位,內容一律都是相對於專案檔本身的相對路徑。 貼圖資源 在專案檔頭裡列出的貼圖資源,每一個項目都對應到一個貼圖資源Section,底下是個簡單的範例。 [tex5] name=tileset fileName=./weeder.bmp hasKeyColor=1 keyColor=253 0 255 貼圖資源Section的名稱固定以tex開始,後面的數字表示這個資源的ID。其它不同類型的資源也是以同樣的規則定義,所以你大概可以猜到Section map2就是ID為2的地圖資源。 上面的例子可以清楚的看到,這個貼圖的ID為5;...