C#でドミノエディタを作る(メニューとファイルの読み書き)


アニメ『王室教師ハイネ』
美男子ばかりのアニメです。

C#でドミノエディタの続きです。編集したドミノ配置のセーブとロードの機能を作ります。

ファイル読み込みするためusing追加。

using System.IO;
using System.Text;

ロードとセーブのメニューを追加します。

  void menu(){
    this.Menu = new MainMenu();
    MenuItem item1 = new MenuItem("ファイル(&F)");
    MenuItem item11 = new MenuItem("ロード(&L)");
    MenuItem item12 = new MenuItem("セーブ(&S)");
    item1.MenuItems.Add(item11);
    item1.MenuItems.Add(item12);
    item11.Click += new EventHandler(load);
    item12.Click += new EventHandler(save);
    this.Menu.MenuItems.Add(item1);
  }

セーブ機能から作ります。セーブするファイル名は固定にしています。
日本語(SJIS)も使えるようにしておきます。

  void save(object sender, EventArgs e){
    StreamWriter s = new StreamWriter(
      basedir+"savedata.txt", true,Encoding.GetEncoding("Shift_JIS"));
    for(int y=0;y<ylen;y++){
      for(int x=0;x<xlen;x++){
        s.WriteLine( "{0},{1},{2},",x,y,this.mat[x,y].state);
      }
      s.WriteLine( "\n");
    }
    s.Close();
  }

使ってみます。
適当にドミノを配置して、

実行すると、savedata.txtというファイルに、以下のようなデータが保存されます。
x座標,y座標,値(ドミノの向き),の順に各行に収まっています。

0,0,1,
1,0,2,
2,0,3,
3,0,0,
4,0,0,
(省略)

0,1,2,
1,1,2,
2,1,2,
3,1,0,
4,1,0,
(省略)

ロード機能です。

  void load(object sender, EventArgs e){
    char[] delim = {','};
    string line;
    int x,y,state;
    StreamReader s = new StreamReader(
      basedir+"savedata.txt",Encoding.GetEncoding("Shift_JIS"));
    while((line = s.ReadLine()) != null){
      string[] arr = line.Split(delim);
      if (arr.Length >= 3){
          x = int.Parse(arr[0]);
          y = int.Parse(arr[1]);
          state = int.Parse(arr[2]);
          this.mat[x,y].state = state;
	  if(this.mat[x,y].state>0){
          this.mat[x,y].Image = Image.FromFile(basedir + img[this.mat[x,y].state]);
	  }
      }
    }
    s.Close();
  }

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA