ZerOx4Cの日記だったもの

インポートだけしました

今日は1日中プログラマ

休日なんて大抵ゲームやってるんですけど、今日はこんぴうたルームのプログラムが盛り上がっていたので、1日中マジェスタッチしていました。


実はXmlTextWriterの扱いが大変で悩んでたんですが、今書き終えてデバッグも終えて凄く良い気分です。
ただ、出来上がったコードは、十中八九本職の人から見たらカスなんじゃないかと思うとgkbrです。
今までどこにもコードを晒した事なんてないけど、今日は見せちゃおっかな!
※まだ全然汎用化してないから、その点は無視してね!(属性も読めない

public void Load(string fileName) {
    if (!File.Exists(fileName)) {
        throw new IOException("\"" + Path.GetFullPath(fileName) + "\"は、存在しません。");
    }
    XmlTextReader xmlReader = new XmlTextReader(fileName);
    xmlReader.WhitespaceHandling = WhitespaceHandling.None;

    Load(xmlReader, xmlReader.Name);

    xmlReader.Close();
}
private string Load(XmlTextReader xmlReader, string currentNodeName) {
    Dictionary<string, string> childElements = new Dictionary<string, string>();

    while (xmlReader.Read()) {
        switch (xmlReader.NodeType) {
            case XmlNodeType.Element:
                childElements[xmlReader.Name] = Load(xmlReader, xmlReader.Name);
                continue;
            case XmlNodeType.EndElement:
                break;
            case XmlNodeType.Text:
                return xmlReader.ReadString();
            default:
                continue;
        }
        break;
    }

    switch (currentNodeName) {
        case "area":
            this.AreaSize = new Size(int.Parse(childElements["width"]), int.Parse(childElements["height"]));
            if (childElements.ContainsKey("background")) {
                this.AreaBackgroundImage = childElements["background"];
            }
            break;
        case "places":
            this.PlaceSize = new Size(int.Parse(childElements["width"]), int.Parse(childElements["height"]));
            this.PlaceFreeColor = Color.FromArgb(int.Parse(childElements["freecolor"], NumberStyles.AllowHexSpecifier));
            this.PlaceUsedColor = Color.FromArgb(int.Parse(childElements["usedcolor"], NumberStyles.AllowHexSpecifier));
            this.PlaceHotColor = Color.FromArgb(int.Parse(childElements["hotcolor"], NumberStyles.AllowHexSpecifier));
            break;
        case "place":
            this.Places.Add(new Place(childElements["id"], new Point(int.Parse(childElements["x"]), int.Parse(childElements["y"]))));
            break;
    }
    return "";
}


コメントが無いとか・・・まぁ、色々とエクストリームですね。
ただここから拘ってしまうと火曜のテスト稼動の機会に間に合わんので、今回はこんなスパゲッティになりました。よくあることよくあること。


あとは大体作ったものを組み合わせるだけだから楽だよ!