الدرس 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
03

تلميحات

0/3
دروس المسارأتممت 0 من 10

تتعلّم هنا الأنماط التي تُبنى بها سكربتات الألعاب وخوادمها، مثل الأحداث والكيانات والمؤقّتات وآلات الحالات.

مستواه متقدّم، وفيه 10 دروس مجموع مدّتها ساعتان ونصف.

main.lua
المخرجاتLua 5.4 (wasmoon)

نحمّل بيئة Lua الآن.

–/6

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

تجد 6 فحوص في بطاقة «المطلوب».

دروس المسارأتممت 0 من 10

تتعلّم هنا الأنماط التي تُبنى بها سكربتات الألعاب وخوادمها، مثل الأحداث والكيانات والمؤقّتات وآلات الحالات.

مستواه متقدّم، وفيه 10 دروس مجموع مدّتها ساعتان ونصف.