الدرس 10 من 10
حفظ اللعبة وتحميلها
- 16 دقيقة
- 6 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
من جدول إلى نصّ والعودة دون load
الشرح
حفظ اللعبة يعني أن تحوّل حالتها إلى نصّ يُكتب في ملف أو قاعدة بيانات، ثم تعيد بناءها منه عند العودة. وأقصر طريق في Lua أن تكتب الجدول كودًا مثل {hp=100} ثم تنفّذه بـload، وهذا بالضبط ما يجب ألّا تفعله، لأن ملف الحفظ في يد اللاعب، ومن يستطيع تعديله يستطيع أن يكتب فيه كودًا ينفّذه الخادم. لذلك ستحلّل النصّ هنا بنفسك.
والتنسيق البسيط أن تكتب سطرًا لكل قيمة، فيه المفتاح، ثم نوع القيمة، ثم القيمة، مثل gold=n:250 وname=s:ليان، وأن تكتب الجدول الداخلي بمفتاح فيه نقطة مثل pos.x=n:3. والنصّ الذي فيه سطر جديد يجب أن تُرمّزه قبل الكتابة، وإلا انكسر الملف عند ذلك السطر.
وانتبه إلى الأنواع، فإن كتبت كل شيء بـtostring وقرأته نصًّا عاد إليك "false" بدل false، وأي نصّ في Lua يُعدّ صحيحًا في الشرط، فيعود اللاعب الميّت حيًّا. وكذلك يصير "007" الرقم 7 إن حوّلت كل ما يشبه الرقم، لذلك تحفظ النوع مع القيمة.
المطلوب
اكتب serialize(data) التي تُرجع نصًّا، وdeserialize(text) التي تُرجع جدولًا يساوي الأصل. ومفاتيح هذا الجدول أسماء، وقيمه أعداد ونصوص وقيم منطقية، أو جداول داخلية بمستوى واحد فيها هذه الأنواع نفسها. ويجب أن تعود الأنواع كما كانت، وأن تعود النصوص سليمة ولو كان فيها أسطر جديدة أو =، دون أن تستعمل load.
الفحوص
6 فحوص- الجدول ذو المستوى الواحد يعود كما كان
- العدد يعود عددًا والنصّ نصًّا
- القيمة false تعود false لا نصًّا
- الجدول الداخلي يعود بمفاتيحه
- النصّ الذي فيه أسطر ورموز يعود سليمًا
- التحميل لا يستعمل load