从零开始打造麻将机器人,Python与AI的结合旅程

需积分: 10 0 下载量 29 浏览量 更新于2024-12-08 收藏 4KB ZIP 举报
资源摘要信息:"mahjong-bot是一个与日本麻将相关的机器人项目,该项目在两天的时间内逐步构建完成。第一天的工作主要集中在对日本麻将规则的熟悉、基础组件的设计、以及python编程中的类属性和方法的实现上。项目中还考虑到了数据的持久化,即通过json格式进行数据的序列化与反序列化,以备后续使用。同时,为了将来的可扩展性,开发人员预先设计了接口,并将服务器与bot的逻辑分离。尽管python语言本身不支持函数重载,但开发者认为其简洁性足以满足当前的需求。项目中还涉及到麻将流程的逻辑处理,特别是在判断胡牌和听牌这一复杂问题上,开发者采用递归方法进行了初步尝试,虽然这种方法效率较低。在处理python列表时,开发者发现了一些常见的坑,比如直接复制列表用于循环中删除元素时的问题。第二天的工作主要围绕游戏流程的实现和控制台交互输出日志展开。在实现游戏中,开发者花费了大量时间处理React过来的赢牌情况,这是一个特殊情况,只能在听牌时发生。项目中还添加了一个行动随机的AI,增加了游戏的不确定性和复杂性。" 知识点: 1. 日本麻将规则: 项目开发的第一步是熟悉日本麻将的游戏规则,这是设计麻将机器人程序的基础。 2. 面向对象编程: 在项目中实现了基础组件,这涉及到编程中的类属性和方法的设计。面向对象编程(OOP)允许开发者以对象的形式思考问题,每个对象都有属性和方法,可以模拟现实世界中的实体和行为。 3. JSON数据处理: 项目中使用json进行数据的序列化和反序列化。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。 4. 接口设计与分离: 为了使项目具有更好的可扩展性和维护性,开发者预先设计了接口,并且分离了服务器与bot的逻辑。这是一种常见的软件工程实践,有助于降低模块之间的耦合度。 5. Python编程特性: 项目中提到了python语言的一些特性,如不支持函数重载。函数重载是指允许存在多个同名函数,但参数列表不同。由于python不支持这一特性,开发者认为python语言的简洁性足以应对当前项目的需求。 6. 递归算法: 在判断胡牌和听牌的逻辑中,开发者使用了递归方法。递归是一种在程序中调用自身的编程技术,它通常用于解决可以分解为相似子问题的问题。虽然递归方法在处理大规模数据时可能效率不高,但它在逻辑上通常比较直观。 7. Python列表操作: 在处理动态数据时,如在循环中删除列表元素时,开发者发现了直接赋值复制列表可能导致的问题。这是python中列表操作的一个常见问题,如果不创建列表的新副本而直接进行操作,可能会在遍历时改变列表的长度,导致意外的错误。 8. 控制台交互: 项目的第二天工作重点是实现游戏流程控制台交互输出日志。在开发过程中,控制台输出是调试和查看程序运行状态的重要手段。 9. AI的设计与实现: 为了使麻将游戏更具挑战性,项目中添加了一个行动随机的AI。设计一个能够进行决策的人工智能需要复杂的算法和逻辑,可能涉及到机器学习、搜索算法等高级编程技术。