用木蘭語言重寫 Python 文字冒險遊戲(九到十一章)

前文,繼續到第十一章,期間根據須要對些許木蘭語言功能進行了重現,併發布了木蘭版本 0.0.15.1 。遊戲例程代碼已經開源在 gitee,第十一章運行效果以下,歡迎提 issue。javascript

演示

注:因爲 try...catch 語法仍然期待合做者一同完成(見此文末),所以例程中的異常處理部分暫且略過,不影響遊戲功能。java

下面是第十一章相比第八章新添加的主要部分,世界.ul,用於設定玩家可走到的每格的情況,爲以後的打怪等等作準備:git

type 地塊 {
    func $地塊(x, y) {
        $x = x
        $y = y
    }

    func $介紹 {
        throw NotImplementedError("請建立子類")
    }
}

type 起始位置 : 地塊 {
    func $介紹 {
        return "\n        " +
        "你發現身處山洞,壁上有根搖曳的火把。\n        " +
        "能夠看到四條出路,每條都陰暗攝人。\n\n"
    }
}

type 日常位置 : 地塊 {
    func $介紹 {
        return "\n        " +
        "此處平淡無奇\n\n"
    }
}

type 取勝位置 : 地塊 {
    func $介紹 {
        return "\n        " +
        "遠處有道亮光……\n        " +
        "……越近越亮!是陽光!\n\n\n        " +
        "重見天日了!\n"
    }
}

地圖 = [
    [nil, 取勝位置(1,0), nil],
    [nil, 日常位置(1,1), nil],
    [日常位置(0,2), 起始位置(1,2), 日常位置(2,2)],
    [nil, 日常位置(1,3), nil]
]

func 走到(x, y) {
    return nil if x < 0 or y < 0
    //try:
        return 地圖[y][x]
    //except IndexError:
    //    return nil
}

原書第九到十一章基本在逐漸完善遊戲功能,涉及的語言語法並很少。所以木蘭 0.0.15.1 僅添加了 throw 語法和 isa 內置函數(與 Python 的 isinstance 對應)。但期間也發現尚待深究的問題,如引用模塊所用包路徑與 Python 規則不一樣。併發

相關文章
相關標籤/搜索