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

功能键按下流

如何解决功能键按下流

我想将我的纯游戏与不纯的词联系起来 - 字面上将键映射到操作。我想出了这样的东西使用惰性参数:

sealed trait Action
object Left extends Action
object Right extends Action
object Drop extends Action

def actionsstream(v: => Int): LazyList[Action] = {
val action: Option[Action] = v match {
  case 68 => Option(Left)
  case 67 => Option(Right)
  case 66 => Option(Drop)
  case _ => None
}

action match {
  case Some(action) => action #:: actionsstream(v)
  case None => actionsstream(v)
}
}

我需要立即检测按下的键。我想使用 ZIO,但没有办法进行这种检测(zio.Console.readLn 将等待输入按下)。所以我使用了一些库 org.jline.terminal 来达到检测的目的。

val terminal = TerminalBuilder.builder().jna(true).system(true).build()
terminal.enterRawMode()
val reader = terminal.reader()

游戏本身运行如下

val board = Option[Board](Board())
actionsstream(reader.read).foldLeft(board)((board2,action) => game logic here

一切正常。问题是我这样做是为了学习目的,我觉得所有这些都是一种黑客行为。它不适用于更复杂的环境(例如鼠标事件)。这可能是一种阻塞。我相信有更多推荐的方法解决这个问题:)

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