塔防游戏开发:如何在网格单元格内分栏显示僵尸名称与HP?
问题解决方案
1. 修复僵尸重复生成问题
当前每次绘制行时都会创建新僵尸,导致每行最后一格都出现僵尸。核心问题是僵尸生成逻辑嵌套在绘制循环内,需将生成与绘制逻辑分离:
- 预先创建二维列表作为网格状态容器,存储每个格子的僵尸实例(无僵尸则为
None) - 绘制时仅读取容器内的已有数据,不再重复生成僵尸
示例修改:
# 初始化网格:grid[row][col] 对应格子的僵尸,无则为None grid_rows = 3 grid_cols = 5 grid = [[None for _ in range(grid_cols)] for _ in range(grid_rows)] # 仅在指定位置生成僵尸(示例:第0行第2列、第1行第3列) grid[0][2] = Zombie(shortform="普僵", hp=100) grid[1][3] = Zombie(shortform="路障", hp=150)
2. 实现僵尸信息分两行显示
要让名称在上、HP在下且适配格子,需将每个单元格拆分为两行渲染,同时用文本对齐保证格式统一:
- 每个格子固定宽度(比如10字符),用
str.center()实现文本居中 - 分两行绘制:第一行显示僵尸简称,第二行显示HP信息;无僵尸则显示空内容
完整绘制代码示例:
# 绘制网格边框与内容 for row in range(grid_rows): # 绘制格子顶部分隔线 print("+----------" * grid_cols + "+") # 第一行:僵尸名称 name_line = "|" for col in range(grid_cols): zombie = grid[row][col] content = zombie.shortform if zombie else "" # 填充为8字符居中,适配边框格式 name_line += f" {content.center(8)} |" print(name_line) # 第二行:僵尸HP hp_line = "|" for col in range(grid_cols): zombie = grid[row][col] content = f"HP:{zombie.hp}" if zombie else "" hp_line += f" {content.center(8)} |" print(hp_line) # 绘制网格底部分隔线 print("+----------" * grid_cols + "+")
效果示例
修改后会输出格式规整的网格:
+----------+----------+----------+----------+----------+ | 普僵 | | | | | | HP:100 | | | | | +----------+----------+----------+----------+----------+ | | | | 路障 | | | | | | HP:150 | | +----------+----------+----------+----------+----------+ | | | | | | | | | | | | +----------+----------+----------+----------+----------+
内容的提问来源于stack exchange,提问作者zijcxlkcj
相关产品推荐
相关产品推荐

