2015-01-23 5 views
0

Я пишу игру из палочек, которая, надеюсь, будет играть против меня. Идея подробно описана в this HTML document, но в основном у меня есть код, который должен создать очень рудиментарный тип ИИ, который будет адаптироваться к оптимальному способу игры.Как устранить бесконечный цикл

У меня есть код для Игрока 1 и для ИИ, но проблема в том, что мне нужен ИИ, чтобы он работал непрерывно, пока я не остановлюсь. Я попытался включить весь мой код в while True:, но я думаю, что что-то в моих условных выражениях приводит к остановке кода, а не к непрерывному циклу. Я надеялся, что у кого-то появится предложение о том, как я могу применить обходное решение.

import random 
import sys 

"Global Variables" 
prompt = '>>> ' 
btw_1_3 = 'Please pick a number beteween 1 and 3.' 


#Introduction to the game 
raw_input("Welcome to the game of sticks! Press <Enter> to continue...") 
print("How many sticks are there on the table initially (10-100)?") 
num_sticks = int(raw_input(prompt)) 
print("Ok, there are %s sticks on the board.") % (num_sticks) 
print("|")*num_sticks 

#Initialize a dictionary that we will change 
stick_dict={} 
for number in range(1,num_sticks+1): 
    stick_dict["hat{0}".format(number)]=[[1,2,3]] 



while True: 
    while num_sticks!=0: 

     #player 1 
     while True: 
      print "Player 1: How many sticks do you take (1-3)?" 
      player_1 = int(raw_input(prompt)) 

      if 1 <= player_1 <= 3: 
       break 
      else: 
       print (btw_1_3) 

     num_sticks = num_sticks - player_1 

     if num_sticks == 1: 
      print("Ok, there is %s stick on the board.") % (num_sticks) 
      print("|")*num_sticks 

     elif num_sticks < 1: 
      print("Player 1, you lose.") 

      #If Player 1 loses, then the AI wins and we want to execute this 
      for key in stick_dict: 
       if len(stick_dict[key]) == 2: 
        stick_dict[key][0].append(stick_dict[key][1]) 
        del stick_dict[key][1] 
        sys.exit() 

     else: 
      print("Ok, there are %s sticks on the board.") % (num_sticks) 
      print("|")*num_sticks 




     #AI player 
     guess = random.choice(stick_dict["hat{0}".format(num_sticks)][0]) 
     if guess > 1: 
      print "The computer chose %s sticks" % (guess) 
     elif guess == 1: 
      print "The computer chose %s stick" % (guess) 


     stick_dict["hat{0}".format(num_sticks)].append(guess) 
     print stick_dict 

     num_sticks = num_sticks - guess 


     if num_sticks == 1: 
      print("Ok, there is %s stick on the board.") % (num_sticks) 
      print("|")*num_sticks 

     elif num_sticks < 1: 
      print("Player 2 (AI BOT), you lose.") 
      #If the AI loses 
      for key in stick_dict: 
       if len(stick_dict[key]) == 2: 
        del stick_dict[key][1] 
      break 
     else: 
      print("Ok, there are %s sticks on the board.") % (num_sticks) 
      print("|")*num_sticks 

Для справки, когда я запускаю код размещен над ним прекратил попытки после Игрок 2 потерял, и я должен был «KeyboardInterrupt» вместо того, чтобы иметь петлю коды назад вокруг и продолжать играть, пока я не решил бросить курить.

Welcome to the game of sticks! Press <Enter> to continue... 
How many sticks are there on the table initially (10-100)? 
>>> 10 
Ok, there are 10 sticks on the board. 
|||||||||| 
Player 1: How many sticks do you take (1-3)? 
>>> 3 
Ok, there are 7 sticks on the board. 
||||||| 
The computer chose 3 sticks 
{'hat9': [[1, 2, 3]], 'hat8': [[1, 2, 3]], 'hat1': [[1, 2, 3]], 'hat3': [[1, 2, 3]], 'hat2': [[1, 2, 3]], 'hat5': [[1, 2, 3]], 'hat4': [[1, 2, 3]], 'hat7': [[1, 2, 3], 3], 'hat6': [[1, 2, 3]], 'hat10': [[1, 2, 3]]} 
Ok, there are 4 sticks on the board. 
|||| 
Player 1: How many sticks do you take (1-3)? 
>>> 3 
Ok, there is 1 stick on the board. 
| 
The computer chose 1 stick 
{'hat9': [[1, 2, 3]], 'hat8': [[1, 2, 3]], 'hat1': [[1, 2, 3], 1], 'hat3': [[1, 2, 3]], 'hat2': [[1, 2, 3]], 'hat5': [[1, 2, 3]], 'hat4': [[1, 2, 3]], 'hat7': [[1, 2, 3], 3], 'hat6': [[1, 2, 3]], 'hat10': [[1, 2, 3]]} 
Player 2 (AI BOT), you lose. 

^C--------------------------------------------------------------------------- 
KeyboardInterrupt       Traceback (most recent call last) 
/Users/andrewthappa/Documents/python/scripts/sticks/human_v_ai.py in <module>() 
    29 
    30 
---> 31 while True: 
    32   while num_sticks!=0: 
    33 

ответ

0
while True: 
    num_sticks = 10 
    while num_sticks!=0: 
     ... 

вам нужно сбросить счетчик

+0

Хотя 'num_sticks' не нужно быть сброшены, где вы указали, вы были правы, что нужно сбросить. Когда проигрыватель 1 или AI потеряли, это было где 'num_sticks' должен был быть сброшен. В любом случае, спасибо за указатель. –

+0

Я знаю ... но я решил, что вы можете настроить его на свои нужды ... –

+0

Из любопытства, скажем, я хотел запустить цикл всего 100 раз. Я попытался увеличить счетчик, а затем установить внешний цикл 'while' в' count <100', но цикл продолжается хорошо после того, как счетчик прошел 100. Есть ли у вас какие-либо предложения о том, как это сделать? –

Смежные вопросы