Ser*_*tty 4 scala getch roguelike
我正在斯卡拉写一个roguelike.我需要能够看到用户何时按下箭头键.我找到的所有解决方案都要求玩家按下回车键.
有没有办法以与C中的getch()类似的方式检测控制台应用程序中的按键?
问题Enter是终端缓冲输入,因此您需要将其转换为raw模式.请注意,这是一个特定于平台的问题,因此它不是非常便携.
看看这个问题的答案:如何在Java中从控制台读取单个字符(用户键入它)?
UNIX系统的简答:
import sys.process._
(Seq("sh", "-c", "stty -icanon min 1 < /dev/tty") !)
(Seq("sh", "-c", "stty -echo < /dev/tty") !)
(1 to 20).foreach { _ =>
val c = Console.in.read
println("Got " + c)
}
Run Code Online (Sandbox Code Playgroud)
Scala 包含jline在其发行版中(稍微修改了包装),因为它在 REPL 中使用它。它通常不会加载,但如果您知道 Scala lib 目录在哪里,则可以将其添加到类路径中。如果将其添加到类路径中,那么这将起作用:
object Key extends App {
val con = new tools.jline.console.ConsoleReader()
println( con.readVirtualKey() )
}
Run Code Online (Sandbox Code Playgroud)
(请注意,此方法将分别给出 ^P ^N ^B ^F 表示上、下、左、右,与标准控制键匹配)。但这也会覆盖 的标准行为System.in.read(),因此您可以向其传递长度为 1 的数组以获取下一个等待字节(并使用 测试等待字节System.in.available,对于箭头键,该字节应该大于 1)。
| 归档时间: |
|
| 查看次数: |
4025 次 |
| 最近记录: |