الدرس 10 من 10

حفظ اللعبة وتحميلها

هدف الدرس

جدول إلى نصّ وعودة بلا load

01

الشرح

حفظ اللعبة يحوّل حالتها إلى نصّ يُكتب في ملف أو قاعدة بيانات، ثم يعيد بناءها منه عند العودة. وأقصر طريق في Lua أن تكتب الجدول كودًا مثل {hp=100} ثم تنفّذه بـload. وهذا بالضبط ما لا تفعله: ملف الحفظ في يد اللاعب، ومن يستطيع تعديله يستطيع أن يكتب فيه كودًا ينفّذه الخادم. هنا تحلّل النصّ بنفسك.

والتنسيق البسيط سطر لكل قيمة: المفتاح، ثم نوع القيمة، ثم القيمة، مثل gold=n:250 وname=s:ليان. والجدول الداخلي بمفتاح منقّط: pos.x=n:3. والنصّ الذي فيه سطر جديد يُرمَّز قبل الكتابة، وإلا انكسر الملف عنده.

والفخّ في الأنواع: من يكتب كل شيء بـtostring ويقرؤه نصًّا يعيد "false" بدل false، والنصّ في Lua صادق في الشرط، فيعود اللاعب الميّت حيًّا. و"007" يصير 7 إن حوّلت كل ما يشبه الرقم. لذلك يُحفظ النوع مع القيمة.

02

المطلوب

اكتب serialize(data) تُرجع نصًّا، وdeserialize(text) تُرجع جدولًا يساوي الأصل. مفاتيحه أسماء، وقيمه أعداد ونصوص وقيم منطقية، أو جداول داخلية بمستوى واحد من هذه الأنواع. تعود الأنواع كما كانت، وتعود النصوص سليمة ولو فيها أسطر أو =، ولا يُستعمل load.

معايير التصحيح

6 معايير
  1. الجدول المسطّح يعود كما كان
  2. العدد يعود عددًا والنصّ نصًّا
  3. false تعود false لا نصًّا
  4. الجدول الداخلي يعود بمفاتيحه
  5. النصّ بأسطر ورموز يعود سليمًا
  6. التحميل لا يستعمل load
main.lua
المخرجاتLua 5.4 · wasmoon

جارٍ تحميل Lua…

–/6

يبدأ الفحص حين تجهز البيئة.

6 معايير في بطاقة «المطلوب».