You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求最Pythonic的游戏瓦片布尔列表转整数实现(含特殊规则)

优化后的Pythonic实现方案

针对你游戏瓦片拼接的去重需求,这里提供更简洁、可读性更强的Python风格实现:

def calculate_tile_id(pixels):
    # 定义8个瓦片位置对应的3x3像素坐标(行, 列),对应编号0-7
    tile_positions = [
        (0, 1),  # 0 (主方向)
        (0, 2),  # 1 (斜向)
        (1, 2),  # 2 (主方向)
        (2, 2),  # 3 (斜向)
        (2, 1),  # 4 (主方向)
        (2, 0),  # 5 (斜向)
        (1, 0),  # 6 (主方向)
        (0, 0),  # 7 (斜向)
    ]
    
    # 提取原始8位布尔值
    original_bits = [pixels[y][x] for y, x in tile_positions]
    
    # 应用去重规则处理每一位:
    # - 偶数索引(主方向位)保留原值
    # - 奇数索引(斜向位)仅当相邻两个主方向位都为True时保留原值,否则设为False
    processed_bits = [
        original_bits[idx]
        if idx % 2 == 0
        else (original_bits[idx] if original_bits[idx-1] and original_bits[(idx+1) % 8] else False)
        for idx in range(8)
    ]
    
    # 转换为二进制字符串并生成整数ID
    binary_str = ''.join('1' if bit else '0' for bit in processed_bits)
    return int(binary_str, 2), binary_str

# 测试示例输入
pixels = [[True, False, True], [True, True, False], [False, True, True]]
tile_id, binary_str = calculate_tile_id(pixels)
print(binary_str, tile_id)  # 输出: 10100000 160

优化亮点

  1. 直观的坐标映射:用列表显式定义每个瓦片编号对应的像素坐标,替代原代码中绕逻辑的循环,可读性大幅提升
  2. 简洁的列表推导式:用列表推导式替代冗余的for循环拼接,符合Python的简洁风格
  3. 清晰的变量命名:避免了原代码中重复使用i导致的变量混淆,逻辑更易追踪
  4. 模块化封装:将逻辑封装为函数,便于实际项目中复用和维护
  5. 显式环形处理:用(idx+1) % 8直接处理最后一个斜向位的环形相邻主方向,替代原代码中追加列表元素的hack写法

内容的提问来源于stack exchange,提问作者John Caudill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 21:50:56