【发布时间】:2018-01-05 09:56:42
【问题描述】:
我正在用 python 创建战舰游戏,其中玩家与一台计算机对战,该计算机随机将战舰放置在 10x10 板上。 船的位置很好,但有时船会重叠。 无论我做什么,它都不会停止重叠船只。
代码如下: 已编辑
ships = {'A': 5, 'B': 4, 'C': 3, 'S': 3, 'D': 2}
comp_board = []
for i in range(10):
comp_board.append([])
for j in range(10):
comp_board[i].append('.')
def print_computer_board(comp_board):
for i in comp_board:
print(' '.join(i))
def comp_place_ships(comp_board, ships):
for key, value in ships.items():
ship_not_placed = True
while ship_not_placed:
ori = random.randint(0,1)
if ori == 0:
x = random.randint(0,9-value)
y = random.randint(0,9)
placement = comp_board[x][y]
if placement == '.':
for ship in range(value):
comp_board[x][y] = key
comp_board[x+ship][y] = key
ship_not_placed = False
elif ori == 1:
x = random.randint(0,9)
y = random.randint(0,9-value)
placement = comp_board[x][y]
if placement == '.':
for ship in range(value):
comp_board[x][y] = key
comp_board[x][y+ship] = key
ship_not_placed = False
elif ori != 0 or 1 and placement != '.':
print('Invalid choice, please try again.')
comp_place_ships(comp_board, ships)
print_computer_board(comp_board)
我尝试使用placement = comp_board[x+ship][y] 和placement_hort = comp_board[x][y+ship] 而不是placement = comp_board[x][y] 来检查展示位置是否有效,但随后我收到一个错误:赋值前引用了局部变量“ship”。
有人知道如何解决这个问题吗?我已经尝试创建这个游戏很长时间了,无论我做什么,我都会遇到一个接一个的问题。
【问题讨论】:
-
您的代码不完整。 comp_board 是如何定义的?船舶是如何定义的?
-
我现在已经编辑了代码,因此 comp_board 和 ship 都包含在内 + 用于打印计算机板的定义。
-
if placement == '.'是您当前的重叠检查吗?所以你只检查第一个单元格是否有重叠,而不是每个单元格......你需要检查不重叠的矩形。也许你应该把每艘船的位置放在一个列表中,然后对照那个,而不是对照“董事会”?
标签: list python-3.x dictionary