Python 巨蟒号战列舰,轮流重置棋盘
我正在做一个战舰游戏,一切正常。但是由于我加入了一个回合制,游戏并没有按它应该的那样运行。游戏有两个棋盘(一个是隐藏的,另一个是“公开的”——对手可以看到的棋盘(因此没有船只)。隐藏的棋盘可以工作,但是公众会重置每一个回合,所以你看不到你以前的命中率 下面的代码用于“攻击”序列,当然还有回合的while循环。 那么,你有什么建议来正确实施turn系统呢?我只需要从函数中获取有关“公共”板的信息Python 巨蟒号战列舰,轮流重置棋盘,python,loops,return,Python,Loops,Return,我正在做一个战舰游戏,一切正常。但是由于我加入了一个回合制,游戏并没有按它应该的那样运行。游戏有两个棋盘(一个是隐藏的,另一个是“公开的”——对手可以看到的棋盘(因此没有船只)。隐藏的棋盘可以工作,但是公众会重置每一个回合,所以你看不到你以前的命中率 下面的代码用于“攻击”序列,当然还有回合的while循环。 那么,你有什么建议来正确实施turn系统呢?我只需要从函数中获取有关“公共”板的信息 def napad(osebni_board): board = [] #this
def napad(osebni_board):
board = [] #this is the public board, the 'private' one is defined in another function (the board is called osebni_board)
for x in range(0,5):
board.append([" "] * 5)
x=0
while x<1 :
napad_vrstica=streljaj_vrstica()
napad_stolpec = streljaj_stolpec()
osebni_board_priverjanje = list(itertools.chain(*osebni_board))
if napad_vrstica <= len(board)-1 and napad_stolpec <= len(board[0])-1 and "S" in osebni_board_priverjanje:
print osebni_board_priverjanje
if osebni_board[napad_vrstica][napad_stolpec]=="S":
osebni_board[napad_vrstica][napad_stolpec]="" #osebnemu boardu se element S spremeni v element H, zato, da ponovni stren ni razumljen kot zadetek
board[napad_vrstica][napad_stolpec]="H"
osebni_board_priverjanje = list(itertools.chain(*osebni_board))
print True
print "Kapitan, vase koordinate so se izkazale za tocne. Sovrazna ladja je uspesno potopljena!"
print_board(board)
if "S" not in osebni_board_priverjanje:
print_board(board)
print "game over"
break
elif board[napad_vrstica][napad_stolpec]=="H":
print "Ladja na koordinatah {},{} je ze bila potopljena, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)
elif osebni_board[napad_vrstica][napad_stolpec]=="M":
print "Na koordinate {},{} ste ze streljali, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)
else:
board[napad_vrstica][napad_stolpec]="M"
osebni_board[napad_vrstica][napad_stolpec]="M"
print "Zadetek neuspesen, kapitan {}!\n".format(ime)
print_board(board)
else:
mrtvi = random.randint(100, 10000)
print "Kapitan! Zadeli smo obalo! {} mrtvih!\nPoskusite znova!".format(mrtvi)
x+=1
return osebni_board_priverjanje
我不确定,因为我不能理解变量名,但是在
napad
函数的开头,您设置了board=[]
,因此这将擦除板中的任何内容。而且它看起来像板
是一个局部变量,因此无论你做什么,每次函数结束时它都会消失。如果我正确理解你的代码,似乎你每次调用napad
时都在将私有板加载到公共板中,但是如果每次执行此操作时,您都从board=[]
开始,然后公用板将没有持续状态。当您执行board[napad_vrstica][napad_stolpec]=“M”之类的操作时
,您只需在局部变量board
中设置一个元素,当napad
函数结束时,该元素将被丢弃。要解决所有这些问题,您需要在napad
函数之外创建一次公共板,用空格初始化它,然后引用该公共板(作为全局变量或作为参数传入)你可以试着把变量名翻译成英文吗?有趣的是:用另一种语言读代码……但是英语会有帮助。代替把它称为全局变量,我会说把板作为第二个参数传递给<代码> NAPAD < /代码>。但是如果我把板作为第二个PAR。ameter,作为turn while循环的第二个参数,我应该写什么呢?另外,我试图在napad之外创建board=[]。。它是持久的,但只有一个实例。因此两个攻击都显示在一个板上,而不是两个不同的公共板上。。。
def napad(osebni_board):
board = [] #this is the public board, the 'private' one is defined in another function (the board is called osebni_board)
for x in range(0,5):
board.append([" "] * 5)
x=0
while x<1 :
napad_vrstica=streljaj_vrstica()
napad_stolpec = streljaj_stolpec()
osebni_board_priverjanje = list(itertools.chain(*osebni_board))
if napad_vrstica <= len(board)-1 and napad_stolpec <= len(board[0])-1 and "S" in osebni_board_priverjanje:
print osebni_board_priverjanje
if osebni_board[napad_vrstica][napad_stolpec]=="S":
osebni_board[napad_vrstica][napad_stolpec]="" #osebnemu boardu se element S spremeni v element H, zato, da ponovni stren ni razumljen kot zadetek
board[napad_vrstica][napad_stolpec]="H"
osebni_board_priverjanje = list(itertools.chain(*osebni_board))
print True
print "Kapitan, vase koordinate so se izkazale za tocne. Sovrazna ladja je uspesno potopljena!"
print_board(board)
if "S" not in osebni_board_priverjanje:
print_board(board)
print "game over"
break
elif board[napad_vrstica][napad_stolpec]=="H":
print "Ladja na koordinatah {},{} je ze bila potopljena, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)
elif osebni_board[napad_vrstica][napad_stolpec]=="M":
print "Na koordinate {},{} ste ze streljali, kapitan {}!".format(napad_vrstica, napad_stolpec, ime)
else:
board[napad_vrstica][napad_stolpec]="M"
osebni_board[napad_vrstica][napad_stolpec]="M"
print "Zadetek neuspesen, kapitan {}!\n".format(ime)
print_board(board)
else:
mrtvi = random.randint(100, 10000)
print "Kapitan! Zadeli smo obalo! {} mrtvih!\nPoskusite znova!".format(mrtvi)
x+=1
return osebni_board_priverjanje