我是Python的初学者,正在制作一个棋盘游戏,让玩家输入他们想要向左/向右移动的位置等等。但是有时它会正确移动,有时它不会。我认为它与我的网格阵列有关,但我不确定......如果有人可以帮助我,那就太好了,谢谢!
choice=0
b=0
oldP=0
newP=0
player_location='X'
x=8
y=0
xi=0
yi=0
up=0
down=0
left=0
right=0
new_board=[xi][yi]
gold_coins=0
bandits=5
treasure_chests=10
a=1
xi2=0
yi2=0
import random
def menu():
print('If you would like to play the Treasure Hunt , press 1')
choice=input('If not, press any key to exit')
if choice=='1':
print('Great! You have made the right choice :)')
else:
print('Goodbye.')
quit()
menu()
def grid():
new_board = [ ]
def board():
new_board = [ ]
top_row = [' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ']
new_board.append(top_row)
for x in range(0,8):
row = [' 0 ']*8
new_board.append(row)
return new_board
def print_board(b):
row_letters = [' ','A','B','C','D','E','F','G','H']
i = 0
for row in b:
print (row_letters[i],''.join(row))
i=i+1
new_board = board()
xi=int(8)
yi=int(0)
new_board[xi][yi] = player_location
print_board(new_board)
while a==1:
upordown=input('Would you like to move up or down? Enter \'u\' for up or \'d\' for down.').lower()
upordown=upordown.lower()
while not (upordown== 'u' or upordown== 'd'):
print('Invalid input. Please try again')
upordown= input().lower()
while upordown=='u':
try:
up=int(input('How many spaces would you like to move up?'))
b=0
except:
print('This is not a valid input, please enter a number.')
b=1
if b==0:
break
while upordown=='d':
try:
down=int(input('How many spaces would you like to move down?'))
b=0
except:
print('This is not a valid input, please enter a number.')
b=1
if b==0:
break
leftorright=input('Would you like to move left or right Enter \'l\' for left or \'r\' for right.').lower()
leftorright.lower()
while not (leftorright== 'l' or leftorright== 'r'):
print('Invalid input. Please try again')
leftorright= input().lower()
while leftorright=='l':
try:
left=int(input('How many spaces would you like to move left?'))
b=0
except:
print('This is not a valid input, please enter a number.')
b=1
if b==0:
break
while leftorright=='r':
try:
right=int(input('How many spaces would you like to move right?'))
b=0
except:
print('This is not a valid input, please enter a number.')
b=1
if b==0:
break
print('Okay...')
grid()
while True:
board()
player_location=' X '
if upordown=='d' and leftorright=='l':
new_board[y-down][x-left] = player_location
new_board = board()
xi2=int(xi2-left)
yi2=int(yi2-down)
print ("The current x location is",xi)
print ("The current y location is",yi)
print ("The amount you chose to go down was",down)
print ("The amount you chose to go right was",left)
xi = int(xi+left)
print("The new x location is",xi2)
yi = int(yi+down)
print("The new y location is",yi2)
print(' ')
while 0>xi2 or xi2>8 or 0>yi2 or yi2>8:
print('Your move was illegal. Please enter a move that will position you within the grid')
left=int(input('Please enter the number of moves you would like to move right'))
down=int(input('Please enter the number of moves you would like to move up.'))
xi=int(xi+left)
yi=int(yi+down)
new_board[xi][yi] = player_location
print_board(new_board)
break
elif upordown=='d' and leftorright=='r':
new_board = board()
xi2=int(xi2+right)
yi2=int(yi2-down)
print ("The current x location is",xi)
print ("The current y location is",yi)
print ("The amount you chose to go down was",down)
print ("The amount you chose to go right was",right)
xi = int(xi+right)
print("The new x location is",xi2)
yi = int(yi+down)
print("The new y location is",yi2)
print(' ')
while 0>xi2 or xi2>8 or 0>yi2 or yi2>8:
print('Your move was illegal. Please enter a move that will position you within the grid')
right=int(input('Please enter the number of moves you would like to move right'))
down=int(input('Please enter the number of moves you would like to move down.'))
xi=int(xi+right)
yi=int(yi+down)
new_board[xi][yi] = player_location
print_board(new_board)
break
elif upordown=='u' and leftorright=='l':
new_board = board()
xi2=int(xi2+left)
yi2=int(yi2-up)
print ("The current x location is",xi)
print ("The current y location is",yi)
print ("The amount you chose to go up was",up)
print ("The amount you chose to go left was",left)
xi = int(xi+left)
print("The new x location is",xi2)
yi = int(yi-up)
print("The new y location is",yi2)
print(' ')
while 0>xi2 or xi2>8 or 0>yi2 or yi2>8:
print('Your move was illegal. Please enter a move that will position you within the grid')
left=int(input('Please enter the number of moves you would like to move right'))
up=int(input('Please enter the number of moves you would like to move up.'))
xi=int(xi-left)
yi=int(yi-up)
new_board[xi][yi] = player_location
print_board(new_board)
break
elif upordown=='u' and leftorright=='r':
new_board = board()
xi2=int(xi2+right)
yi2=int(yi2+up)
print ("The current x location is",xi)
print ("The current y location is",yi)
print ("The amount you chose to go up was",up)
print ("The amount you chose to go right was",right)
xi = int(xi-right)
print("The new x location is",xi2)
yi = int(yi+up)
print("The new y location is",yi2)
print(' ')
while 0>xi2 or xi2>8 or 0>yi2 or yi2>8:
print('Your move was illegal. Please enter a move that will position you within the grid')
right=int(input('Please enter the number of moves you would like to move right'))
up=int(input('Please enter the number of moves you would like to move up.'))
xi=int(xi-right)
yi=int(yi-up)
new_board[xi][yi] = player_location
print_board(new_board)
break
我附上了我的所有代码,包括验证,以便用户不会逃离网格,因为我不确定要包含哪些部分以使我的问题和程序清晰。
答案 0 :(得分:2)
练习改进:
对调试here
进行了精彩的介绍我强烈建议使用增量编程:您写几行,确保它们正常工作,并且在您现有代码正确之前不要继续。这样,当某些东西不起作用时,你知道它在你添加的最后几行中。否则,你会得到200行代码,并且不知道错误所在的位置。
计划变更
此代码不是为调试或维护而设计的;你应该在继续之前解决这些问题。最重要的是,您创建了两组输入,用于执行一项任务(获取用户的移动),然后创建四组执行相同任务的代码(移动用户)。
相反,找到一些可用的措辞,让玩家在一个行上进入移动。您将其转换为移动坐标(例如[1,-2]为"向上一个和左两个"),然后使用单个代码块在网格中移动。不是测试四个代码块,而是测试一个;当你需要进行更改时,你可以进行一次更改,而不是在旋转和反射下进行四次复制。
<强>结果强> 您使用的代码应该更像这样:
def get_move():
advice = "Please enter your move in two integers:\n" +
"vertical, then horizontal. Use positive numbers\n" +
"for up and right, negative for down and left.\n"
example = "For instance, the line \n\t2 -1\n" +
" is 2 spaces up, one space left."
move = input(advice + example).split
x_move = int(move[0])
y_move = int(move[1])
# Here, you check move legality; repeat until you get a legal move
return x_move, y_move
while True:
print_board()
x_move, y_move = get_move() # get_move contains the input interaction and data checking
move(x_move, y_move) # perform the move; update the board.
另请注意,您应该更新现有的电路板,而不是(显然)为每次移动创建一个新电路板。保持这个循环直到游戏结束;不要在每一步都爆发。
这会让你走向解决方案吗?