我的战舰实现的网格数据结构和布局算法?

2024-10-04 03:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试制作我自己的战舰游戏版本。在

我把游戏板做成了dataframe(10x10)。船的坐标是随机创建的。我有4种不同的船(从5到2的长度开始)。每艘飞船都是一份名单。列表的元素由随机创建的起始坐标(ship_row,ship_col)组成,根据ship是水平还是垂直,其他元素是ship_row+n或{}。在

问题:船的长度可能会超过船的长度dataframe。我如何为这些船舶列表设置边界,以及如何创建一个循环,以便在第一个创建的船舶列表超出边界时创建新的船舶列表?在

下面是我的示例船Schlachtschiff的代码:

board=[]

for n in range (10):
    board.append(['O']*10)

board = pd.DataFrame(board)

g= rd.randint(1,2)
random_row(board)
random_col(board)
ship_row = random_row(board)
ship_col = random_col(board)


for Schlachtschiff in board:
    if g==1:
            Schlachtschiff = [(ship_row, ship_col),(ship_row, ship_col+1),(ship_row, ship_col+2),(ship_row, ship_col+3),(ship_row, ship_col+4)]
    else:
            Schlachtschiff= [(ship_row, ship_col),(ship_row+1, ship_col),(ship_row+2, ship_col),(ship_row+3, ship_col),(ship_row+4, ship_col)]

我试图通过查看创建列表的最后一个元素,用while循环来解决它,但这不会停止:

^{pr2}$

为了防止船只重叠,我编写了以下代码(注:“克鲁泽是第二种船,与上述方法相同):

^{3}$

多亏了@smci的帮助,我不再有这个问题了。我的代码现在是这样的:

board = []
board = pd.DataFrame(data='□', index=range(1,10+1), columns=list('ABCDEFGHIJ'))
print(board)
def random_row(board):
    return rd.randint(0,len(board)-1)

def random_col(board):
     return rd.randint(0,len(board)-1)
def Schiff_erstellen(Schiff,Start,Stop):
    g= rd.randint(1,2)
    random_row(board)
    random_col(board)
    ship_row = random_row(board)
    ship_col = random_col(board)
    Schiff=[(ship_row, ship_col)]
    while Schiff[-1] > (ship_row_probe, ship_col_probe):
    g= rd.randint(1,2)
    random_row(board)
    random_col(board)
    ship_row = random_row(board)
    ship_col = random_col(board)
    Schiff=[(ship_row, ship_col)]
    if g == 1:
        for i in range(Start,Stop):
            Schiff.append((ship_row, ship_col+i))
    else:
        for i in range(Start,Stop):
            Schiff.append((ship_row+i, ship_col))
    if Schiff[-1] <= (ship_row_probe, ship_col_probe):
        break

return Schiff

Tags: inboard元素列表forrangecolrandom