# منطق لعبة كنز الصحراء

العرض = ٥
الارتفاع = ٥
الطاقة_الكاملة = ٨
موضع_البداية = [٣، ٣]
موضع_الكنز = [٥، ٢]


دالة سجل_رساله(نص):
    عام رساله
    رساله = نص
    السجل.اضف(نص)


دالة بعد():
    ارجع مطلق(موضع_اللاعب[٠] - موضع_الكنز[٠]) + مطلق(موضع_اللاعب[١] - موضع_الكنز[١])


دالة تلميح():
    البعد = بعد()
    اذا وجد:
        ارجع "ظهر الكنز"
    والا_اذا البعد == ٠:
        ارجع "الرمل يلمع تحت قدميك"
    والا_اذا البعد <= ٢:
        ارجع "الكنز قريب جدا"
    والا_اذا البعد <= ٤:
        ارجع "تسمع صدى معدنيا بعيدا"
    والا:
        ارجع "الصحراء واسعة والكنز أبعد"


دالة اسم_الخانة(س، ص):
    اذا موضع_اللاعب[٠] == س و موضع_اللاعب[١] == ص:
        ارجع "لاعب"
    اذا وجد و موضع_الكنز[٠] == س و موضع_الكنز[١] == ص:
        ارجع "كنز"
    اذا مطلق(س - موضع_الكنز[٠]) + مطلق(ص - موضع_الكنز[١]) == ١:
        ارجع "قريب"
    ارجع "رمل"


دالة اصنع_لوحه():
    اللوحه = []
    لكل ص في نطاق(١، الارتفاع + ١):
        صف = []
        لكل س في نطاق(١، العرض + ١):
            صف.اضف(اسم_الخانة(س، ص))
        اللوحه.اضف(صف)
    ارجع اللوحه


دالة اعط_الحاله():
    ارجع {
        "العرض": العرض،
        "الارتفاع": الارتفاع،
        "الطاقة": الطاقة،
        "الطاقة_الكاملة": الطاقة_الكاملة،
        "وجد": وجد،
        "انتهت": انتهت،
        "رسالة": رساله،
        "تلميح": تلميح()،
        "سجل": السجل[-٥:]،
        "اللوحة": اصنع_لوحه()،
        "اللاعب": {"س": موضع_اللاعب[٠]، "ص": موضع_اللاعب[١]}،
        "الكنز": {"س": موضع_الكنز[٠]، "ص": موضع_الكنز[١]}،
    }


دالة ابدا():
    عام موضع_اللاعب، الطاقة، وجد، انتهت، رساله، السجل
    موضع_اللاعب = موضع_البداية.انسخ()
    الطاقة = الطاقة_الكاملة
    وجد = خطأ
    انتهت = خطأ
    السجل = []
    سجل_رساله("بدأت الرحلة")
    ارجع اعط_الحاله()


دالة حرك(فرق_س، فرق_ص، حاجز):
    عام الطاقة
    جديد_س = موضع_اللاعب[٠] + فرق_س
    جديد_ص = موضع_اللاعب[١] + فرق_ص

    اذا جديد_س < ١ أو جديد_س > العرض أو جديد_ص < ١ أو جديد_ص > الارتفاع:
        سجل_رساله("توقفت عند " + حاجز)
        ارجع خطأ

    موضع_اللاعب[٠] = جديد_س
    موضع_اللاعب[١] = جديد_ص
    الطاقة = الطاقة - ١
    سجل_رساله("تحركت خطوة فوق الرمل")
    ارجع صحيح


دالة نفذ_امر(الامر):
    عام الطاقة، وجد، انتهت

    اذا انتهت:
        سجل_رساله("ابدأ جولة جديدة")
        ارجع اعط_الحاله()

    النص = الامر.جرد().صغير()

    اذا النص == "شمال" أو النص == "ش":
        حرك(٠، -١، "الكثيب الشمالي")
    والا_اذا النص == "جنوب" أو النص == "ج":
        حرك(٠، ١، "الوادي الجنوبي")
    والا_اذا النص == "شرق" أو النص == "ق":
        حرك(١، ٠، "الصخر الشرقي")
    والا_اذا النص == "غرب" أو النص == "غ":
        حرك(-١، ٠، "السراب الغربي")
    والا_اذا النص == "بحث" أو النص == "ب":
        اذا بعد() == ٠:
            وجد = صحيح
            انتهت = صحيح
            سجل_رساله("حفرت قليلا فظهر الكنز")
        والا:
            الطاقة = الطاقة - ١
            سجل_رساله("فتشت المكان ولم تجد شيئا")
    والا_اذا النص == "خروج" أو النص == "اخرج":
        الطاقة = ٠
        انتهت = صحيح
        سجل_رساله("غادرت الصحراء قبل العثور على الكنز")
    والا:
        سجل_رساله("أمر غير معروف")

    اذا الطاقة <= ٠ و ليس وجد:
        انتهت = صحيح
        سجل_رساله("نفدت الطاقة وبقي الكنز مدفونا")

    ارجع اعط_الحاله()


ابدا()
