動作確認はこちらからどうぞ。

このゲームはすぐには終わらないのでゲームの途中で保存し、あとで続きをプレイできる機能を追加します。データをファイルとしてダウンロードして、これをアップロードすればその場面から再開できるようにするのです。

C#であれば複数のデータを簡単にXMLファイルとして保存できますが、Blazor WebAssemblyでこれをやろうとすると、XmlSerializer.Deserializeで例外(Synchronous reads are not supported)が発生します。XmlSerializer.Serializeは問題なくできるのですが、どうなっているのでしょうか?

XmlSerializer.Deserializeを非同期で呼び出しても同じエラーが出るので他の方法でやることにします。

ファイルをダウンロードできるようにするには index.htmlを以下のように変更します。

Index.razorにダウンロード用のボタンとアップロード用のボタンを追加します。

[保存]ボタンをクリックするとテキストファイルがダウンロードされるのですが、これはいつでもできるのではなくターンが回ってきたときだけにします。

[保存]ボタンをクリックすると以下の処理がおこなわれます。城のID、名前、城主など、それからCastleStatus.AttackingCorpsプロパティやCastleStatus.SiegingCorpsプロパティがnullではない場合はそれらの情報もカンマで区切ってテキストファイルとして保存します。

ファイルがアップロードされたらOnInputFileChangeメソッドが実行されます。

アップロードされたファイルを一行ずつ読み込んで、これをカンマで分割します。これを元にCastleStatusのプロパティをセットします。

攻め込んだ軍団が城に戻れなくなっている場合、従来のCorpsクラスのコンストラクタでは対応できないので、別のコンストラクタを作成しました。

以下は城に戻れない場合のCorpsクラスのコンストラクタです。