2014-10-11 170 views
0

我正在研究一個小項目,並且在編程中遇到了一些小錯誤。這是一個基本的戰列艦遊戲,到目前爲止,我有兩個「艦船」的設置,並且當我的側面或敵人側都被擊中時,我的遊戲就結束了。列表對象發生檢查器python

def enemy_board(): 
global enemy_grid 
enemy_grid = [] 
for i in range (0,10): 
    enemy_grid.append(["="] * 10) 
def random_row_one(enemy_grid): 
    return randint(0, len(enemy_grid) - 1) 
def random_col_one(enemy_grid): 
    return randint(0, len(enemy_grid) - 1) 
def random_row_two(enemy_grid): 
    return randint(0, len(enemy_grid) - 1) 
def random_col_two(enemy_grid): 
    return randint(0, len(enemy_grid) - 1) 
global x_one 
x_one = random_row_one(enemy_grid) 
global y_one 
y_one = random_col_one(enemy_grid) 
global x_two 
x_two = random_row_two(enemy_grid) 
global y_two 
y_two = random_col_two(enemy_grid) 
print(x_one) 
print(y_one) 
print(x_two) 
print(y_two) 

所以這就是我的列表的基礎,但後來在代碼中是它給我一點麻煩。

elif enemy_grid.count("H") == 2: 
    print("\nYou got them all!\n") 
    break 

有人能幫助我嗎?幫助將不勝感激。

更新 對不起,我對我的意思有點不清楚。

def my_board(): 
    global my_grid 
    my_grid = [] 
    for i in range (0,10): 
     my_grid.append(["O"] * 10) 
     def my_row_one(my_grid): 
     int(input("Where do you wish to position your first ship on the x-axis? ")) 
    def my_col_one(my_grid): 
     int(input("Where do you wish to position your first ship on the y-axis? ")) 
    global x_mio 
    x_mio = my_row_one(my_grid) 
    global y_mio 
    y_mio = my_col_one(my_grid) 
    def my_row_two(my_grid): 
     int(input("\nWhere do you wish to position your other ship on the x-axis? ")) 
    def my_col_two(my_grid): 
    int(input("Where do you wish to position your other ship on the y-axis? ")) 
    global x_mit 
    x_mit = my_row_two(my_grid) 
    global y_mit 
    y_mit = my_col_two(my_grid) 
def enemy_board(): 
    global enemy_grid 
    enemy_grid = [] 
    for i in range (0,10): 
     enemy_grid.append(["="] * 10) 
    def random_row_one(enemy_grid): 
     return randint(0, len(enemy_grid) - 1) 
    def random_col_one(enemy_grid): 
     return randint(0, len(enemy_grid) - 1) 
    def random_row_two(enemy_grid): 
     return randint(0, len(enemy_grid) - 1) 
    def random_col_two(enemy_grid): 
     return randint(0, len(enemy_grid) - 1) 
    global x_one 
    x_one = random_row_one(enemy_grid) 
    global y_one 
    y_one = random_col_one(enemy_grid) 
    global x_two 
    x_two = random_row_two(enemy_grid) 
    global y_two 
    y_two = random_col_two(enemy_grid) 
    print(x_one) 
    print(y_one) 
    print(x_two) 
    print(y_two) 
title() 
my_board() 
enemy_board() 
m = 20 
guesses = m 
while guesses > 0:  
    def printmi_board(my_grid): 
     for row in my_grid: 
      print(" ".join(row)) 
    def printyu_board(enemy_grid): 
     for row in enemy_grid: 
      print (" ".join(row)) 
    print(printmi_board(my_grid)) 
    print(printyu_board(enemy_grid)) 
    try: 
     guess_x = int(input("Take aim at the x-xalue: ")) 
    except ValueError: 
     print("\nI SAID TAKE AIM!\n") 
     guess_x = int(input("Take aim at the x-xalue: ")) 
    try: 
     guess_y = int(input("Take aim at the y-value: ")) 
    except ValueError: 
     print("\nDo you have wax in your ears?? AIM!\n") 
     guess_y = int(input("Take aim at the y-value: ")) 
    comp_x = randint(0, len(my_grid) - 1) 
    comp_y = randint(0, len(my_grid) - 1) 
    if x_one == guess_x and y_one == guess_y: 
     print("\nYou hit one! \n") 
     enemy_grid[guess_x - 1][guess_y - 1] = "H" 
     continue 
    elif x_two == guess_x and y_two == guess_y: 
     enemy_grid[guess_x - 1][guess_y - 1] = "H" 
     print("\nYou hit one! \n") 
     continue 
    elif enemy_grid[guess_x - 1][guess_y - 1] == "O": 
     print("\nYou've tried there before! Here's another round.\n") 
     print("You have " + str(guesses) + " rounds left, cadet.\n\n") 
     continue 
    elif enemy_grid.count("H") == 2: 
     print("\nYou got them all!\n") 
     break 
    else: 
     if guess_x not in range(10) or guess_y not in range(10): 
      print("\nThat's not even in the OCEAN!! Take another free round then.\n") 
      print("You have " + str(guesses) + " rounds left, cadet.\n\n") 
      continue 
     elif enemy_grid[guess_x][guess_y] == "O": 
      print("\nYou've tried there before! Here's another round.\n") 
      print("You have " + str(guesses) + " rounds left, cadet.\n\n") 
      continue 
     else: 
      print("\nYou missed, soldier!\n") 
      guesses = guesses - 1 
      print("You have " + str(guesses) + " rounds left, cadet.\n\n") 
      enemy_grid[guess_x - 1][guess_y - 1] = "O" 
      if comp_x == x_mio and comp_y == y_mio: 
       my_grid[comp_x - 1][comp_y - 1] = "H" 
       print("\nThe enemy hit you! \n") 
       continue 
      elif comp_x == x_mit and comp_y == y_mit: 
       my_grid[comp_x - 1][comp_y - 1] = "H" 
       print("\nThe enemy hit you! \n") 
       continue 
      elif my_grid.count("H") == 2: 
       print("We have to retreat! They've sunken all of your ships...") 
       break 
      else: 
       my_grid[comp_x - 1][comp_y - 1] = "=" 
       continue 

我正在使用python 3,如果這有什麼區別。所以如果玩家在網格上擊中正確的位置,那麼它將顯示爲「H」而不是「=」或「O」。所以我只是想知道我是否可以計算那些「H」用來結束IF循環。再次感謝,併爲此感到抱歉。

+3

問題是什麼? – 2014-10-11 00:55:17

+1

破損的縮進使得代碼非常難以遵循。功能之外的'全局'聲明不起作用。你不需要用不同的名字('random_(row/col)_(one/two)')定義相同的函數四次!只定義一次,然後調用它四次。 – jacg 2014-10-11 00:56:16

+0

「_給我一點麻煩_」什麼麻煩?請顯示完整的錯誤信息。 – John1024 2014-10-11 01:20:23

回答

0

你還沒有真正解釋過這個問題,因此很多代碼缺失,很難告訴你什麼是錯誤的,但是我會猜測它。

我的猜測是你創建了一個'='網格來表示一個玩家的棋盤,然後如果他們的船被'命中',你用'H'代替那個位置上的'='。

創建(enemy_grid)的結構似乎看起來是這樣的:

在這種情況下
[[====] 
[====] 
[====] 
[....]] 

測試,enemy_grid.count("H")沒有任何意義,因爲enemy_grid是包含其他列表的列表(這樣的數Hs總是0--他們在第二層列表中更深)。

你可能想沿着線測試更多:

[cell for row in enemy_grid for cell in row].count('H') 
+0

謝謝!我剛剛重新考慮了我的代碼,並且您的建議很有用!對不起,我無法更容易地傳達我的問題,但你明白了。我只需切換IF語句放在我的代碼中的位置,並且根據您的建議,它現在可以完美工作!謝謝! – 2014-10-11 06:05:54