2014-07-03 99 views
1

我用Python創建了一個戰艦遊戲。目前,遊戲中有一個簡單的人工智能,它隨機猜測它在棋盤上還沒有猜到的地方,試圖找到兩塊大型戰列艦。我正在通過給AI一個模式來讓AI更加聰明。爲了生成AI的猜測,我使用下面的代碼。戰艦遊戲AI猜測同樣的東西

while X == 0 | Y == 0: 
    X = 0 
    Y = 0 
    guess_col = guessCol(0, size - 1) 
    guess_row = guessRow(0, size - 1) 
    # Make sure the guess follows the pattern 
    if (guess_col + guess_row)%2 != 1: 
     X = 1 
    # Make sure the spot has not already been guessed 
    if board[guess_row][guess_col] != "~": 
     Y = 1 

董事會看起來像下面這樣。

1 2 3 4 5 6 7 8 9 
1 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
2 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
3 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
4 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
5 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
6 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
7 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
8 ~ ~ ~ ~ ~ ~ ~ ~ ~ 
9 ~ ~ ~ ~ ~ ~ ~ ~ ~ 

圖案完美地工作,但新的AI現在猜測它已經猜到了點,使得它非常低效和不那麼聰明。我也嘗試使用if board[guess_row][guess_col] == "~":,但這會導致模式不起作用。我怎麼才能讓AI猜測它只是在它尚未猜到的地方?

+0

你有沒有改變的'板[guess_row] [guess_col]'比'其他的東西〜'值?向我們顯示該代碼。 – jwodder

+0

@jwodder當模塊被猜測時,它被改爲X,當船被擊中時,它被改爲H.我有完整的源代碼在這裏:http://github.com/JellyBellyFred/BattleShip – Choops

回答

3

行:

while X == 0 | Y == 0: 

沒有做什麼,你認爲它。 |是按位或,在Python中(與C系列不同),它的優先級高於==。因此,Python解析的路線爲:

while X == (0 | Y) == 0: 

這相當於:

while X == Y == 0: 

其中,由於比較操作符的鏈接,相當於:

while (X == Y) and (Y == 0): 

這相當於到:

while (X == 0) and (Y == 0): 

這絕對不是你想要寫作X == 0 | Y == 0

而不是使用按位OR的,使用邏輯OR,它在Python的拼寫or

while X == 0 or Y == 0: 
+0

謝謝!我從來沒有想到我必須拼出'或'! – Choops