微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

msvcrt 功能在游戏中似乎无法正常工作

如何解决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"``

解决方法

getchdocumented 作为返回“字节字符串”,这意味着它永远不会与常规字符串进行比较,因此您应该将其直接与字节字符串进行比较:

    movement = msvcrt.getch()
    if movement in {b'w',b'W'}:

最好不要转换为大写,因为它可以返回不可打印的字符,如果用户按下,尝试将 `b'\xe0`` 转换为大写字母是没有意义的向上

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?