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

时间:2018-06-02 23:35:30

标签: python list pandas dataframe

我正在尝试制作我自己的游戏Battleships版本(德语:Schiffe versenken)。

我将游戏板设为ship_row+n(10x10)。船舶的坐标是随机创建的。我有4种不同的船(从5到2的长度开始)。这些船中的每一艘都是一份清单。列表的元素由随机创建的起始坐标(ship_row,ship_col)组成,并且根据船舶是水平的还是垂直的,其他元素可以是ship_col+ndataframe

问题:船的长度可能超过了船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)] 。如何为这些发货清单设置边界,如何制作一个循环,如果第一个发货清单超出边界,则创建新的发货清单?

这里是我的代码船Schlachtschiff的代码:

while Schlachtschiff[-1] not 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)]

    if Schlachtschiff[-1] in board:
        break

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

for i in Schlachtschiff:

    for j in Kreuzer:
        if i == j:
            random_row(board)
            random_col(board)
            ship_row_1 = random_row(board)
            ship_col_1 = random_col(board)
            g= rd.randint(1,2)

            if g==1:
                Kreuzer = [(ship_row, ship_col),(ship_row, ship_col+1),(ship_row, ship_col+2)]

            else:
                Kreuzer = [(ship_row, ship_col),(ship_row+1, ship_col),(ship_row+2, ship_col)]

为了阻止船只重叠,我编写了这段代码(注意“Kreuzer是第二种船,以与上面相同的方式创建):

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

现在,由于@smci的帮助,我不再有这个问题了。我的代码现在看起来像这样:

{{1}}

0 个答案:

没有答案