木蘭編程語言重現:通過玩三歲游戲完善語言功能

2020/8/9 7:12:42 來源:開源中國 作者:吳烜2020 責編:微塵

某個號稱三歲以上就可以玩的桌游,抽象之后的基本問題就是在一個區域中如何擺放三種形狀(朝向隨意)。

比如區域:

三種形狀(短折,長折,一字),各種朝向如下:

這是迄今為止用木蘭語言編寫的最復雜的實用代碼,包括一個遞歸搜索,長約 150 行,測試約 70 行。其中一個類如下:

細節和算法有很大改進空間,歡迎指教。

期間根據需要復現了木蘭的如下功能:

== 操作符重載

type 點 {
    func $點(橫, 縱) {
      self.橫, self.縱 = 橫, 縱
    }

    operator == (另一點) {
      return self.橫 == 另一點.橫 and self.縱 == 另一點.縱
    }
}

可指定函數返回類型

type Person {
    {
        name = "小白"
    }

    func $__init__(name) {
        self.name = name
    }
}

func shout(id): Person {
    return Person(id)
}

print(shout("Mulan1").name)

根據范圍取子列表

比如 a[1:3], a[1:]

添加內置函數

集合(set)、斷言(assert)、all、str/int 等等

代碼統計下面是幾個主要部分的代碼行數統計,格式為:兩周前 ->本周。

測試

test 語法樹 . py,確保生成的語法樹與原始版本一致:67

木蘭測試用例:1228 -> 1590

運行測試 . py,檢驗所有木蘭測試代碼片段:151 -> 154

未變

實現:2130 -> 2183

演示高亮 . py:100

功用 / 反饋信息 . py:45

分析器 / 語法分析器 . py:916 -> 944

分析器 / 語法樹 . py,功用 / 調試輔助 . py,包括對 ast 庫的中文封裝:284 -> 234 + 56 = 290

分析器 / 詞法分析器 . py:187 -> 190

環境 . py,加載木蘭模塊:89 -> 97

中 . py,主程序:35 -> 36

未變

下一步由于還有相當部分的木蘭語言功能尚未補全,而實踐證明編寫較復雜實例的開銷相對較大,于是打算首先盡快補完語言功能和測試用例。

現在個別語言功能上卡了殼(比如變長參數),主要是看不出如何使用。如果有興趣并且對 Python 比較熟悉,歡迎一道研究。

相關文章

關鍵詞:編程,游戲,木蘭

軟媒旗下網站: IT之家 辣品 - 超值導購,優惠券 IT圈(Win10/WP8.1/Win7論壇) 最會買 - 返利返現優惠券 6655網址之家 Win10之家 Win8之家 Win7之家 Vista之家

軟媒旗下軟件: 魔方 旗魚瀏覽器(極速內核) 云日歷 酷點桌面 閃游瀏覽器(IE內核) Win7優化大師 Win8優化大師 Win10優化大師 軟媒手機APP應用

贵州快3开奖号码走势