这样说
Traceback (most recent call last):
File "dungeon2.py", line 93, in <module>
move_monster(monster, steps)
NameError: name 'steps' is not defined
游戏开始时,怪物停留在原处,但我不确定为什么。
import random
BOARD = [(0, 0), (0, 1), (0, 2),
(1, 0), (1, 1), (1, 2),
(2, 0), (2, 1), (2, 2)]
def get_locations():
monster = random.choice(BOARD)
start = random.choice(BOARD)
door = random.choice(BOARD)
#If player, door or monster are random, do it all over again.
if monster == door or monster == start or door == start:
return get_locations()
return monster, door, start
def move_player(player, move):
x, y = player
if move == 'LEFT':
y -= 1
elif move == 'RIGHT':
y += 1
elif move == 'UP':
x -= 1
elif move == 'DOWN':
x +=1
else:
print("That move doesn't exist PLEASE.")
return x, y
def move_monster(monster, steps):
x, y = monster
moves = ['LEFT', 'RIGHT', 'UP', 'DOWN']
steps = random.choice(moves)
if steps == 'LEFT':
y -= 1
elif steps == 'RIGHT':
y += 1
elif steps == 'UP':
x -= 1
elif steps == 'DOWN':
x +=1
def get_moves(player):
moves = ['LEFT', 'RIGHT', 'UP', 'DOWN']
if player[1] == 0:
moves.remove('LEFT')
if player[1] == 2:
moves.remove('RIGHT')
if player[0] == 0:
moves.remove('UP')
if player[0] == 2:
moves.remove('DOWN')
return moves
def draw_map(player, monster):
print('_ _ _')
tile = '|{}'
for idx, cell in enumerate(BOARD):
if idx in [0, 1, 3, 4, 6, 7]:
if cell == player:
print(tile.format("X"), end ='')
elif cell == monster:
print(tile.format("M"), end = '')
else:
print(tile.format("_"), end ='')
else:
if cell == player:
print(tile.format("X|"))
elif cell == monster:
print(tile.format("M|"))
else:
print(tile.format("_|"))
monster, player, door = get_locations()
print("Welcome to the dungeon! *evil laugh*")
while True:
moves = get_moves(player)
draw_map(player, monster)
print("You are currently in room {}".format(player)) #fill in with player position
print("You can move {}".format(moves)) # fill in with available positions
print("Enter 'GIVEUP' to quit")
move = input("> ")
move = move.upper()
move_monster(monster, steps) LINE 93
if move == "GIVEUP":
print("Giving up, you wait sadly for the Beast to find you. It does, and makes a tasty meal of you...")
print("You lose.")
break
if move in moves:
player = move_player(player, move)
else:
print("Walls are hard, stop walking into them!")
continue
if player == door:
print("You narrowly escaped the beast and escaped")
print("You win!")
break
elif player == monster:
print("The beast found you!")
print("You lose!")
print("Game over")
break
# If it's a good move, change the player's position
# If it's a bad move, don't change anything
# If the new position is the door, they win!
# If the new positon is the Beast's, they lose!
# Otherwise, continue
它看起来像这样
|X|_|_|
|_|_|_|
|_|_|M| where M is player and X is monster
最佳答案
>>> monster = (2,3)
>>> x,y=monster
>>> x+=1
>>> x, y
(3, 3)
>>> monster
(2, 3)
如您在此处看到的,将怪物的位置分配给新变量并更改新变量不会更改原始怪物的位置。更改功能以使其不采取步骤作为参数后(如Mureinik的回答所述),您必须通过将代码更改为以下内容,以与播放器相同的方式移动怪物:
def move_monster(monster):
x, y = monster
moves = ['LEFT', 'RIGHT', 'UP', 'DOWN']
steps = random.choice(moves)
if steps == 'LEFT':
y -= 1
elif steps == 'RIGHT':
y += 1
elif steps == 'UP':
x -= 1
elif steps == 'DOWN':
x +=1
return x,y
和
monster = move_monster(monster)