安装方法:pipinstallulang,使用方法与例程请见pypi项目首页(源于码云首页)。注意:必需python3。7 前文只画了个井字棋棋盘,本版本完成与自己对弈的功能(与原Python代码功能相同)。在此期间检验已重现的部分木兰的实用程度,并在使用中发现需要重现的语法进而加以实现。1实例演示 主要木兰代码如下(完整代码在此,基本沿用原Python代码结构,仅作了些微重构):pygame。init()pygame。display。setcaption(井字棋)屏幕pygame。display。setmode(tuple(棋盘尺寸,棋盘尺寸))loop{for事件inpygame。event。get(){事件类型事件。getattribute(type)if事件类型pygame。QUIT{pygame。quit()quit()}elif进行状态状态。对弈and事件类型pygame。MOUSEBUTTONUP{x,ypygame。mouse。getpos()横格int((x边框)1。0格子尺寸)纵格int((y边框)1。0格子尺寸)if在棋盘内(横格,纵格)and!该位置已占(横格,纵格){所有落子。append(tuple(横格,纵格,哪方))if胜负已分(){进行状态哪方棋手。X?状态。X胜:状态。O胜}else{哪方哪方棋手。X?棋手。O:棋手。X}}}}屏幕。fill(背景色)画格子()for落子in所有落子{画棋子(落子)}宣布进行状态!状态。对弈?((进行状态状态。X胜?X:O)赢了!!):(len(所有落子)9?平局:)比赛结束if宣布!{字体pygame。font。SysFont(pmingliu,50)文字字体。render(宣布,true,红色)屏幕。blit(文字,tuple(20,190))}pygame。display。update()}2语言功能2。1元组(tuple) 之前未发现元组初始化的简便方法。本周发现可用内置函数tuple(1,2,3)进行初始化2。2枚举 与Python定义枚举类似,但之前一直没用过,井字棋示例中第一次用:usingEnuminenumtype棋手:Enum{{X1O2}}2。3超过两项变量赋值 早先只允许两项,如:a,b1,2。现在支持更多项如:a,b,c1,2,3。也同时支持了fora,b,cint{。。。}2。4其他 恢复了自带木兰代码编辑器功能,并继续修正的格式化功能附录:代码量统计 主要部分的代码行数统计,格式为:上次现在。木兰代码量编辑器,实现与测试都是木兰代码:333381木兰测试用例,包括部分实用小程序(如井字棋):21602304 Python代码量(包括测试部分):24252473分析器语法分析器。py:986989测试运行所有。py,检验所有木兰测试代码片段:185187环境。py,定义全局方法:157160中。py,主程序:4145setup。py,33未变分析器词法分析器。py:198分析器语法树。py:178交互。py,交互环境(REPL):138分析器语法成分。py,从语法分析器中提取出来的枚举常量:79功用反馈信息。py:49分析器错误。py:17测试unittest语法树。py,确保生成的语法树与原始版本一致:67测试unittest交互。py,交互环境相关测试:28