سؤال

أنا أقوم ببناء لعبة في Visual Studio 2008 ومن أجل بناء مستويات، سيكون لدي نوعان من الملفات (أكثر من ذلك في الواقع ولكن هذين هو الوحيدين مهمون لسؤالي) أحتاج إلى تحليل. واحد سوف يملي محتويات المستوى وسوف تبدو مثل هذا:

LevelName = "مستوى العينة"

Object1Type = "customobject"

Object1File = "Widefloor_DF"

ObjectionPosition = 600،600.

Object2Type = "Circle"

Object2Position = 550، 500

Object2mass = 5.

إلخ.

سوف يملي الآخر خصائص الأشياء المخصصة، وتبدو شيئا مثل هذا:

الاسم = "أرضية واسعة"

الكتلة = 1.

geometrymap = "Widefloor_gm"

Isstata = صحيح

إلخ.

أنا لست معتادا جدا على Regexes (اقرأ: أنا لا أحبهم لأن المظهر الذي يشبه إلى حد كبير ضوضاء الخط للفهم بسهولة) وكنت أتساءل عما إذا كانت هناك طريقة أسهل من استخدام طن من Regxes؟

تحرير: كنت أعرف أنني نسيت شيئا! أنا حقا أكره ملفات XML، لذلك كنت أفضل حقا عدم استخدامها (waaaaaaaaay verbose بالنسبة لي). تحرير 2: أحب التنسيق الذي وصلت إليه ويفضل عدم التغيير.

هل كانت مفيدة؟

المحلول

ماذا عن استخدام ملفات XML؟ يمكنك قراءة وكتابةها بسهولة باستخدام كائنات XMLReader و XMLWoriter، ولن تضطر إلى التعامل مع Regex على الإطلاق.

<Level name="Sample Level">
   <Object type="CustomObject" file="WideFloor_DF" positionX="600" positionY="600" />
   <Object type="Circle" file="WideFloor_DF" positionX="500" positionY="500" mass="5" />
</Level>     

نصائح أخرى

إذا كنت ستحصل على ملفاتك بتنسيق مقروء بشري على أي حال، فلماذا لا تستخدم XML؟

إذا كان لديك التحكم في تنسيق الملف، فقد تجرب شيئا به محلل محلل موجود، مثل ملفات XML أو INI، كلاهما يحتوي على محلل في .NET.

إذا كنت تباع بالتنسيق أعلاه، فقد تستخدم أداة مثل ليكس لتوليد المحلل المحلل الخاص بك بالنسبة لك.

قد يكون نهج واحد بديل هو تحديد فئة لديها خصائص / مجموعات لعقد كل بيانات التكوين هذه، وجعلها [serializable]. يمكنك بعد ذلك ملء تكوين مثال، وتسلسلها إلى ملف، ثم لديك ملف تكوين XML الكامل الذي يمكنك تعديله باليد. عندما تكون جاهزا لاستخدام التكوين، قم فقط بالتحقق من ملف XML مرة أخرى في كائن التكوين في تطبيقك.

إذا أصرت تماما على استخدام تنسيق الملفات هذا، فيمكنك إنشاء كائن يقرأ سطر الملف حسب السطر، وسحب الأشياء من الجانب الأيسر من "=" ووضعه في قاموس على أنه المفتاح وكل شيء إلى يمين "=" كقيمة.

ومع ذلك، يجب أن أضرب الإجابات المذكورة أعلاه التي تقول استخدام مستند XML مع كائن XMLDocument. هل نظرت إلى LinQ إلى XML؟

حسنا، إذا فهمت سؤالك، فأنت تريد أن تقوم بتنظيم محتويات الملفات بحيث تكون التحليل أسهل بكثير بالنسبة لك، فإن XML هو خيار جيد لذلك، و XSD أيضا لوصف محتوى ملفات XML الخاصة بك، LINQ إلى XML سيجعلها جيدة جدا لقراءتها من C #.

إذا كنت تستخدم XML، فيمكنك تحسين الملفات مباشرة في كائن حتى لا تحتاج إلى تحليلها على الإطلاق.

لماذا لا تسلسل ثنائي الكائنات الخاصة بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top