在python寻宝游戏中的无限循环

时间:2016-01-17 21:27:00

标签: python python-2.7 infinite-loop

所以我一直在创造这个简单的寻宝游戏,你在棋盘上寻找三件宝物。但经过6次猜测,它让我陷入了困境! X代表您搜索过的区域,$符号是您找到的宝藏。请帮忙!!!!

import random

def hide_treasure(board):
   treasures=0
   while treasures<=3:
      random_row=random.randrange(0,5)
      random_col=random.randrange(0,5)
      if(0<=random_row<5) and(0<=random_col<5) and (board[random_row]       [random_col]==" "):
         board[random_row][random_col]="T"
         treasures+=1

def display_board(board,show_treasure=False):
    for col in range(5):
      print "  %d " %col,
   print   
   for row in range(5):
      print " %d:" %(row)," | ".join(board[row]).replace("T"," ")
      print "   ---+---+---+---+---"
   if show_treasure==True:
      " ".replace(" ","T")




def make_user_move(board):
   valid_move=False
   while not valid_move:
      try:
         ask_row=input("What row would you like to search (0-4): ")
         ask_col=input("What col would you like to search (0-4): ")
         if board[ask_row][ask_col]=="T":           
            board[ask_row][ask_col]="$"
            print
            print"YES! You found a treasure."
            return True
         elif board[ask_row][ask_col]=="$" or board[ask_row][ask_col]=="X":
            print
            print"You already tried there, please pick again."
         else:
            board[ask_row][ask_col]="X"
            print
            print"Nothing there."
            break

      except ValueError:
         print"Integers only for row and column values. Please try again!"
         continue
      except IndexError:
         print
         print"Sorry invalid location. Please try again!"


def main():
   board=[[" "," "," "," "," "],[" "," "," "," "," "],[" ", " "," "," ","    ",],[" "," "," "," "," "],[" "," "," "," "," "]]
   print"WELCOME TO TREASURE HUNT!"
   guess=10
   treasures=0
   while guess!=0 and treasures!=3:
      print
      print"You have",guess,"guesses left and have found",treasures,"/3  treasures"
      hide_treasure(board)
      display_board(board)
      guess-=1
      if make_user_move(board):
         treasures+=1

   if guess==0 and treasures!=3:
      display_board(show_treasure=True)
      print"OH NO! You only found %d"%treasures,"/3 treasures."
      print
      print"*** GAME OVER ***"
   elif treasures==3:
      display_board(board)
      print"CONGRATULATIONS! You found ALL of the hidden treasure."
      print
      print"*** GAME OVER ***"


main()

1 个答案:

答案 0 :(得分:1)

你遇到的问题是你没有足够的空间隐藏宝藏。你现在的代码不只是隐藏三件宝物,它在开始时隐藏三件宝物,然后在每次猜测后再隐藏三件宝物。在经过六次猜测之后,没有剩下的空间已经没有被猜到,或者隐藏着宝藏。

您可能希望将来自hide_treasure的呼叫移出while中的main循环。只需在开始时调用一次,你就会很好:

def main():
   board=[[" "," "," "," "," "],[" "," "," "," "," "],[" ", " "," "," ","    ",],[" "," "," "," "," "],[" "," "," "," "," "]]
   print"WELCOME TO TREASURE HUNT!"
   guess=10
   treasures=0
   hide_treasure(board)  ### call this here, instead of in the loop below
   while guess!=0 and treasures!=3:
      print
      print"You have",guess,"guesses left and have found",treasures,"/3  treasures"
      # hide_treasure(board)  ### remove this!
      display_board(board)
      guess-=1
      if make_user_move(board):
         treasures+=1

   #....