2014-04-21 45 views
-2

我正在研究我的最終編程項目,並試圖製作戰艦。我唯一需要做的就是編寫自動智能程序。到目前爲止,它的工作方式是猜測從1到11的兩個隨機整數,以在網格中選取一個隨機空間。一旦碰到什麼東西,我就制定了規則,以便它能檢查所有方面,直到它沉沒了整艘船。與此相關的問題是,那麼計算機一次只能輪到八圈。我需要以某種方式跳出這個功能,回到我的主要運行功能,然後重新開始下一個回合。有沒有辦法做到這一點,還是會有一個更好,完全不同的方式來輪流?在函數中斷和恢復?

這是我的轉身功能目前的樣子。 user_guess函數可以正常工作,然後檢查是否贏得了遊戲。思考()是純粹的審美,然後我得到我有疑問的comp_guess函數,然後檢查是否丟失。然後它會回想起來。

def turns(): 
     user_guess() 
     if win_game==True: 
      return ('YOU WIN!') 
     thinking() 
     comp_guess() 
     if lose_game==True: 
      return ('YOU LOSE!') 
     turns() 

那麼到目前爲止,我有我comp_guess功能是:

def comp_guess(): 
     comp_in1=random.randrange(1,11) 
     comp_in2=random.randrange(1,11) 
     if (grid_two[comp_in1])[comp_in2]=='S': 
      (grid_two[comp_in1])[comp_in2]='X' 
      (grid_four[comp_in1])[comp_in2]='X' 
     else: 
      (grid_two[comp_in1])[comp_in2]='*' 
      (grid_four[comp_in1])[comp_in2]='*' 
     for f in grid_four: 
      print(' '.join(f)) 

grid_two是所有的船舶位置的存儲網格。 grid_four是顯示的那個,它只是跟蹤計算機的移動以及它們是否被擊中或未命中。

+0

到目前爲止所做的一個具體示例將幫助我們更好地回答您的問題。但是,您應該有一個基於某些輸入邏輯/狀態選擇單個空間的函數。然後根據需要在另一個控制程序流程的函數中多次調用此函數。 – BlackVegetable

+0

恐怕這會關閉,也許你想展示你的程序大綱。只是爲了跳入:即使沒有你的邏輯,你也需要在移動之間存儲狀態 - 否則你永遠不會知道你已經觸發了哪些字段。將其插入到程序的整體設計中,您就會知道在哪裏存儲有關碰到某些東西的信息。如果您不確定如何構建這個問題,那會產生一個更具體的問題,與代碼示例一起,在這裏可能更容易回答。 – Nicolas78

+0

基於粗略掃描您的問題,聽起來您想要*協程*。 Python生成器可以作爲協程來實現。 [閱讀詳情](http://www.dabeaz.com/coroutines/index.html)。 – kojiro

回答

0
You need to loop a random int until it finds a slot that is not already taken. 
Set if statements so the computer can tell if it has hit a ship or not. 
After that it should go back to the main function. 

我認爲計算機超過1回合的原因是因爲它循環直到它殺死船隻? 從玩家交換的主循環去,應該有結束遊戲的條件。