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

Python战舰游戏:UsedTile列表检测while循环失效,新tiles未添加

问题分析与修复方案

你的代码存在几个关键问题:

  1. 循环初始条件失效:一开始FrigateTiles是空列表,any(x in UsedTiles for x in FrigateTiles)会直接返回False,导致while循环根本不会执行,直接跳过生成逻辑。
  2. 未标记已占用格子:生成合法的护卫舰位置后,没有将FrigateTiles中的坐标添加到UsedTiles,所以后续生成其他舰船时无法检测到这些已占用的格子。
  3. 方向未重新随机:UpOrDown在循环外只生成一次,循环内不会重新随机方向,导致每次尝试生成时只能用同一个方向。
  4. 垂直方向坐标逻辑错误:垂直方向的FrigateTiles坐标顺序搞反了,应该是[FrigatePositionX, FrigatePositionY]开头,而不是[FrigatePositionY, FrigatePositionX],这会导致位置不符合预期。

修复后的代码:

import random

# 假设UsedTiles是已初始化的列表,比如:UsedTiles = []

# Frigate Generation
FrigateTiles = []
# 循环直到生成不重叠的护卫舰位置
while True:
    # 每次循环重新随机方向
    UpOrDown = random.randint(0, 1)
    if UpOrDown == 0:
        # 水平方向:X范围0-6(+3后刚好到9,不越界),Y范围0-9
        FrigatePositionX = random.randint(0, 6)
        FrigatePositionY = random.randint(0, 9)
        # 生成水平排列的4个格子
        FrigateTiles = [
            [FrigatePositionX, FrigatePositionY],
            [FrigatePositionX + 1, FrigatePositionY],
            [FrigatePositionX + 2, FrigatePositionY],
            [FrigatePositionX + 3, FrigatePositionY]
        ]
    else:
        # 垂直方向:Y范围0-6,X范围0-9
        FrigatePositionX = random.randint(0, 9)
        FrigatePositionY = random.randint(0, 6)
        # 生成垂直排列的4个格子
        FrigateTiles = [
            [FrigatePositionX, FrigatePositionY],
            [FrigatePositionX, FrigatePositionY + 1],
            [FrigatePositionX, FrigatePositionY + 2],
            [FrigatePositionX, FrigatePositionY + 3]
        ]
    # 检查当前生成的位置是否与已占用格子重叠
    if not any(tile in UsedTiles for tile in FrigateTiles):
        # 没有重叠,退出循环
        break

# 将护卫舰的格子添加到已占用列表
UsedTiles.extend(FrigateTiles)

关键修改说明:

  • 改用while True无限循环,直到生成合法位置后手动break,避免初始空列表导致循环不执行的问题。
  • 每次循环内重新生成UpOrDown方向,确保每次尝试可以随机不同方向。
  • 修正垂直方向的坐标生成逻辑,保持[X,Y]的统一格式,避免位置混乱。
  • 生成位置后检查是否与UsedTiles重叠,不重叠就退出循环,并通过extend把护卫舰的每个格子单独添加到已占用列表中。
  • 确保UsedTiles是已初始化的空列表,否则会出现未定义错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:27:51