如何解决msvcrt 功能在游戏中似乎无法正常工作
根据我的研究,msvcrt 函数应该允许您输入单个命令而无需按下“输入”。为什么它在我的游戏中不起作用?例如,如果我单击“w”,角色理论上应该向北移动 1 个空格,而无需单击 Enter。游戏使用 input() 运行良好,但每次移动后都需要点击 Enter
import os
import msvcrt
#map
dungeonMap = [["0","0","0"],["0",".","0"]]
playerMap = [["0","S","0"]]
x = 1
y = 3
def displayMapAround(maps,x,y):
for dy in (-1,1):
print( maps[y+dy][x-1:x+2] )
#displaying the map
def displayMap(maps):
for y in range(0,9):
print(maps[y])
#selecting a map
mapChoice = dungeonMap
displayMapAround(playerMap,y)
#initialising the players position
position = mapChoice[0][0]
print(mapChoice[y][x])
while position != "E":
os.system('cls' if os.name == 'nt' else 'clear')
displayMapAround(playerMap,y)
displayMap(playerMap)
prevIoUsX = x
prevIoUsY = y
playerMap[y][x] = "."
print("W,S,D,A,MAP")
movement = msvcrt.getch()
movement=movement.upper()
if movement == "W":
y = y-1
position = mapChoice[y][x]
playerMap[y][x] = "S"
if movement == "S":
y = y+1
position = mapChoice[y][x]
playerMap[y][x] = "S"
if movement == "D":
x = x+1
position = mapChoice[y][x]
playerMap[y][x] = "S"
if movement == "A":
x = x-1
position = mapChoice[y][x]
playerMap[y][x] = "S"
position = mapChoice[y][x]
playerMap[y][x] = "S"
if position == "0" or position == "1":
print("You hit a wall,you stumble in the darkness back to your prevIoUs position...")
playerMap[y][x] = "0"
x = prevIoUsX
y = prevIoUsY
playerMap[y][x] = "S"``
解决方法
getch
是 documented 作为返回“字节字符串”,这意味着它永远不会与常规字符串进行比较,因此您应该将其直接与字节字符串进行比较:
movement = msvcrt.getch()
if movement in {b'w',b'W'}:
最好不要转换为大写,因为它可以返回不可打印的字符,如果用户按下,尝试将 `b'\xe0`` 转换为大写字母是没有意义的向上。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。