百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

木兰编程语言 0.0.14.3:井字棋演示,tuple、枚举

off999 2024-09-18 22:40 20 浏览 0 评论

安装方法:pip install ulang,使用方法与例程请见 pypi 项目首页(源于码云首页)。 注意:必需 python 3.7

前文只画了个井字棋棋盘,本版本完成与自己对弈的功能(与原 Python 代码功能相同)。在此期间检验已重现的部分木兰的实用程度,并在使用中发现需要重现的语法进而加以实现。

1 实例演示



主要木兰代码如下(完整代码在此,基本沿用原 Python 代码结构,仅作了些微重构):

pygame.init()
pygame.display.set_caption('井字棋')
屏幕 = pygame.display.set_mode(tuple(棋盘尺寸, 棋盘尺寸))
loop {
  for 事件 in pygame.event.get() {
    事件类型 = 事件.__getattribute__('type')
    if 事件类型 == pygame.QUIT {
      pygame.quit()
      quit()
    } elif 进行状态 == 状态.对弈 and 事件类型 == pygame.MOUSEBUTTONUP {
      x, y = pygame.mouse.get_pos()
      横格 = 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 定义枚举类似,但之前一直没用过,井字棋示例中第一次用:

using Enum in enum
type 棋手 : Enum {
  {
    X = 1
    O = 2
  }
}

2.3 超过两项变量赋值

早先只允许两项,如:a, b = 1, 2。现在支持更多项如:a, b, c = 1, 2, 3。也同时支持了 for a, b, c in t { ... }

2.4 其他

恢复了自带木兰代码编辑器功能,并继续修正的格式化功能


附录:代码量统计

主要部分的代码行数统计,格式为:上次->现在。

  • 木兰代码量
    • 编辑器,实现与测试都是木兰代码:333 -> 381
    • 木兰测试用例,包括部分实用小程序(如井字棋):2160 -> 2304


  • Python 代码量(包括测试部分):2425 -> 2473
    • 分析器/语法分析器.py:986 -> 989
    • 测试/运行所有.py,检验所有木兰测试代码片段:185 -> 187
    • 环境.py,定义全局方法:157 -> 160
    • 中.py,主程序:41 -> 45
    • setup.py, 33
    • 未变
      • 分析器/词法分析器.py:198
      • 分析器/语法树.py:178
      • 交互.py,交互环境(REPL):138
      • 分析器/语法成分.py,从语法分析器中提取出来的枚举常量:79
      • 功用/反馈信息.py:49
      • 分析器/错误.py:17
      • 测试/unittest/语法树.py,确保生成的语法树与原始版本一致:67
      • 测试/unittest/交互.py,交互环境相关测试:28

相关推荐

python入门到脱坑经典案例—清空列表

在Python中,清空列表是一个基础但重要的操作。clear()方法是最直接的方式,但还有其他方法也可以实现相同效果。以下是详细说明:1.使用clear()方法(Python3.3+推荐)...

python中元组,列表,字典,集合删除项目方式的归纳

九三,君子终日乾乾,夕惕若,厉无咎。在使用python过程中会经常遇到这四种集合数据类型,今天就对这四种集合数据类型中删除项目的操作做个总结性的归纳。列表(List)是一种有序和可更改的集合。允许重复...

Linux 下海量文件删除方法效率对比,最慢的竟然是 rm

Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...

数据结构与算法——链式存储(链表)的插入及删除,

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持上篇文章我们讲述了链表的基本概念及一些查找遍历的方法,本篇我们主要将一下链表的插入删除操作,以及采用堆栈方式如何创建链表。链...

Python自动化:openpyxl写入数据,插入删除行列等基础操作

importopenpyxlwb=openpyxl.load_workbook("example1.xlsx")sh=wb['Sheet1']写入数据#...

在Linux下软件的安装与卸载(linux里的程序的安装与卸载命令)

通过apt安装/协助软件apt是AdvancedPackagingTool,是Linux下的一款安装包管理工具可以在终端中方便的安装/卸载/更新软件包命令使用格式:安装软件:sudoapt...

Python 批量卸载关联包 pip-autoremove

pip工具在安装扩展包的时候会自动安装依赖的关联包,但是卸载时只删除单个包,无法卸载关联的包。pip-autoremove就是为了解决卸载关联包的问题。安装方法通过下面的命令安装:pipinsta...

用Python在Word文档中插入和删除文本框

在当今自动化办公需求日益增长的背景下,通过编程手段动态管理Word文档中的文本框元素已成为提升工作效率的关键技术路径。文本框作为文档排版中灵活的内容容器,既能承载多模态信息(如文字、图像),又可实现独...

Python 从列表中删除值的多种实用方法详解

#Python从列表中删除值的多种实用方法详解在Python编程中,列表(List)是一种常用的数据结构,具有动态可变的特性。当我们需要从列表中删除元素时,根据不同的场景(如按值删除、按索引删除、...

Python 中的前缀删除操作全指南(python删除前导0)

1.字符串前缀删除1.1使用内置方法Python提供了几种内置方法来处理字符串前缀的删除:#1.使用removeprefix()方法(Python3.9+)text="...

每天学点Python知识:如何删除空白

在Python中,删除空白可以分为几种不同的情况,常见的是针对字符串或列表中空白字符的处理。一、删除字符串中的空白1.删除字符串两端的空白(空格、\t、\n等)使用.strip()方法:s...

Linux系统自带Python2&yum的卸载及重装

写在前面事情的起因是我昨天在测试Linux安装Python3的shell脚本时,需要卸载Python3重新安装一遍。但是通过如下命令卸载python3时,少写了个3,不小心将系统自带的python2也...

如何使用Python将多个excel文件数据快速汇总?

在数据分析和处理的过程中,Excel文件是我们经常会遇到的数据格式之一。本文将通过一个具体的示例,展示如何使用Python和Pandas库来读取、合并和处理多个Excel文件的数据,并最终生成一个包含...

【第三弹】用Python实现Excel的vlookup功能

今天继续用pandas实现Excel的vlookup功能,假设我们的2个表长成这样:我们希望把Sheet2的部门匹在Sheet1的最后一列。话不多说,先上代码:importpandasaspd...

python中pandas读取excel单列及连续多列数据

案例:想获取test.xls中C列、H列以后(当H列后列数未知时)的所有数据。importpandasaspdfile_name=r'D:\test.xls'#表格绝对...

取消回复欢迎 发表评论: