Запись массива Grid 2d в файл с использованием XML в C # - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть огромный 2d массив, который выглядит как

Map grid = new int[,] { {1,1,1,1,1,1},{0,0,0,0,0,0},{2,2,2,2,2,2}}; 

Я использую это описание сети для моногамного проекта. Я создаю редактор уровней для игры, которую разрабатываю, редактор уровней должен записать новую сетку, которая будет создана после использования редактора уровней, во внешний файл. мне было рекомендовано использовать XML для записи моей сетки во внешний файл. позже мне придется прочитать файл и отправить данные новому Конструктор сетки карты.

Я новичок в XML и не нашел хороший рабочий способ для его правильной записи. Я использую Visual Studio Community 2017, C #. Большое спасибо за любую помощь!

1 Ответ

0 голосов
/ 30 апреля 2019

Попробуйте следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;


namespace ConsoleApplication110
{
    class Program
    {
        const string FILENAME = @"c:\temp\test.xml";
        static void Main(string[] args)
        {
            int[,] grid = new int[,] { { 1, 1, 1, 1, 1, 1 }, { 0, 0, 0, 0, 0, 0 }, { 2, 2, 2, 2, 2, 2 } };

            string xml = "<Data></Data>";

            XDocument doc = XDocument.Parse(xml);
            XElement data = doc.Root;

            for (int row = 0; row <= grid.GetUpperBound(0); row++)
            {
                XElement xRow = new XElement("Row");
                data.Add(xRow);
                for (int col = 0; col <= grid.GetUpperBound(1); col++)
                {
                    XElement xCol = new XElement("Column", grid[row, col]);
                    xRow.Add(xCol);
                }
            }
            data.Add(new XElement("music", new object[] {
                new XElement("GEVAs_main_sountrack"),
                new XElement("RonWalking")            
            }));
            doc.Save(FILENAME);

            XDocument newDoc = XDocument.Load(FILENAME);

            int[][] newGrid = newDoc.Descendants("Row").Select(x => x.Elements("Column").Select(y => (int)y).ToArray()).ToArray();
        }
    }
}
...