2012-11-22 31 views
2

我正在製作一艘戰艦遊戲,並且一切正常。但由於我已經包含了轉彎系統,所以遊戲無法正常運行。這場比賽有兩個板塊(一個是隱藏的,另一個是公開的),對手可以看到這個板塊(所以沒有船隻)。隱藏的作品,但公衆都會轉動,所以你看不到以前的命中。戰列艦蟒蛇,輪流重置棋盤

下面的代碼是爲「攻擊」序列,並輪流while循環,當然。 所以,你有什麼意見,正確地實現轉向系統?我只需要獲得有關「公」的信息。板從功能的

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 
+3

你可能試着將變量名翻譯成英文嗎? – Michael0x2a

+0

這很有趣:用另一種語言閱讀代碼......但英語會有所幫助。 –

回答

1

我不確定,因爲我無法理解變量名稱,但是在您的napad函數的開頭,您設置了board = [],以便清除board中的任何內容。另外它看起來像board是一個局部變量,所以不管你做什麼,它會在每次函數結束時消失。如果我理解你的代碼是正確的,看起來你每次打電話給napad都要將私人板加載到公共板上,但是如果你每次做這個事情你從board = []開始,那麼公共板就沒有持久狀態。當您執行像board[napad_vrstica][napad_stolpec]="M"這樣的操作時,只需在局部變量board中設置一個元素,當napad函數結束時將丟棄該元素。爲了解決所有這些問題,您需要在napad函數之外創建一次公用板,使用空格對其進行初始化,然後從您的napad函數內引用該公用板(作爲全局變量或作爲參數傳入) 。

+0

而不是引用它作爲全局變量,我會說要將板作爲第二個參數傳遞給'napad'。 – Bakuriu

+0

但是如果我將板作爲第二個參數,我應該在turn while循環中作爲第二個參數寫什麼? 加我試圖讓board = [] napad之外....它是持久的,但只有一個它的實例。所以兩個攻擊都在一個板上顯示,而不是在兩個不同的公共板上顯示 – user1509923