Hextrategy SAVE、LOADを実装した


2019年 10月 4日
 
 
 SAVE、LOADを実装した。

 今回は 1ヶ月くらいだったかな。

 色々と方法を考えたけど、まずデータを「システムデータ」「ゲームデータ」「ユニットデータ」「アイテムデータ」の 4つに分割してセーブデータを作る事にし、データの格納方法は結局オーソドックスにデータを順番に足す方法になった。
 
 

 システムデータは一つだけで、残りのゲームデータ、ユニットデータ、アイテムデータはセーブヶ所事に作られる。

 データの格納方法は、結局ユニットデータ、アイテムデータは足す詰め込み方式だと量が多くて訳が分からなくなるので、そのまま ud(ユニットデータ)、id(アイテムデータ)の変数を別個にセーブする事にした。

 残りのゲームデータを配列変数 dtn2に順番に放り込んで BSAVE命令でセーブする事にした。

 本当は一つのセーブヶ所事に一つのファイルの方がスマートなんだろうけど、そこは初心者なので技術的に難しいし、誰もセーブファイルを覗いたりしないだろうという事だ。
 
 
 ではソースを見てみよう。

 まだ製作途中で全部できてはいないが、ゲームの中断と再開には成功している。

 バグは・・・・しらない。

 見ての通り、ユニツトデータ ud、アイテムデータ idは個別に、変数そのままをセーブ、ロードしている。

 なぜかというと、ゲームがバージョンアップして内部変数が変更になった時に、せーブデータの互換性を考えると、本当はデータ構造に余裕を持たせて普遍の番地を持たせて不動格納すれば良いのだろうけど、それだと余白の分データ量が多くなるし、それならデータ量を抑えるなら加算詰め込み式なんだろうけど、それだとデータ構造が変わった時に対応が難しい、というような事を考えた結果、ユニットとアイテムの膨大なデータはそれだけで取り扱った方が良いだろう、という事になりました。

 要領を得ず済みませんけど、要はそもそもセーブ機能を実装する技術をそんなに知らない、という事ですね。

 例えば、もしかしたら本当は膨大なデータを扱うには MySQLみたいなデータ専用の何かで扱うのが良いのかもしれませんね。
 
 
 残りはゲームデータとして、dtn2(n)の配列変数に、順次データNo.を加算式にデータ格納してます(詰め込み式、かな)

 データのファイル No.は、

bsave “gm_data”+dt_no+”.dat”,dtn2

 のように、間に dt_noとか数字を挟んでやれば、それぞれ別のファイル名になるようです。

 例えば、

bsave “gm_data”+1+”.dat”,dtn2

 と書けば、gm_data1.datというファイルができます。
 
 
 まだ途中なので書いてませんけど、loadの際には

exist “save.dat”
 if strsize=-1 : return

 のように exist命令でそのファイルがあるかどうか確認する作業がいるでしょう。
 
 
 現在は GUIの部分、つまりセーブロードの画面を作ってます。

 今回は以上です。
 
 

コメントを残す

メールアドレスが公開されることはありません。