等价于R中的C getch()

等价于R中的C getch(),r,R,为了好玩,我正在R中开发一款2048游戏。我使用扫描(n=1)用户输入他/她的移动键。但与脚本语言一样,它需要按Enter键才能继续 问:有没有什么方法可以让C中的getch这样的东西在R中应用,只需按购买按钮而不按Enter 任何帮助都将不胜感激。我建议您使用windows/x11图形环境处理程序() 下面是一个打开窗口的示例,您可以使用键盘箭头移动蓝色正方形: keyboardAwareSquare <- function(){ currPosition <- c(0,0,1

为了好玩,我正在
R
中开发一款
2048
游戏。我使用
扫描(n=1)
用户输入他/她的移动键。但与脚本语言一样,它需要按
Enter
键才能继续

问:有没有什么方法可以让
C
中的
getch
这样的东西在
R
中应用,只需按购买按钮而不按
Enter


任何帮助都将不胜感激。

我建议您使用windows/x11图形环境处理程序()

下面是一个打开窗口的示例,您可以使用键盘箭头移动蓝色正方形:

keyboardAwareSquare <- function(){
  currPosition <- c(0,0,1,1) 
  drawRect <- function(){
    plot(c(0, 4), c(0, 4), type= "n", xlab = "", ylab = "",xaxt='n',yaxt='n')
    rect(currPosition[1],currPosition[2],currPosition[3],currPosition[4],col='lightblue')
  }
  keydown <- function(key) {
    offsetX <- 0
    offsetY <- 0
    if(key=='Left') offsetX <- -1
    if(key=='Right') offsetX <- 1
    if(key=='Down') offsetY <- -1
    if(key=='Up') offsetY <- 1
    if(!any(currPosition[c(1,3)] + offsetX < 0) && !any(currPosition[c(1,3)] + offsetX > 4)){
      tmp <- currPosition
      tmp[c(1,3)] <- tmp[c(1,3)] + offsetX
      currPosition <<- tmp
    }
    if(!any(currPosition[c(2,4)] + offsetY < 0) && !any(currPosition[c(2,4)] + offsetY > 4)){
      tmp <- currPosition
      tmp[c(2,4)] <- tmp[c(2,4)] + offsetY
      currPosition <<- tmp
    }
    drawRect()
  }
  drawRect()
  setGraphicsEventHandlers(prompt='use the keyboard arrows to move',onKeybd = keydown)
  eventEnv <- getGraphicsEventEnv()
}

# this part works differntly according to your OS 
if(.Platform$OS.type == 'unix')  x11(type = "Xlib") else x11()

keyboardAwareSquare()
getGraphicsEvent()

keyboardawarsquare当然@digEmAll会为我提供完美的解决方案。出于我的目的,twitter上的Henrik Bengtsson给了我一个与
getch
完全等效的解决方案。 为此,我们需要安装
keypress
cran
软件包:

install.packages(“按键”)

然后就可以使用了:


图书馆(按键)
y=keypress()


然后等待第一个按键。这个软件包最棒的地方在于它支持非字符键,比如
pagedown
up
down
等等。

我建议您不要使用控制台,而是看一看:@digEmAll我读了您发送的手册!我可以说这是很好的工具。但是当我尝试安装
grDevices
包时,它不存在于此:
包'grDevices'不可用(对于R版本3.3.2)
该包应随R-base一起提供,您不需要在
setGraphicHandler
中安装它,我遇到此错误错误:未设置图形事件处理程序
您使用的是windows、linux还是mac?我已将windows函数替换为x11,可能现在可以使用x11启用了吗?你能在R中查看
功能()的输出吗?@digmall是的!它已启用。我有时也用它!