前回までの状況はこちら。
gitHubにソースファイルを公開しました。
https://github.com/takishita2nd/HokkaidoWar
前回作成したJsonファイルを読み込んで、画面に出力させたいと思います。
まずはJsonデータをオブジェクトで持つためのクラスを作成します。
[JsonObject("MapDataModel")]
public class MapData
{
[JsonProperty("list")]
public List[] list { get; set; }
}
[JsonObject("List")]
public class List
{
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("point")]
public Point[] point { get; set; }
}
[JsonObject("Point")]
public class Point
{
[JsonProperty("x")]
public int x { get; set; }
[JsonProperty("y")]
public int y { get; set; }
}
これは、Jsonをクリップボードにある状態で、「編集」→「形式を選択して貼り付け」→「Json」を選択すると簡単にJsonに合わせてクラスを作成してくれます。
では、実際にJsonを読み込んでオブジェクト化する処理。
class FileAccess
{
private const string _filename = "hokkaido.json";
public static MapData Load()
{
string str = string.Empty;
using (var stream = new StreamReader(_filename, true))
{
str = stream.ReadToEnd();
}
return JsonConvert.DeserializeObject<MapData>(str);
}
}
これをAltseedで画面に表示させます。
class HokkaidoWar
{
MapData mapData = null;
public HokkaidoWar()
{
mapData = FileAccess.Load();
}
public void Run()
{
asd.Engine.Initialize("北海道大戦", 1800, 1000, new asd.EngineOption());
// 下地
var background = new asd.GeometryObject2D();
asd.Engine.AddObject2D(background);
var bgRect = new asd.RectangleShape();
bgRect.DrawingArea = new asd.RectF(0, 0, 1800, 1000);
background.Shape = bgRect;
var r = new Random();
foreach (var map in mapData.list)
{
var color = new asd.Color((byte)r.Next(0, 255), (byte)r.Next(0, 255), (byte)r.Next(0, 255));
foreach (var point in map.point)
{
var geometryObj = new asd.GeometryObject2D();
geometryObj.Color = color;
asd.Engine.AddObject2D(geometryObj);
var rect = new asd.RectangleShape();
rect.DrawingArea = new asd.RectF(24 * point.x + 50, 24 * point.y + 50, 24, 24);
geometryObj.Shape = rect;
}
}
while (asd.Engine.DoEvents())
{
asd.Engine.Update();
}
asd.Engine.Terminate();
}
}
static void Main(string[] args)
{
HokkaidoWar hokkaidoWar = new HokkaidoWar();
hokkaidoWar.Run();
}
色はとりあえず乱数で振ることにしました。
実行結果はこうなりました。