我正在尝试制作我自己的游戏Battleships版本(德语:Schiffe versenken)。
我将游戏板设为ship_row+n
(10x10)。船舶的坐标是随机创建的。我有4种不同的船(从5到2的长度开始)。这些船中的每一艘都是一份清单。列表的元素由随机创建的起始坐标(ship_row,ship_col)组成,并且根据船舶是水平的还是垂直的,其他元素可以是ship_col+n
或dataframe
。
问题:船的长度可能超过了船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}}