Reputation: 13
So I've been creating this simple treasure hunt game where you look for three treasures in a board. But after 6 guesses, it gets me stuck in a loop! The X's represent areas you've searched and the $ signs are treasures you've found. Please help!!!!
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()
Upvotes: 1
Views: 5330
Reputation: 104722
The issue you're having is that you run out of room to hide treasures in. Your current code doesn't just hide three treasures, it hides three treasures at the start, then three more after each guess. After six guesses, there are no spaces left that haven't either been guessed already, or have a treasure hidden in them.
You probably want to move the call to hide_treasure
out of the while
loop in main
. Just call it once at the start, and you'll be good:
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
#....
Upvotes: 1