我在做一个战舰游戏,一切都很好。但是因为我已经包含了一个转弯系统,所以游戏不能正常工作。游戏有两个棋盘(一个是隐藏的,另一个是“公开”的,对手可以看到(所以没有船)。隐藏的工作,但公众重置每一轮,所以你看不到什么是你之前的点击。
下面的代码是针对“攻击”序列的,当然还有用于轮换的while循环。那么你有什么建议来正确地实现转弯系统呢?我只需要从函数中获取关于'public‘板子的信息。
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旋转系统:
igralec = 0
while True:
if igralec%2==0:
print "Na vrsti je igralec 1"
napad_igralec_1=napad(igralec_2)
else:
print "Na vrsti je igralec 2"
napad_gralec_2=napad(igralec_1)
igralec+=1
print igralec发布于 2012-11-23 03:19:56
我不确定,因为我不能理解变量名,但是在napad函数的开始,您设置了board = [],所以这将删除board中的所有内容。另外,board看起来像是一个局部变量,所以无论你做什么,它都会在每次函数结束时消失。如果我没理解错你的代码,似乎你每次调用napad都会把私有板加载到公共板上,但是如果你每次这样做的时候都是从board = []开始,那么公共板就不会有持久的状态。当您执行board[napad_vrstica][napad_stolpec]="M"之类的操作时,您只是在本地变量board中设置了一个元素,当napad函数结束时,该元素将被丢弃。要解决所有这些问题,需要在napad函数外部创建一次公用板,用空格对其进行初始化,然后从napad函数中引用该公用板(作为全局变量或作为参数传递)。
https://stackoverflow.com/questions/13517870
复制相似问题